آموزش رسم نمودار ER قدمبهقدم (با مثال کتابخانه)
رسم نمودار ER (Entity-Relationship) اولین مهارت عملی در طراحی پایگاهداده است و تقریباً در هر درس پایگاهداده و پروژهی دانشگاهی از تو خواسته میشود. خوشبختانه برای کشیدن آن یک روش منظم وجود دارد: از صورت مسئله شروع میکنی، مفاهیم را استخراج میکنی و آنها را بهترتیب روی نمودار میگذاری.
مثال: صورت مسئلهی کتابخانه
«یک کتابخانه اعضا را با شمارهی عضویت، نام و تلفن ثبت میکند. هر کتاب شناسه، عنوان، شابک و سال انتشار دارد. اعضا کتاب امانت میگیرند؛ برای هر امانت تاریخ امانت، موعد بازگرداندن و تاریخ بازگرداندن ثبت میشود. یک عضو میتواند چند کتاب امانت بگیرد و یک کتاب در طول زمان توسط اعضای مختلف امانت گرفته میشود.»
گام ۱: موجودیتها را پیدا کن
اسمهایی که برایشان اطلاعات نگه میداریم موجودیتاند: عضو (Member) و کتاب (Book). «امانت» هم چیزی است که اطلاعات اختصاصی دارد (سه تاریخ)، پس خودش هم موجودیت میشود: Loan.
گام ۲: صفتها را مشخص کن
| موجودیت | صفتها |
|---|---|
| Member | MemberId، FullName، Phone، JoinDate |
| Book | BookId، Title، ISBN، PublishYear |
| Loan | LoanId، LoanDate، DueDate، ReturnDate |
گام ۳: شناسه (کلید) هر موجودیت را انتخاب کن
شناسه صفتی است که هر نمونه را یکتا میکند. برای Member شمارهی عضویت، برای Book شناسهی داخلی (یا ISBN) و برای Loan یک شمارهی امانت. ترجیحاً از یک شناسهی مصنوعی و بیمعنی (مثل BookId) استفاده کن، چون تغییر نمیکند.
گام ۴: ارتباطها را پیدا کن
فعلهای صورت مسئله: «عضو امانت میگیرد» و «کتاب امانت داده میشود». پس دو ارتباط داریم: Member ↔ Loan و Book ↔ Loan.
گام ۵: کاردینالیتی را تعیین کن
برای هر ارتباط از هر دو طرف بپرس: «حداقل و حداکثر چند؟»
- یک عضو میتواند صفر یا چند امانت داشته باشد؛ هر امانت دقیقاً به یک عضو تعلق دارد ← Member به Loan: یکبهچند.
- یک کتاب میتواند صفر یا چند بار امانت داده شود؛ هر امانت دقیقاً یک کتاب دارد ← Book به Loan: یکبهچند.
- در نتیجه رابطهی «چندبهچند» بین عضو و کتاب، از طریق موجودیت Loan شکسته شده است.
گام ۶: نمودار را بکش
گام ۷: نمودار را بازبینی کن
قبل از تحویل، این فهرست را بررسی کن:
- هر موجودیت شناسهی یکتا دارد؟
- هیچ صفت تکراری یا چندمقداری (مثل «چند تلفن در یک ستون») وجود ندارد؟
- رابطهی چندبهچند مستقیم کشیده نشده است؟
- برای هر ارتباط، کاردینالیتی هر دو سر نوشته شده است؟
- نامها (موجودیتها مفرد و ارتباطها فعل) یکدستاند؟
اشتباههای رایج در رسم نمودار ER
| اشتباه | راه درست |
|---|---|
| گذاشتن نام موجودیت بهصورت جمع (Members) | نام مفرد انتخاب کن: Member |
| نوشتن صفت محاسبهای مثل «سن» کنار «تاریخ تولد» | فقط تاریخ تولد را نگه دار؛ سن قابلمحاسبه است |
| کشیدن چندبهچند بدون موجودیت واسط | یک موجودیت/جدول واسط اضافه کن (مثل Loan) |
| قرار دادن کلید خارجی در نمودار مفهومی | در مدل مفهومی ارتباط کافی است؛ FK در مدل منطقی میآید |
| فراموش کردن کاردینالیتی حداقل (۰ یا ۱) | مشخص کن مشارکت اجباری است یا اختیاری |
بعد از نمودار چه؟
نمودار ER آماده است؛ قدم بعدی تبدیل آن به جدولهای واقعی است. اگر میخواهی ببینی سه سطح مدل مفهومی، منطقی و فیزیکی چطور به هم وصل میشوند، مقالهی تفاوت CDM، LDM و PDM و بعد از آن تبدیل نمودار ER به جدول را بخوان.
سوالات متداول دربارهی این موضوع
نمودار ER را با چه ابزاری بکشم؟
برای شروع حتی کاغذ و قلم کافی است. برای تحویل پروژه میتوانی از draw.io (diagrams.net)، dbdiagram.io، Lucidchart یا Power Designer استفاده کنی. مهمتر از ابزار، رعایت نمادگذاری یکسان در کل نمودار است.
موجودیت ضعیف (Weak Entity) چیست؟
موجودیتی که بدون وجود موجودیت دیگر معنا ندارد و شناسهی مستقل ندارد؛ مثلاً «اقلام فاکتور» که بدون «فاکتور» وجود ندارد. کلید آن معمولاً ترکیبی از کلید موجودیت مالک و یک شناسهی جزئی است.
تفاوت نمودار ER و مدل CDM چیست؟
هر دو مدل مفهومی هستند. نمودار ER نام کلی نمادگذاریهایی مثل Chen و Crow's Foot است و CDM اصطلاحی است که در ابزارهایی مثل Power Designer و روش Merise برای همین سطح بهکار میرود.
میخوای SQL را از پایه و با تمرین یاد بگیری؟
دورهی رایگان SQLFarsi را با Playground و پروژههای واقعی دنبال کن.
شروع یادگیری