تماس درباره   صفحه اصلی
  پايگاه داده > مدل رابطه اي  
 
 

مدل رابطه ای


مدل رابطه ای متداول ترین مدل داده است که داده ها و ارتباطات بين آنها را به صورت مجموعه ای از جداول نمايش می دهد.

اصطلاحات
کلید
خواص مدل
نرمالسازی
تبديل نمودار ER به مدل رابطه ای


مدل رابطه ای (relational model) در سال 1970 توسط ریاضیدانی به نام Edgar.F.Codd طراحی شد. مدل داده پيشنهادی یک مدل منطقی بر مبنای ریاضیات است که از منطق گزاره ها و تئوری مجموعه ها به عنوان زیربنا استفاده شده است.

يک پايگاه داده رابطه ای (relational database) پايگاه داده ای است که با مدل رابطه ای مطابقت داشته باشد و به صورت مجموعه ای از جدول هائی که از ديد کاربر قابل درک هستند ديده می شود.

یک سیستم مدیریت پایگاه داده رابطه ای (RDBMS) سيستمی است که داده را طبق مدل رابطه ای مديريت می کند.

RDBMS ها معمول ترین نوع سيستم های مديريتی پایگاه داده امروزی هستند (نظير Microsoft SQL Server، Microsoft Access، Oracle، MySQL، Sybase، DB2 و Informix).

اکثر RDBMS ها SQL را به عنوان زبان پرس و جوی خود بکار می برند.


اصطلاحات

جدول (رابطه)

پایگاه داده رابطه ای مجموعه ای از آرايه های دو بعدی است که جداول (table) يا رابطه (relation) ناميده می شوند. جدول مهمترین ساختار داده ای در سیستم پايگاه داده رابطه ای است.

هر جدول (یا رابطه) داده ها را به صورت سطر ها و ستون ها شکل می دهد. هر سطر شامل یک نمونه منحصر بفرد داده و مربوط به یک نمونه موجودیت است. ستون ها صفات خاصه آن موجودیت را بیان می کنند.

ترتيب سطرها و ستون ها در جداول اهميت ندارد.

تعداد ستون های هر جدول را درجه (Degree) و تعداد سطرهای آن را کاردینالیتی(Cardinality) می نامند.

تاپل (رکورد)

یک سطر از يک رابطه را یک تاپل (tuple) می نامند. هر تاپل در جدول نمایانگر یك نمونه از یك موجودیت است که ركورد هم گفته می شود.

تاپل ها ممکن است روی یکی از صفات خاصه به طور مرتب ذخیره شوند. ولی به طور کلی لازم نيست مرتب باشند.


مثال. رابطه Customer را درنظر بگيريد.

Customer Relation Example

فيلد (صفت خاصه)

هر ستون در جدول نشان دهنده یك صفت خاصه از یك نوع موجودیت است که فیلد (field) نامیده می شود. در هر فيلد نوع خاصی از داده ها ذخیره می شود.

مقادیر هر سطر باید با فيلدهای جدول نظیر به نظیر باشد به عبارت دیگر ترتیب مقادیر فيلدها در همه رکوردها بايد یکسان است. ولی ترتيب ستون ها اهميت ندارد.

دامنه

مجموعه ای از مقادیر مجاز یک ستون دامنه (domain) نام دارد. معمولا دامنه یک ستون از یک نوع داده است.

محصولات RDBMS مستقیما دامنه را حمایت نمی کنند بلکه مجموعه ای از انواع داده عددی، متن، تاريخ و غيره را دارند که نحوه ذخيره سازی داده ها را مشخص می کنند. تاثیر دامنه را بيشتر می توان روی قیدها و مکانیسم های ورود داده مشاهده کرد.

مقادیر صفات خاصه معمولا باید اتمیک باشند یعنی غیرقابل تفکیک باشند.

مقدار خاص null عضوی از هر دامنه است.

NULL

null يا <null> یک علامت خاص است که تهی بودن فيلدی را نشان می دهد، برای زمانی که مقداری برای فيلد وجود ندارد يا آنرا نمی دانيم استفاده می شود(برای مثال مشتری تلفن ندارد يا شماره آنرا نداريم).

اکثر اوقات باید مشخص کنیم که آیا یک فيلد می تواند تهی باشد یا خیر. سعی در درج null در فيلدی که مجاز نیست ایجاد مشکل می کند.

دانستن چگونگی برخورد RDBMS با null اهميت دارد زيرا مقادیر تهی نمی توانند در عمليات داده ای شرکت کنند.

بعضی از RDBMS ها null را اصلا ندارند. راه حل آنها تعریف یک ستون اضافی برای ستونی است که می تواند تهی باشد. این ستون معین می کند آیا ستون مرتبط به آن دارای مقدار معتبر است یا خیر.

یک راه دیگر پر کردن فيلد با يک مقدار پیش فرض است. اگر مقدار پیش فرض قابل مشاهده ای وجود ندارد یا مشکل را حل نمی کند از null می توان استفاده کرد ولی بايد مطمئن شد که در عمليات مسئله ساز نمی شود.

پایگاه داده

یک پایگاه داده شامل چند جدول است. هر جدول بخشی از داده های سازمان را نمايش می دهد. ذخیره کلیه اطلاعات در یک جدول باعث تکرار داده يا نياز به مقدار null می شود.


مثال. رابطه های محصول، مشتری و فروش را در يک سيستم فروش به صورت زير تعريف می شوند:

Sell Example

به جای رسم جدول به صورت فوق می توان رابطه ها را به شکل زير تعريف کرد:

PRODUCT(ProductNo, Description, ReorderLevel, Price, QtyInStock)
CUSTOMER(CustomerNo, First, Last, Address, CreditLimit)
SALE(SaleNo, SaleDate, CustomerNo, ProductNo, Qty, Amount, Salesrep)


کلید

در مدل رابطه ای هیچ دو سطری در جدول نباید مشابه باشند. این در واقع یک ویژگی اساسی جدول است. اگر دو سطر دو نمونه موجوديت متفاوت را دردنیای واقعی نشان دهند به نحوی بايد از هم متمايز شوند تا به هر کدام در جدول بتوان جداگانه رجوع کرد. بنابراين حداقل یک مقدار منحصر به فرد بايد وجود داشته باشد که باعث متمايز شدن سطرها از يکديگر شود. ستونی که حاوی اين مقدار است کلید ناميده می شود.

کلید داری دو خاصیت را بايد دارا باشد؛ منحصر به فرد بودن و غیر تهی بودن(قانون اول جامعیت).

در يک رابطه انواع مختلفی از کلید ممکن است وجود داشته باشد:

• کلید کاندید
• کلید ترکیبی
• کلید اصلی
• کلید خارجی

کلید کاندید

از مجموعه صفات خاصه یك رابطه آنهایی كه دارای دو ویژگی زیر هستند به عنوان كلید كاندید (candid key) در رابطه مذكور مطرح می شوند:

• منحصر به فرد و غير تهی بودن
• غیر قابل كاهش بودن، يعنی هیچ زیر مجموعه مناسبی از صفات خاصه تشكیل دهنده كلید، دارای خاصیت منحصر به فرد بودن نباشد.


مثال. شماره دانشجوئی و کد ملی کليدهای کانديد در جدول مشخصات دانشجو در دانشگاه می توانند باشند.


کلید ترکیبی

کلید ترکیبی (compound key) کليدی است که از ترکيب چند صفت خاصه ساخته می شود.


مثال. در رابطه دانشجو مجموعه نام و شماره شناسنامه می توانند به عنوان كلید ترکيبی در نظر گرفته شوند.


کلید اصلی

كلید اصلي (primary key)، كلید كاندیدی است كه توسط طراح پايگاه داده انتخاب و معرفی می شود. به عبارتی طراح بانك، یكی از كلیدهای كاندید را به عنوان كلید اصلی بر میگزیند.

در تعیین كلید اصلی از بین كلیدهای كاندید باید دو ضابطه زیر را در نظر گرفت:

• اهمیت كلید اصلی نسبت به سایر كلیدهای كاندید در پرس و جوها
• كوتاهتر بودن طول كلید كاندید از نظر تعداد بایت

نکته. هر جدول تنها یک کلید اولیه دارد اما به این معنی نیست که تنها یک شناسه منحصر به فرد دارد.
نکته. کلید می تواند صفات طبیعی موجودیت انتخاب شود، ولی اگر هيچ کدام از صفات خاصه مناسب نبودند يک کليد جانشين نسبت داده شود (مانند شماره کارمندی برای جدول کارمند).
نکته. در جدول، زیر کلید اولیه یک خط کشیده می شود.
نکته. اگرچه در مدل رابطه ای کليه جداول باید دارای کلید اولیه باشند، ولی تعدادی از RDBMS ها اجباری در تعيين کليد برای هر رابطه نمی کنند، در اينصورت ترکيب کليه صفات خاصه به عنوان کليد درنظر گرفته می شود.


مثال. شماره دانشجوئی در جدول مشخصات دانشجو را می توان به عنوان کليد اصلی انتخاب کرد.


کلید خارجی

کليد خارجی (foreign key) صفت خاصه ای در يک جدول است که در جدول دیگر نقش کلید اصلی یا کاندید را بازی کند.

کليد خارجی ارتباط بين دو جدول را برقرار می کند.

کلید خارجی بر خلاف کليد اصلی می تواند تکراری یا null باشد و ممکن است در يک جدول بیشتر از یک کلید خارجی وجود داشته باشد.

جدول شامل کلید خارجی را گاهی جدول فرزند و جدولی که به آن ارجاع دارد را جدول والد می نامند.


مثال. شماره مشتری در جدول SALE کلید خارجی است زیرا در جدول CUSTOMER کلید اصلی است. شماره مشتری که در جدول فروش بدست می آيد در جدول مشتری جستجو می شود تا تعيين شود محصول به کدام مشتری فروخته شده است.


خواص مدل

مدل رابطه ای دارای ويژگی های زیر است:

• متداول ترین مدل است
• بر اساس تئوری ریاضی است
• داده ها و ارتباطات بين آنها در پايگاه داده به صورت مجموعه ای از جداول ديده می شود
• هيچ جدولی دارای سطرهای تكراری نيست
• ترتیب سطرها و ستون ها در هر جدول مهم نيست
• ستون ها اتميک هستند يعنی مقادیر ستون ها غیر قابل تجزیه اند
• هر مقدار که در دو رکورد مختلف واقع می شود رابطه ای را بین دو آن رکورد می فهماند
• ارتباط رابطه ها با يکديگر از طریق صفات خاصه مشترک انجام می گيرد
• ایجاد، دسترسی و توسعه آن آسان است. بعد از ایجاد پایگاه داده اولیه، جداول جدید می توانند اضافه شوند بدون اینکه نیاز به تغییر کاربردهای موجود باشد
• مدل دید کاربر است نه روشی که داده بطور داخلی سازماندهی می شود


نرمالسازی

نرمالسازی (normalization) با نحوه تقسيم جداول در پايگاه داده رابطه ای سروکار دارد. نرمالسازی فرآيند تغيير ساختار پايگاه داده به منظور اجرای بهتر و راحتی کارکردن با داده است. فرم های مختلف نرمالسازی که روی پايگاه داده اعمال می شوند را فرم های نرمال می نامند.


تبديل نمودار ER به مدل رابطه ای

هر موجوديت در مدل ER به يک جدول در مدل رابطه ای تبديل می شود. صفات خاصه موجوديت ستون های جدول و هر نمونه موجوديت سطرهای آنرا را می سازند.

قبل از اينکه فرآيند تبديل انجام شود بايد مطمئن شويم که مدل ER تا حد ممکن ساده شده است.


مثال. موجوديت دانشجو را درنظر بگيريد.

ER map to relation

student(student_no, name, address, date_of_birth)

برای تبديل ارتباط يک به يک به رابطه، با توجه به اختياری بودن يا اجباری بودن ارتباط، موجوديت ها يا ترکيب می شوند يا کليد اصلی يک موجوديت به عنوان کليد خارجی در ديگری قرار می گيرد.

مثال. ارتباط يک به يک بين موجوديت های کارمند و قرارداد را درنظر بگيريد. هر کارمند يک قرارداد دارد و هر قرارداد مربوط به يک کارمند است.

ER map to relation

به رابطه زير تبديل می شود:

Employee(emp_no, name, cont_no, start, end, position, salary)

يا می تواند به صورت دو رابطه زير تبديل شود:

Employee (emp_no, name, contract_no)
Contract(cont_no, start, end, position, salary)
يا
Employee (emp_no, name)
Contract(cont_no, start, end, position, salary, emp_no)

در تبديل ارتباط ها يک به چند کليد اصلی موجوديت سمت "يک" به عنوان کليد خارجی در سمت ديگر قرار می گيرد.

مثال. ارتباط يک به چند دانشجو و رشته تحصيلی را درنظر بگيريد:

ER map to relation

که به رابطه های زير تبديل می شود:

Student(student_no, s_name, address, DateOfBirth, module_no)
Module(module_no, m_name)

در ارتباط چند به چند يک رابطه جديد با کليد های اوليه هر دو موجوديت ساخته می شود.

مثال. ارتباط دانشجو و درس را درنظر بگيريد.

ER map to relation

که به رابطه های زير تبديل می شود:

Student(student_no, s_name, Address, DateOfBirth)
Course(Course_no, C_name)
Study(student_no, Course_no)


 


 


صفحه اصلی| PDF| درباره| تماس