MIDOONY Logo

نرمال سازی داده (بخش سوم - شکل اول نرمال First Normal Form)

1400/02/27
نرمال سازی داده (بخش سوم - شکل اول نرمال First Normal Form)

#نرمال_سازی
اکنون که یک لیست #موجودیت و #ویژگی صحیح وجود دارد که در آن هر ویژگی یک و تنها یک نام (منحصربفرد) دارد، فرایند نرمال سازی می تواند آغاز شود.
نرمال سازی عبارتست از فرایند تجزیه و تحلیل وابستگی های بین ویژگی ها و موجودیت ها. هر ویژگی برای سه یا بیشتر مجموعه قوانین بررسی شده، سپس در صورت لزوم تنظیماتی صورت می گیرد تا همگی به شکل اول، دوم و سوم نرمال ( #3NF ) باشند. (احتمال دارد که بخواهید بیشتر جلو بروید به سمت شکل نرمال چهارم یا پنجم [#5NF ]، اما در بیشتر مواقع، 3NF نه تنها کافی است، بلکه ارجح می باشد).
بر اساس نظریه ریاضیات، اشکال نرمال سازی مبنای پیاده سازی جداول در سیستم های پایگاه داده رابطه ای می باشند. در عمل بسادگی مفاهیم مشترک اعمال می گردند، برای مثال شما فقط باید ویژگی ها را در موجودیت یا جدول کارمند قرار دهید، آن ویژگی ها (یا ستون ها) کارمند را توصیف می کنند. اگر ویژگی یافته اید که چیز دیگری را توصیف کند، آن را در جایی که به آن تعلق دارد قرار دهید.
Employee
EmployeeID
DeductionAmount <== error
در این مثال، DeductionAmount نباید به Employee منتسب شود، زیرا اطلاعاتی درباره کارمند به عنوان یک فرد، ارائه نمی دهد. در عوض، اطلاعاتی در مورد کسر حقوق و دستمزد آن کارمند ارائه می دهد. درصورت لزوم باید یک موجودیت کسر حقوق و دستمزد ایجاد می شود و DeductionAmount به آن منتقل شود.
Employee Payroll Deduction
EmployeeID <== unique employee identifier EmployeeID <== identifies the employee involved
PayrollDate
DeductionAmount
داده ها را در 3NF قرار داده و سلسله تجزیه و تحلیل های بعدی را با این نمای داده انجام دهید بعداً، وقتی همه الزامات شناخته شدند، و با در نظر گرفتن کاربرد الزامات، در مورد ساختارفیزیکی تصمیم گیری می شود.
مراحل زیر مدل داده را به ترتیب، به شکل اول، دوم و 3NF قرار می دهد. دو نکته را به خاطر داشته باشید، اولا، درخصوص نحوه قرار دادن مدل داده در 3NF، کاربر را راهنمایی می کنند. دوما، پس از توسعه چندین مدل داده، نتایج بصورت مفاهیم مشترکی ظاهر می شوند و شما تمایل دارید که سومین حالت نرمال را در نظر بگیرند و به طور خودکار مدل های داده موجودیت و ویژگی را در 3NF ایجاد کنید. بنابراین، گرچه فرایند کار خسته کننده به نظر می رسد، اما واقعاً چنین نیست.

#اولین_شکل_نرمال
C. J. Date در کتاب خود، مقدمه ای بر سیستم های پایگاه داده، تعریف اولین شکل نرمال (1NF) ارائه می کند که عبارتست از "یک رابطه R در اولین شکل نرمال ( #1NF ) است اگر و فقط اگر تمام حوزه های تحت آن دارای مقادیرتجزیه ناپذیر باشند". توجه به این نکته مهم است که در بحث Date از این خصوص، فرض شده که هر رابطه دارای یک کلید اصلی ( #Primary_Key ) مختص خود می باشد.
در اینجا تعریف فوق با ارائه شرایطی بیان می گردد. یک موجودیت 1NF است اگر :
1. تمام موجودیت ها باید دارای یک کلید باشند که از یک ویژگی یا ترکیبی از چند ویژگی ها تشکیل شده باشد
و بصورت منحصر به فرد یک موجودیت را مشخص کند.
2. برای یک موجودیت منفرد ، هر ویژگی باید دارای یک و تنها یک مقدار باشد.

نیاز 1 – کلید اصلی برای ایجاد منحصر به فرد بودن
برای یک مقدار خاص ویژگی (یا ترکیب ویژگی های) کلیدی، فقط یک موجودیت وجود داشته باشد. برای مثال، در موجودیت Advertised_Item، از ItemNumber برای شناسایی یک مورد منحصربفرد استفاده می شود. البته، کلید باید شفاف باشد یعنی نباید هیچ سوال و ابهامی در مورد آنچه ItemNumber شناسایی می کند وجود داشته باشد. بعلاوه کلید باید در طول زمان ثابت و بدون تغییر باشد. اگر موجودیتی کلید منحصر به فرد نداشته باشد، باید یک شناسه منحصر به فرد برای آن ایجاد کرد.
در موجودیت مشتری، نام مشتری برای شناسایی مشتریان گزینه مناسبی به نظر می آید ولی در عمل، استفاده از نام (به ویژه برای مشتریان حقوقی) مشکلات زیادی ایجاد می کند.
اولا، کسب و کارهای مختلف می توانند نام یکسان داشته باشند. دوما، یک کسب و کار اغلب با نام های مختلفی مورد اشاره قرار می گیرد..
همچنین در موجودیت مشتری، CustomerTelephoneNumber شناسه منحصر به فرد برای شناسایی مشتری است اما انتخابی ضعیف برای کلید اصلی است. اولا، عدد خودش ذاتا معنای خاصی ندارد. دوما، اگر مشتری دفتر خود را به مکان دیگری منتقل کند، CustomerTelephoneNumber تغییر می کند و روابط داده بر اساس آن شماره تلفن دیگر وجود نخواهد داشت.
برای موجودیت مشتری، ایجاد ویژگی جدید CustomerIdentifier توصیه می شود بر اساس ترکیبی از حروف و اعداد که البته برای هر مشتری منحصر به فرد باشد.
اگر دو نامزد برای کلید اصلی پیدا کنید، در خیلی از موارد شاید بتوان یکی را حذف کرد. با این حال، ممکن است هر دو گزینه مورد نیاز باشند (مانند نام مشتری و شماره تلفن مشتری). در این مثال. نام مشتری می تواند به عنوان کلید ثانویه در نظر گرفته شود.
لیست موجودیت و ویژگی بازبینی شده درقبل را مرور کرده و کلید اصلی هر موجودیت را مشخص می کنیم. در لیست جدید ویژگی کلید اصلی با "**" مشخص شده اند.

نیاز 2 – ویژگی ها فقط یک مقدار داشته باشند
دومین نیاز برای 1NF اغلب چنین بیان می شود: "موجودیت ها نباید گروه تکرار شونده داشته باشند.".
برای درک اینکه گروه تکرار شونده چیست، ویژگی OrderNumber را در مشتری نظر بگیرید. در هر لحظه، ویژگی OrderNumber مقادیر مختلفی خواهد داشت که نشان دهنده سفارشات متفاوت مشتری در طول زمان می باشد. بنابراین OrderNumber یک گروه تکرار شونده است.
به عنوان دومین مثال، ویژگی ItemNumber در Supplier نیز یک گروه تکرار شونده است زیرا یک تامین کننده اقلام مختلفی برای فروش ارائه می دهد.
Customer Supplier (Revised in Figure 2.3)
OrderNumber <== error – repeating group ItemNumber <== error – repeating group
در مقابل ، نام مشتری را در موجودیت مشتری در نظر بگیرید. برای مشتری معین، ما یک نام منحصر به فرد برای آن مشتری ایجاد می کنیم. بنابراین، نام مشتری گروه تکرار شونده نیست. 
گروه های تکرار شونده باید حذف شوند و در مکان مناسب خود قرار گیرند. ببینم این یعنی چی؟
مثال زیر را در نظر بگیرید.
Department Employee
DepartmentNumber EmployeeNumber
EmployeeNumber <== error – repeating group
مرحله 1: ویژگی تکرار شونده باید حذف شده سپس اطمینان یابیم که ویژگی در مدل داده 1NF وجود دارد.
Attribute Description
Customer
**CustomerIdentifier The alpha-numeric string that uniquely identifies each customer
CustomerTelephoneNumber The customer’s telephone number
CustomerName The customer’s name
CustomerStreetAddress The street name associated with the customer’s account
CustomerCity The city in which the customer lives
CustomerState The state in which the customer lives
CustomerZipCode The customer’s zip code
CustomerCreditRating The credit rating for this customer
OrderNumber An order number for this customer
Order
**OrderNumber A unique identifier for each order
CustomerTelephoneNumber The customer’s telephone number
CustomerName The unique name for this customer
OrderDate The date when the order was placed
ShippingStreetAddress The street address for where the order is to be shipped
ShippingCity The city to which the order is to be shipped
ShippingState The state to which the order is to be shipped
ShippingZipCode The zip code associate with the shipping address
CustomerCreditCardNumber The credit card number used for this purchase
CustomerCreditCardName The customer’s name on the credit card used
StockNumber The stock number for the item purchased
ShippingDate The date the order was shipped
Advertised_Item
**ItemNumber The unique identifier for each Advertised_Item
ItemDescription A description of the item advertised
ItemDepartment A code classifying the item into one of the various product categories
of items for sale
ItemWeight The shipping weight for each item
ItemColor The color of the item
ItemPrice The selling price of the item sold
SupplierID The unique identifier for the supplier of this item
OrderNumber The order number on which this item appears
Supplier
**SupplierID A unique identifier for each supplier
CompanyName The unique name for this supplier
SupplierStreetAddress The street address for this supplier’s main office
SupplierCity The city in which the supplier’s main office is located
SupplierState The state in which the supplier’s main office is located
SupplierZipCode The zip code for the supplier’s main office
ItemNumber The unique identifier for each item
Item_Ordered
**ItemNumber The unique identifier for each item on an order
**OrderNumber A unique identifier for each order
ItemDescription The description of the item advertised
QuantityOrdered The number of items purchased
SellingPrice The price of the item purchased
ShippingDate The date the item purchased was shipped to the customer
شما نباید فقط ویژگی را حذف کنید. بلکه ابتدا باید اطمینان حاصل کنید که این ویژگی در جایی مناسب وجود دارد. تجزیه و تحلیل کنید ویژگی چه چیزی را توصیف می کند و در صورت لزوم موجودیت جدیدی در 1NF ایجاد نمایید. پس از ایجاد یا شناسایی موجودیت، ویژگی را به آن منتقل کنید و ویژگی تکرار شونده را که در ابتدا یافت شده حذف کنید.
در مثال ذکر شده، EmployeeNumber یک گروه تکرار شونده در Departments است (واحدها بیش از یک کارمند دارند). همچنین EmployeeNumber در Employee به درستی وجود دارد. بنابراین خطای حاصله بسادگی با حذف ویژگی فوق از موجودیت Departmentd برطرف می گردد.

مرحله 2: سپس رابطه بین موجودیت ها را از جایی که تکرار می شود بررسی کنید، چه ویژگی به چه ویژگی ارتباط می یابد. تعیین کنید آیا رابطه، یک به چند است (1: M) یا چند به چند (M:M) است.
در مثال ذکر شده بالا رابطه Department-Employee، موجودیت ابتدایی Department و موجودیت نهایی Employee است. برای تعیین اینکه این رابطه 1: M است یا M:M ، بپرسید "برای یک Department چند Employee وجود دارد؟" ، سپس سوال را برعکس تکرار کنید "برای یک Employee چند Department وجود دارد؟" در اینجا، یک Department چندین Employee دارد، اما یک Employee با یک Department مرتبط است بنابراین، رابطه 1: M است.
وقتی رابطه 1: M باشد، یک رابطه قابل قبول است و هیچ کار دیگری لازم نیست. از طرف دیگر، اگر رابطه M:M باشد، یک تنظیم نهایی قبل از حرکت به مرحله 3 لازم است.
با بررسی ویژگی OrderNumber در موجودیت مشتری، می بینیم این ویژگی در موجودیت Order وجود دارد. بنابراین می تواند از موجودیت مشتری حذف شود. سپس، در بررسی رابطه بین موجودیت های مشتری و سفارش، در می یابیم که یک مشتری می تواند چندین سفارش داشته باشد، اما یک سفارش مربوط به یک مشتری است. بنابراین، رابطه بین مشتری و سفارش یک رابطه 1: M است و هیچ کار بیشتری لازم نیست.
اکنون ویژگی ItemNumber در موجودیت Supplier را در نظر بگیرید :
• ویژگی ItemNumber به کجا تعلق دارد؟ این ویژگی یک شناسه منحصر به فرد برای Adverted_Item (کالا) است و درآن وجود دارد بنابراین می تواند از موجودیت تأمین کننده حذف شود.
• آیا رابطه، 1: M است یا M:M ؟ یک کالا را می توان از چندین تامین کننده خریداری کرد، و یک تامین کننده کالای زیادی ارائه می کند. بنابراین، رابطه M: M است.
• اکنون، ک مشکل وجود دارد. رابطه M:M بین کالا و تأمین کننده. در اینجا نیاز به موجودیتی برای نگهداری اطلاعات (ویژگی هایی) در باره یک کالا هنگام خرید از یک تامین کننده منحصربفرد است. برای مثال، چقدر آن تأمین کننده برای آن کالا هزینه می گیرد و کیفیت کالا هنگام سفارش از تامین کننده خاص چطور است؟
Advertised_Item
**ItemNumber
<<-------------------------------->>
Reorder cost?
Quality of item last received?
Supplier
**SupplierID
اگر چنین موجودیتی وجود نداشته باشد، باید یک موجودیت جدید برای نگهداری ویژگی های مشترک موجودیت های  رابطه M:M  (در اینجا، کالا و تامین کننده) ایجاد کرد.

مرحله 3: تمام روابط چند به چند را به روابط یک به چند توسط یک موجودیت مشتق شده (در صورت لزوم) تبدیل نمایید.
روابط چند به چند، مشکل اساسی برای طراحی می باشد زیرا جایی برای نگهداری ویژگی های مشترک موجودیت های درگیر در رابطه وجود ندارد، یعنی ویژگی هایی در تقاطع دو موجودیت نهفته است.
در مثالبالا، یک موجودیت جدید به نام  Reorder_Item ایجاد می شود که دربر گیرنده اطلاعات کالاهایی است که می توانند از تأمین کنندگان سفارش داده شوند. 
Reorder_Item
**ItemNumber
**SupplierID
Reorder_Cost
QualityOfItemReceived

Advertised_Item
**ItemNumber

Supplier
**SupplierID

#Normalization

#Database

0 1289
دیدگاه کاربران
0 دیدگاه
شما هم دیدگاه خود را ارسال کنید