جلسه 7 مدل داده رابطهاي رابطه، ویژگي، تاپل، بسط، کاردینالیتي مفاهیم موجودیت، موجودیت ضعیف،
مقدمه:
مدل داده رابطهای، پایه و اساس اکثر سیستمهای مدیریت پایگاه داده مدرن، از جمله SQL Server، Oracle، MySQL و PostgreSQL است. این مدل بر اساس مفهوم ریاضی مجموعه ها و منطق رابطهای بنا شده و اطلاعات را در قالب جداول سازماندهی میکند.
مفاهیم کلیدی:
- موجودیت (Entity):
- تعریف: یک موجودیت، شیء یا مفهوم قابل شناسایی در دنیای واقعی است که دادههای مربوط به آن در پایگاه داده ذخیره میشود. موجودیتها میتوانند اشیاء فیزیکی (مانند دانشجو، کتاب، خودرو) یا مفاهیم انتزاعی (مانند دوره آموزشی، وام بانکی) باشند.
- مثال: در یک سیستم دانشگاهی، “دانشجو” یک موجودیت است.
- موجودیت ضعیف (Weak Entity):
- تعریف: موجودیتی که نمیتواند به طور مستقل شناسایی شود و وجودش وابسته به موجودیت دیگری (موجودیت قوی) است. موجودیت ضعیف معمولاً دارای کلید اصلی نیست و توسط ترکیبی از صفات خودش و کلید اصلی موجودیت قوی شناسایی میشود.
- مثال: “فرزند” میتواند یک موجودیت ضعیف باشد که وابسته به موجودیت “کارمند” است. اطلاعات یک فرزند به تنهایی معنیدار نیست مگر اینکه بدانیم فرزند کدام کارمند است.
- فرا موجودیت (Superclass/Supertype) و زیرموجودیت (Subclass/Subtype):
- تعریف: در مدلهای شیءگرا و گاهی در مدلسازی ER پیشرفته، میتوان روابط وراثت را مدل کرد. فرا موجودیت، موجودیت عامتری است که صفات مشترک چندین موجودیت دیگر را در بر میگیرد. زیرموجودیتها، موجودیتهای خاصتری هستند که از فرا موجودیت به ارث میبرند و صفات خاص خود را نیز دارند.
- مثال: “شخص” میتواند یک فرا موجودیت باشد و “دانشجو” و “استاد” زیرموجودیتهای آن باشند. هر دو دانشجو و استاد “نام”، “نام خانوادگی” و “کد ملی” دارند (صفات فرا موجودیت)، اما دانشجو “شماره دانشجویی” و استاد “شماره پرسنلی” دارد (صفات خاص).
- رابطه (Relationship):
- تعریف: ارتباط یا پیوند بین دو یا چند موجودیت. روابط نشان میدهند که موجودیتها چگونه با یکدیگر در تعامل هستند.
- مثال: رابطه “ثبتنام” بین موجودیتهای “دانشجو” و “درس”.
- ویژگی (Attribute):
- تعریف: خاصیت یا صفتی که یک موجودیت یا رابطه را توصیف میکند. ویژگیها مقادیر مشخصی را برای هر نمونه از موجودیت یا رابطه نگه میدارند.
- مثال: برای موجودیت “دانشجو”، ویژگیهایی مانند “نام”، “نام خانوادگی”، “شماره دانشجویی”، “معدل” تعریف میشوند.
- تاپل (Tuple):
- تعریف: در مدل رابطهای، هر ردیف (سطر) در یک جدول، یک تاپل یا رکورد نامیده میشود. هر تاپل نمایانگر یک نمونه یا رکورد از موجودیت یا رابطه است.
- مثال: در جدول “دانشجو”، هر سطر که اطلاعات یک دانشجو را شامل میشود، یک تاپل است.
- بسط (Degree):
- تعریف: تعداد موجودیتهایی که در یک رابطه شرکت میکنند.
- یوناری (Unary) یا یکتایی: رابطهای بین یک موجودیت و خودش (مثلاً رابطه “سرپرستی” بین کارمندان).
- باینری (Binary) یا دوتایی: رابطهای بین دو موجودیت (رایجترین نوع).
- ترنری (Ternary) یا سهتایی: رابطهای بین سه موجودیت.
- مثال: رابطه “ثبتنام” بین “دانشجو” و “درس” یک رابطه باینری است.
- کاردینالیتی (Cardinality) رابطه:
- تعریف: مشخص میکند که چند نمونه از یک موجودیت میتوانند با چند نمونه از موجودیت دیگر از طریق یک رابطه مرتبط شوند. کاردینالیتی شامل انواع زیر است:
- یک به یک (One-to-One | 1:1): هر نمونه از موجودیت A با حداکثر یک نمونه از موجودیت B مرتبط است و برعکس.
- مثال: رابطه “مدیر” بین “کارمند” و “پروژه” (اگر هر پروژه توسط دقیقاً یک کارمند مدیریت شود و هر کارمند دقیقاً یک پروژه را مدیریت کند).
- یک به چند (One-to-Many | 1:N): هر نمونه از موجودیت A میتواند با چند نمونه از موجودیت B مرتبط شود، اما هر نمونه از موجودیت B تنها با یک نمونه از موجودیت A مرتبط است.
- مثال: رابطه “دارای” بین “بخش” و “کارمند” (یک بخش میتواند چندین کارمند داشته باشد، اما هر کارمند به یک بخش تعلق دارد).
- چند به چند (Many-to-Many | N:M): هر نمونه از موجودیت A میتواند با چند نمونه از موجودیت B مرتبط شود و برعکس.
- مثال: رابطه “نوشتن” بین “دانشجو” و “کتاب” (یک دانشجو میتواند چندین کتاب بنویسد و یک کتاب میتواند توسط چندین دانشجو نوشته شود).
- انواع ویژگیها (Attribute Types):
- صفت کلید اصلی (Primary Key Attribute): ویژگی یا مجموعهای از ویژگیها که به طور منحصر به فرد هر تاپل را در یک جدول شناسایی میکند. مقدار کلید اصلی نمیتواند NULL باشد و باید یکتا باشد.
- مثال:
شماره_دانشجوییدر جدول “دانشجو”. - صفت کلید خارجی (Foreign Key Attribute): ویژگی در یک جدول که به کلید اصلی جدول دیگر اشاره میکند. برای برقراری ارتباط بین جداول استفاده میشود.
- مثال:
کد_بخشدر جدول “کارمند” که بهکد_بخش(کلید اصلی) در جدول “بخش” اشاره میکند. - صفت استنتاجی (Derived Attribute): ویژگی که مقدار آن را میتوان از مقادیر ویژگیهای دیگر محاسبه یا استنتاج کرد. معمولاً در مدلسازی ER نمایش داده نمیشود اما در پیادهسازی پایگاه داده ممکن است با استفاده از توابع یا view ها پیادهسازی شود.
- مثال: “سن” که از “تاریخ تولد” قابل محاسبه است.
- صفت چندگانه (Multivalued Attribute): ویژگی که میتواند بیش از یک مقدار برای یک نمونه از موجودیت داشته باشد. در مدل رابطهای، این نوع صفات معمولاً به یک جدول جداگانه منتقل میشوند.
- مثال: “شماره تلفن” برای یک “دانشجو” (ممکن است دانشجو چندین شماره تلفن داشته باشد: منزل، همراه، محل کار). این مورد به یک جدول “شماره_تلفن_دانشجو” با ستونهای
شماره_دانشجوییوشماره_تلفنتبدیل میشود. - صفت ساده (Simple Attribute): ویژگی که قابل تجزیه به اجزای کوچکتر نیست.
- مثال: “نام خانوادگی”.
- صفت مرکب (Composite Attribute): ویژگی که میتوان آن را به اجزای کوچکتر تقسیم کرد.
- مثال: “آدرس” که میتواند شامل “خیابان”، “شهر”، “کد پستی” باشد.
- جامعیت (Participation) و قواعد جامعیت (Integrity Constraints):
- تعریف جامعیت: جامعیت به معنای صحت، سازگاری و دقت دادهها در پایگاه داده است. قواعد جامعیت، محدودیتهایی هستند که برای تضمین این دقت و جلوگیری از ورود دادههای نامعتبر تعریف میشوند.
- انواع قواعد جامعیت در مدل داده رابطهای:
- جامعیت موجودیتی (Entity Integrity): تضمین میکند که کلید اصلی یک جدول نمیتواند مقدار NULL داشته باشد. این قاعده اطمینان میدهد که هر رکورد قابل شناسایی است.
- جامعیت ارجاعی (Referential Integrity): تضمین میکند که مقادیر کلید خارجی باید یا با مقادیر موجود در کلید اصلی جدول مرجع مطابقت داشته باشند، یا NULL باشند (اگر مجاز باشد). این قاعده ارتباط بین جداول را سازگار نگه میدارد.
- جامعیت دامنه (Domain Integrity): تضمین میکند که مقادیر ذخیره شده در هر ستون (ویژگی) باید از نوع داده و محدوده مجاز تعریف شده برای آن ستون باشند (مثلاً سن نمیتواند منفی باشد، یا یک فیلد تاریخ باید فرمت تاریخ معتبر داشته باشد).
خلاصه نکات کلیدی برای تدریس:
- تمرکز بر مدلسازی: هدف اصلی مدل داده رابطهای، سازماندهی دادهها به صورت منطقی و قابل فهم است. ER Diagram (نمودار رابطه موجودیت) ابزار اصلی این کار است.
- جداول، سطرها و ستونها: پایگاه داده رابطهای مانند مجموعهای از صفحات گسترده (جداول) است که هر صفحه اطلاعات یک نوع موجودیت را نگه میدارد. سطرها (تاپلها) نمونههای فردی و ستونها (ویژگیها) مشخصات آن نمونهها هستند.
- کلیدها، کلیدها، کلیدها: کلید اصلی برای شناسایی یکتا و کلید خارجی برای ایجاد ارتباط بین جداول حیاتی هستند. بدون آنها، پایگاه داده شما کارایی لازم را نخواهد داشت.
- کاردینالیتی و روابط: درک اینکه چگونه موجودیتها به هم مرتبط میشوند (1:1, 1:N, N:M) برای طراحی درست جداول و جلوگیری از افزونگی داده ضروری است. روابط N:M معمولاً با ایجاد یک جدول واسط حل میشوند.
- اعتبار دادهها (Integrity): قواعد جامعیت (موجودیت، ارجاعی، دامنه) مانند نگهبانان داده عمل میکنند و از ورود اطلاعات اشتباه جلوگیری کرده و سازگاری کلی سیستم را حفظ میکنند.
مثال کاربردی:
فرض کنید میخواهیم یک پایگاه داده ساده برای یک کتابخانه طراحی کنیم.
موجودیتها:
- کتاب (Book): اطلاعات مربوط به هر کتاب.
- نویسنده (Author): اطلاعات مربوط به هر نویسنده.
- عضو (Member): اطلاعات مربوط به اعضای کتابخانه.
ویژگیها:
- کتاب:
کد_کتاب(کلید اصلی)،عنوان،سال_انتشار،کد_نویسنده(کلید خارجی). - نویسنده:
کد_نویسنده(کلید اصلی)،نام_نویسنده،ملیت. - عضو:
کد_عضو(کلید اصلی)،نام_عضو،آدرس،شماره_تلفن.
روابط:
- نوشته_است (Written_By): بین
نویسندهوکتاب. - کاردینالیتی: یک نویسنده میتواند چندین کتاب بنویسد (1:N). در این حالت،
کد_نویسندهبه عنوان کلید خارجی در جدولکتابقرار میگیرد. اگر یک کتاب بتواند توسط چند نویسنده نوشته شود، این رابطه N:M خواهد بود و نیاز به یک جدول واسط (مثلاًکتاب_نویسنده) داریم. - امانت_گرفته (Borrowed_By): بین
عضووکتاب. - کاردینالیتی: یک عضو میتواند چندین کتاب امانت بگیرد و یک کتاب میتواند توسط چندین عضو (در زمانهای مختلف) امانت گرفته شود (N:M). بنابراین، نیاز به یک جدول واسط داریم:
- جدول امانت (Loan):
شماره_امانت(کلید اصلی)،کد_عضو(کلید خارجی)،کد_کتاب(کلید خارجی)،تاریخ_امانت،تاریخ_برگشت.
قواعد جامعیت:
کد_کتاب،کد_نویسنده،کد_عضونمیتوانند NULL باشند.کد_نویسندهدر جدولکتابباید معادل یکی ازکد_نویسندههای موجود در جدولنویسندهباشد.کد_عضووکد_کتابدر جدولامانتباید معادل مقادیر موجود در جداولعضووکتابباشند.سال_انتشارباید یک عدد صحیح و معتبر باشد.
تمرین پایان فصل:
- جدولهای لازم برای مدلسازی اطلاعات مربوط به دانشجویان، استادان و کلاسهای درسی را طراحی کنید. فرض کنید:
- هر دانشجو میتواند در چندین کلاس ثبتنام کند و هر کلاس میتواند چندین دانشجو داشته باشد (رابطه N:M).
- هر استاد میتواند چندین کلاس را تدریس کند، اما هر کلاس توسط دقیقاً یک استاد تدریس میشود (رابطه 1:N).
- یک دانشجو میتواند توسط چندین استاد راهنمایی شود (رابطه N:M).
- مشخص کنید کلیدهای اصلی و خارجی کدامند و نوع هر رابطه را مشخص کنید.
مفاهیم “موجودیت ضعیف” و “صفت چندگانه” را با مثالهایی در حوزه فروشگاه آنلاین توضیح دهید. چگونه این موارد را در مدل رابطهای پیادهسازی میکنید؟
قاعده “جامعیت ارجاعی” (Referential Integrity) را تعریف کرده و توضیح دهید چرا برای حفظ سازگاری دادهها در پایگاه داده ضروری است. مثالی از نقض این قاعده و نحوه جلوگیری از آن بیاورید.