طراحي پايگاه داده (Database Design) به زبان ساده (قسمت دوم)
تعريف روابط در پايگاه داده
به مثال مشتري ، كالا و سفارش كالا برميگرديم .ميتوان گزاره هاي زير را بيان كرد :
يك سفارش مي تواند شامل چند كالا باشد
يك سفارش تنها به يك مشتري مربوط است
هر مشتري مي تواند چندين سفارش داشته باشد
به زبان پايگاه داده ، اين گزاره ها روابط ميان جدولها را بيان مي كنند. اين روابط را مي توان در نمودار موجوديت ها (ERD) نمايش داد ( شكل 7)
روابط ميان موجوديت ها مي توان به 3 صورت باشد :
1-يك به يك (One to One )
2-يك به چند (One to Many )
3-چند به چند (Many to Many)
در ادامه به تشريح هريك از اين روابط مي پردازيم
رابطه يك به يك
رابطه يك به يك مشابه تناظر يك به يك در رياضيات است . دراين نوع از رابطه، هر ركورد از جدول اول تنها و تنها با يك ركورد در جدول دوم رابطه دارد. براي مثال فرض كنيد اطلاعات هر مشتري 100 فيلد دارد و پايگاه داده ما اين تعداد فيلد را پيشتيباني نمي كند بنابراين بخشي از اطلاعات مشتري را در جدولي بنام CustomerDetial قرار مي دهيم .اين جدول با جدول Customer رابطه يك به يك دارد. فيلدي كه اين دو جدول را بهم مرتبط مي سازد فيلد Customernumber مي باشد. (شكل 8 )
به اعداد 1 و1 روي خط مرتبط كننده دقت كنيد. اين نشان دهنده رابطه يك به يك است.
رابطه يك به چند
دراين نوع از رابطه هر ركورد از جدول اول مي تواند با چند ركورد در جدول دوم رابطه داشته باشد. مثال مشتري و سفارش نمونهاي مناسب براي اين رابطه است. هر مشتري مي تواند چندين سفارش داشته باشد يعني هر ركورد ( مشتري) از جدول Customer مي تواند با چند ركورد ( سفارش) از جدول Order مرتبط باشد (شكل 9 )
به عدد 1 و علامت بي نهايت روي خط مرتبط كننده دقت كنيد اين نشان دهنده رابطه يك به چند است و اينچنين خوانده مي شود : هر ركورد از جدول مشتري ميتوان با چند ركورد از جدول سفارش مرتبط باشد.
رابطه چند به چند
اينجاست كه دنيا آشفته و پيچيده مي شود. دراين نوع از رابطه هر ركورد از جدول اول مي تواند با چند ركورد در جدول دوم رابطه داشته باشد و بالعكس.
اما چگونه مي توان اين پيچيدگي و آشفتگي را حل كرد ؟
با استفاده از يك جدول سوم يا جدول واسط مي توان اين مشكل را برطرف نمود.
فرض كنيد كه يك سيستم كاربران (User) زيادي دارد و هر كاربر مي تواند نقش هاي (Role) متفاوتي داشته باشد به عبارت ديگر :
هر كاربر مي تواند چند نقش داشته باشد
هر نقش مي تواند به چند كاربر مربوط باشد
براي ارتباط برقرار كردن ميان دو جدول كابران (Users) و نقش ها (Roles) جدول واسطي ميان اين دو جدول بنام نقش كاربران(Userroles) ايجاد مي كنيم. اكنون هر دو جدول كاربران و نقش ها با اين جدول رابطه يك به چند دارند. بنابراين يك رابطه چند به چند را به دو رابطه يك به چند تبديل نموديم : (شكل 10 )
به زبان ديگر :
Many to Many = One to Many + One to Many
به اطلاعات اين جداول دقت نماييد :
يكپارچگي ارجاع (Referential Integrity)
با ايجاد رابطه ميان جدوال از مزيتي بنام يكپارچگي ارجاعي استفاده مي كنيم . مزيت يكپارچگي بطور خلاصه به موارد زير اشاره دارد :
1- به روز رساني آبشاري : يعني هر گاه فيلد كليدي در يگ جدول تغيير كرد اين تغيير بايد در جدوال ديگر كه از طريق اين فيلد با جدول مربوطه در ارتباطند نيز اعمال گردد.
2- حذف آبشاري : يعني هر گاه قرار است فيلد كليدي از يگ جدول حذف شود بايد اطمينان حاصل شود كه در تمام جدوال مرتبط حذف صورت پذيرفته است.
توجه داشته باشيد كه يكپارچگي ارجاعي اگرچه معمولا يك مزيت بشمار مي رود ولي گاهي اوقات مساله ساز نيز مي شود.
نرمال سازي (Normalization)
ساختن يك پايگاه داده مانند ساختن يك خانه است. آيا براي ساختن يك خانه دانستن تعداد اتاق هاي مورد نياز كافي است و يا اينكه بايد به پارامترهاي ديگر نيز توجه داشت تا بتوان نقشهاي بهينه براي خانه تهيه كرد. نرمال سازي در واقع فرايند تهيه طرح بهينه براي يك پايگاه داده است.نرمال سازي مراحلي دارد و بايد به يك قانون توجه داشت :
هرچه در مرحله بالاتري از نرمال سازي باشيد پايگاه داده شما طرح و ساختاري كاراتر خواهد داشت.
نرمال سازي سطح اول(First normal form)
در نرمال سازي سطح اول گروه هاي تكراري را حذف نماييد.
اين گروههاي تكراري ميتوانند دو حالت را در بر مي گيرند :
1-در يك فيلد داده هاي زياد و طولاني قرار مي گيرد.
2-دو فيلد مشابه وجود دارد.
براي مثال جدول مشتري را در نظر بگيرد ) شكل 11 )
در اين جدول به فيلد آدرس مشتري Customer Address توجه كنيد. اطلاعات زيادي در اين فيلد قرار مي گيرند و عملا قابليت بازيابي اطلاعات كاهش مي يابد. اين فيلد را مي توان به پنج فيلد آدرس مشتري ، شهر مشتري ، استان مشتري ، كد پستي و كشور مشتري تقسيم نمود. (شكل 12 )
اكنون به جدول سفارشات توجه نماييد ( شكل 13 ) . در اين جدول فيلدهاي تكراري مانند شماره ، قيمت و مقدار كالا وجود دارد.
براي نرمال كردن اين جدول فيلدي تحت عنوان شماره سفارش به جدول اضافه مي كنيم و فيلدهاي اضافه را حذف مي كنيم :
اين اطلاعات در جدول بصورت زير خواهند بود .
علاقه مندی ها (Bookmarks)