طراحي پايگاه داده (Database Design) به زبان ساده ( قسمت سوم )
نرمالسازي سطح دوم (Second Normal Form)
در نرمالسازي سطح دوم بايد اطمينان حاصل شود كه فيلدهاي غير كليدي، وابسته به فيلد(هاي) كليدي هستند.
به اطلاعات جدول زير در مرحله قبل كه در سطح اول نرمالسازي قرار گرفت، توجه كنيد. دراين جدول همان گونه كه مشاهده ميشود فيلدهاي Order number وProduct identifier ميتوانند ركورد را يكتا كنند، يعني تركيب آنها كليد اصلي به شمار ميرود. اما به سه ركورد اول دقت کنيد ، شماره مشتري يعني فيلد Customernumber در اين ركوردها يكسان است . يعني شماره مشتري با شماره سفارش تغيير مي كند نه با شماره كالا. بنابراين باز اطلاعات تكراري داريم كه ميتواند در نگهداري پايگاه داده ايجاد مشكل كند.
چاره اين مشكل در نرمال سازي سطح دوم است . در اين سطح جدولي به نام در اين سطح جدولي به نام Order Product ايجاد ميكنيم و اطلاعات كالا را به اين جدول مي بريم:
اكنون اطلاعات مشتري، تاريخ سفارش، تاريخ حمل سفارش كه تنها به فيلد شماره سفارش وابسته اند در جدول سفارش و اطلاعات كالا ، مقدار و قيمت كالا در جدول جديد سفارش كالا قرار مي گيرد.
نرمال سازي سطح سوم (Third Normal Form)
در نرمال سازي سطح سوم بايد اطمينان حاصل شود كه هيچ فيلدهاي غير كليدي وابسته به فيلد(هاي) غيركليدي نيست .
فرض كنيد در جدول سفارشهایي كه در مرحله دوم نرمال شد، فيلد نام خانوادگي مشتري Customer lastname را اضافه نماييم چه اتفاقي خواهد افتاد؟
در اين حالت فيلد نام خانوادگي مشتري تنها به شماره مشتري كه كليد اصلي نيست، وابسته است . بنابراين اولا مشكل به روزرساني خواهيم داشت يعني اگر نام مشتري در جدول مشتري تغيير كند بايد در جدول سفارشها نيز نام را تغيير دهيم و ثانيا مشكل فزوني داده در جدول سفارش را خواهيم داشت. براي بر طرف كردن اين مشكل اين فيلد را از جدول سفارش حذف و به جدول مناسب (مشتري)اضافه مي كنيم. اين نمونهاي از نرمال سازي سطح سوم است.
نرمال سازي Boyce/Codd
اين نوع از نرمال سازي كه از آن به عنوان نوعي از نرمال سازي سطح سوم نيز ياد ميشود، در حالتهاي زير به كار ميرود:
1- بايد دو كانديدا (يا بيشتر) براي فيلد كليدي موجود باشد.
2- حداقل دو تا از اين كانديداها بايد مركب باشند.
3- كليدهاي كانديدا بايد ويژگيهاي مشترك داشته باشند.
ساده ترين راه براي درك نرمال سازي بويس كد، استفاده از روابط كاركردي Functional Dependency است، به مثال زير دقت کنيد:
در جدول فوق دو كليد كانديدا وجود دارد كه هر دو هم مركب هستند:
· {SupplierID, ProductID}
· {SupplierName, ProductID}
اكنون ميتوان مشاهده نمود كه رابطه كاركردي بين فيلدهاي {SupplierID} {SupplierName وجود دارد. به نمودار زير دقت کنيد:
بنابراين مدل صحيح جدول فوق با انجام نرمال سازي بويس – كد به صورت زير خواهد بود:
نرمال سازي سطح چهارم (Fourth Normal Form)
اين سطح از نرمال سازي بر پايه اين تئوري قرار دارد:
" گروههاي مستقل تكراري نبايد با يك رابطه تركيب شوند."
به جدول زير توجه كنيد:
در جدول فوق هر كالا مي تواند شيوه هاي بسته بندي مختلف داشته باشد كه در فيلد Pack Size آمده است. اين حالت با تئوري فوق تناقض دارد. شكل نرمال شده آن به صورت زير است:
نرمال سازي سطح پنجم (Fifth Normal Form)
نرمال سازي در اين سطح وابستگي های الحاقي (Join Dependencies) را نشانه مي رود. در اين نوع وابستگي موجوديت اول به موجوديت دوم وابسته است، موجوديت دوم به موجوديت سوم وابسته است و موجوديت سوم به موجوديت اول وابسته است، بنابراين يك محدوديت چرخشي ايجاد مي شود.
جدول زير را در نظر بگيرد:
به گزاره هاي زير دقت کنيد:
تامين كننده كالا را تامين مي كند
مشتري كالا را سفارش مي دهد
آيا مي توان قياس نمود كه " تامين كننده براي مشتري كالا تامين مي كند. "
در جهان واقعي اين قياس نامعتبر است زيرا تامين كننده ممكن است چيزي غير از كالا براي مشتري تامين كند. اما وابستگي الحاقي زماني بوجود مي آيد كه شرطي اضافي براي معتبر بودن اين قياس وجود داشته باشد.
اكنون اگر فرض كنيد قياس بالا معتبر مي باشد با در نظر گرفتن جدول بالا مشكلاتي در به روزرساني جدول ايجاد مي شود. براي مثال براي اضافه كردن ركورد {"Ma Maison", "Aniseed Syrup", "Berglunds snabbköp"{بايد ركورد {"Exotic Liquids", "Aniseed Syrup", "Berglunds snabbköp"}, را اضافه كرد. براي بر طرف كردن اين مشكل و دستيابي سطح پنجم نرمال بايد سه رابطه (SupplierProduct, ProductCustomer, and SupplierCustomer) را ايجاد کرد.
در چه مواقعي بايد نرمال سازي را انجام داد
در پاره اي از اوقات اهداف كسب وكار براي بهينه بودن عملكرد پايگاه داده غلبه مي كند و لازم است از انجام نرمال سازي سطح سوم چشم پوشي كنيم و به اصطلاح دادهها را " غير نرمال " (Denormalize) کنيم. دو حالت كلي براي پرهيز از نرمال سازي وجود دارد:
1- زماني كه شما با اضافه كردن فيلدي در يك جدول مي توانيد به طور محسوس زمان جستجوی اطلاعات از جداول زياد را كاهش دهيد.
2- زماني كه استفاده از يك فيلد محاسباتي در جدول زمان اجرا، پرس و جو و نمايش گزارش را به شدت افزايش مي دهد و اين فيلد بسيار استفاده مي شود.
روابط يگانه (Unary)و سه گانه (Ternary)
روابطي كه تاكنون بحث شد روابط دوگانه (Binary) است كه در آن موجوديت ها دوبه دو با هم رابطه دارند. اما روابط مي تواند حالتهاي ديگري نيز داشته باشد. يكي از اين حالتها رابطه يگانه است. مثال كلاسيك اين حالت رابطه مدير و كارمند است. وقتي يك مدير، مدير مافوق دارد بنابراين در جدول كارمندان در واقع اسم اين فرد درتعدادي از ركوردها به عنوان مدير تعدادي از كارمندان ذكر مي شود و در ركورد خود اين مدير (مدير نيز يك كارمند است) نام مديري ديگري به عنوان مدير او در فيلد مورد نظر پر مي شود. به شكل دقت کنيد:
نوع ديگري از روابط رابطه سه گانه است. براي درك اين رابطه به مثال زير دقت کنيد. كالاي Mozzarella di Giovanni بوسیله يك مشتري به نام Vins et alcools Chevalier خريداري شده است و اين كالا به وسیله دو توليد كننده به نامهاي Formaggi Fortini s.r.l. وForêts d'érables توليد مي شود. به جداول طراحي شده توجه کنيد:
در جدول مياني مشخص شده است كه اين مشتري با سفارش شماره 10248 كالاي مذكور را خريداري كرده است اما مشخص نيست كه اين كالای خريداري شده به وسیله چه شركتی توليد شده است . بنابراين روابط اين جدولها كه در نمودار زير نيز آمده است اين نقص را دارد كه توليد كننده را مشخص نمي كند.
براي حل اين مساله كالا را از زنجيره روابط حذف كنيد و روابط را مانند دياگرام زير طراحي کنيد:
طراحي شاخص ها (Index)
آخرين گام در طراحي منطقي پايگاه داده تعريف شاخصها است. شاخصها در يك پايگاه داده مانند شاخصها در يك كتاب اند كه سرعت دستيابي به اطلاعات مورد نياز را افزايش مي دهند. به يك رهنمود توجه كنيد:
اغلب پايگاه داده ها امكان تعريف انواع شاخص ها اعم از يكتا و غير يكتا، لايه اي (Clustered)و غير لايه اي(Non-Clustered) را به كاربر مي دهند.
شاخص هاي يكتا، شاخص هايي هستند كه ركورد تكراري ندارند.
شاخص هاي غيريكتا، شاخص هايي هستند كه ركوردهاي تكراري را نيز دربرمي گيرند.
شاخصهاي لايه اي، شاخص هايي است كه كه داده ها بطور فيزيكي به همان ترتيبي كه در شاخص هستند در جدول ذخيره شده اند.
شاخصهاي غيرلايه اي، شاخص هايي است كه ابتدا پايگاه داده محل آنها را شناسايي كرده و سپس به محل مربوطه در جدول جهت بازيابي اطلاعات رجوع مي كند.
آزمون طرح منطقي پايگاه داده
تا به اينجا نقشه راهي براي طراحي منطقي پايگاه داده معرفي شد اما لازم است قبل از طراحي فيزيكي آن طرح مورد آزمون قرار گيرد. حتما مي پرسيد چگونه مي توان يك طرح روي كاغذ را آزمایش كرد ؟ اين كار چندان مشكل نيست . كافي است مثلا در مثال مشتري و سفارش كالا بطور فرضي يك مشتري تعريف كنيد، چند كالا معرفي نماييد و سفارش ايجاد كنيد و... . دربسياري از اوقات با همين روش مي توانيد بسياري از فيلدهايي را كه از قلم افتاده اند را به طرح اضافه کنيد.
علاقه مندی ها (Bookmarks)