خانه/ وبلاگ/ آموزش رسم نمودار ER قدم‌به‌قدم (با مثال کتابخانه)
طراحی و مدل‌سازی

آموزش رسم نمودار ER قدم‌به‌قدم (با مثال کتابخانه)

طراحی و مدل‌سازی ۵ آبان ۱۴۰۵ 11 دقیقه مطالعه

رسم نمودار ER (Entity-Relationship) اولین مهارت عملی در طراحی پایگاه‌داده است و تقریباً در هر درس پایگاه‌داده و پروژه‌ی دانشگاهی از تو خواسته می‌شود. خوشبختانه برای کشیدن آن یک روش منظم وجود دارد: از صورت مسئله شروع می‌کنی، مفاهیم را استخراج می‌کنی و آن‌ها را به‌ترتیب روی نمودار می‌گذاری.

ایده‌ی کلیدی: در صورت مسئله، اسم‌ها معمولاً موجودیت یا صفت‌اند و فعل‌ها معمولاً ارتباط.

مثال: صورت مسئله‌ی کتابخانه

«یک کتابخانه اعضا را با شماره‌ی عضویت، نام و تلفن ثبت می‌کند. هر کتاب شناسه، عنوان، شابک و سال انتشار دارد. اعضا کتاب امانت می‌گیرند؛ برای هر امانت تاریخ امانت، موعد بازگرداندن و تاریخ بازگرداندن ثبت می‌شود. یک عضو می‌تواند چند کتاب امانت بگیرد و یک کتاب در طول زمان توسط اعضای مختلف امانت گرفته می‌شود.»

گام ۱: موجودیت‌ها را پیدا کن

اسم‌هایی که برایشان اطلاعات نگه می‌داریم موجودیت‌اند: عضو (Member) و کتاب (Book). «امانت» هم چیزی است که اطلاعات اختصاصی دارد (سه تاریخ)، پس خودش هم موجودیت می‌شود: Loan.

گام ۲: صفت‌ها را مشخص کن

موجودیتصفت‌ها
MemberMemberId، FullName، Phone، JoinDate
BookBookId، Title، ISBN، PublishYear
LoanLoanId، LoanDate، DueDate، ReturnDate

گام ۳: شناسه (کلید) هر موجودیت را انتخاب کن

شناسه صفتی است که هر نمونه را یکتا می‌کند. برای Member شماره‌ی عضویت، برای Book شناسه‌ی داخلی (یا ISBN) و برای Loan یک شماره‌ی امانت. ترجیحاً از یک شناسه‌ی مصنوعی و بی‌معنی (مثل BookId) استفاده کن، چون تغییر نمی‌کند.

گام ۴: ارتباط‌ها را پیدا کن

فعل‌های صورت مسئله: «عضو امانت می‌گیرد» و «کتاب امانت داده می‌شود». پس دو ارتباط داریم: Member ↔ Loan و Book ↔ Loan.

گام ۵: کاردینالیتی را تعیین کن

برای هر ارتباط از هر دو طرف بپرس: «حداقل و حداکثر چند؟»

  • یک عضو می‌تواند صفر یا چند امانت داشته باشد؛ هر امانت دقیقاً به یک عضو تعلق دارد ← Member به Loan: یک‌به‌چند.
  • یک کتاب می‌تواند صفر یا چند بار امانت داده شود؛ هر امانت دقیقاً یک کتاب دارد ← Book به Loan: یک‌به‌چند.
  • در نتیجه رابطه‌ی «چندبه‌چند» بین عضو و کتاب، از طریق موجودیت Loan شکسته شده است.

گام ۶: نمودار را بکش

borrows is lent MemberPK MemberIdFullNamePhoneJoinDate LoanPK LoanIdFK MemberIdFK BookIdLoanDateDueDateReturnDate BookPK BookIdTitleISBNPublishYear
نمودار ER کتابخانه با نمادگذاری Crow's Foot: خط ساده با دو خط عمودی یعنی «دقیقاً یک»، و پنجه با دایره یعنی «صفر یا چند».

گام ۷: نمودار را بازبینی کن

قبل از تحویل، این فهرست را بررسی کن:

  • هر موجودیت شناسه‌ی یکتا دارد؟
  • هیچ صفت تکراری یا چندمقداری (مثل «چند تلفن در یک ستون») وجود ندارد؟
  • رابطه‌ی چندبه‌چند مستقیم کشیده نشده است؟
  • برای هر ارتباط، کاردینالیتی هر دو سر نوشته شده است؟
  • نام‌ها (موجودیت‌ها مفرد و ارتباط‌ها فعل) یکدست‌اند؟

اشتباه‌های رایج در رسم نمودار 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 برای همین سطح به‌کار می‌رود.

مصطفی موسویسازنده و نویسنده‌ی SQLFarsi. اگر اشتباهی در مقاله دیدی یا پیشنهادی داری، از طریق mousavi.dev خبر بده.

می‌خوای SQL را از پایه و با تمرین یاد بگیری؟

دوره‌ی رایگان SQLFarsi را با Playground و پروژه‌های واقعی دنبال کن.

شروع یادگیری