خانه/ مدل‌سازی داده (CDM، LDM، PDM)/ ابزارهای رایگان رسم نمودار

ابزارهای رایگان رسم نمودار ER و دیتابیس: draw.io، dbdiagram.io، Mermaid و SSMS

مبتدی ۱۳ دقیقه مطالعه

برای رسم نمودار ER لازم نیست Power Designer (که پولی است) داشته باشی. چند ابزار رایگان و آنلاین هستند که برای پروژه‌ی دانشگاهی و کار روزمره کاملاً کافی‌اند. در این درس چهار ابزار را با یک مدل یکسان (کلینیک) مقایسه می‌کنیم.

مقایسه‌ی سریع

ابزارنوع کارمناسب برایخروجی
draw.io (diagrams.net)رسم گرافیکی آزادCDM و نمودارهای شکل‌دار، نمادگذاری ChenPNG، SVG، PDF، فایل .drawio
dbdiagram.ioنوشتن کد DBML و نمایش خودکارLDM و PDM، تولید SQLPNG، PDF، اسکریپت SQL
Mermaidنوشتن متن در Markdownمستندات و README در GitHubرندر مستقیم یا تصویر
SSMS Database Diagramنمایش جدول‌های موجودتحلیل دیتابیس واقعی SQL Serverنمودار داخل SSMS (و کپی تصویر)
ابزار طراح تعاملی ER همین سایت هم بدون نصب و ثبت‌نام کار می‌کند و از یک مدل، هم نمودار سه‌سطحی و هم اسکریپت SQL می‌دهد.

۱) draw.io (diagrams.net)

یک ویرایشگر نمودار رایگان که در مرورگر (app.diagrams.net) و به‌صورت برنامه‌ی دسکتاپ کار می‌کند. برای CDM و نمودارهای شکل‌دار بسیار مناسب است.

  1. ابزار را باز کن و ذخیره در «Device» (روی سیستم خودت) را انتخاب کن.
  2. از پنل چپ More Shapes را بزن و دسته‌ی Entity Relation را فعال کن.
  3. شکل Table را بکش، عنوان را ویرایش کن و ردیف‌ها را به‌عنوان ستون بنویس (برای کلید اصلی از PK در ابتدای ردیف استفاده کن).
  4. با کشیدن یک خط بین دو جدول ارتباط را رسم کن.

برای نمادگذاری Crow's Foot روی خط راست‌کلیک کن، Edit Style را بزن و نوع فلش را با مقدارهای زیر تنظیم کن:

text
startArrow=ERmandOne;endArrow=ERzeroToMany;endFill=0;startFill=0;
مقدار فلشمعنی
ERmandOneدقیقاً یکی
ERzeroToOneصفر یا یکی
ERoneToManyیک یا چندتا
ERzeroToManyصفر یا چندتا

برای نمادگذاری Chen از شکل‌های عمومی (مستطیل، بیضی، لوزی) در دسته‌ی General و Flowchart استفاده کن.

۲) dbdiagram.io و زبان DBML

در این ابزار به‌جای کشیدن، جدول‌ها را با یک زبان ساده‌ی متنی (DBML) می‌نویسی و نمودار فوراً کنار آن رسم می‌شود. همین متن را می‌توان به SQL تبدیل کرد.

text
Table Patient {
  PatientId int [pk, increment]
  FullName  varchar(100) [not null]
  BirthDate date
  Phone     varchar(20)
}

Table Doctor {
  DoctorId  int [pk, increment]
  FullName  varchar(100) [not null]
  Specialty varchar(50)  [not null]
}

Table Appointment {
  AppointmentId   int [pk, increment]
  PatientId       int [not null, ref: > Patient.PatientId]
  DoctorId        int [not null, ref: > Doctor.DoctorId]
  AppointmentDate datetime [not null]
  Status          varchar(20) [not null]

  indexes {
    (DoctorId, AppointmentDate) [unique]
  }
}
  • pk کلید اصلی، increment افزایش خودکار، not null اجباری.
  • ref: > Patient.PatientId یعنی «چند به یک»؛ < یک‌به‌چند و - یک‌به‌یک است.
  • بخش indexes برای ایندکس و قید یکتای ترکیبی.

از منوی Export می‌توان خروجی PNG/PDF یا اسکریپت SQL (برای PostgreSQL، MySQL و SQL Server) گرفت. محدودیت‌های طرح رایگان (مثل تعداد نمودار) ممکن است تغییر کند؛ برای پروژه‌های کوچک کافی است.

۳) Mermaid: نمودار به‌صورت متن

Mermaid نمودار را از یک متن ساده می‌سازد و در GitHub، GitLab و بسیاری از ویرایشگرهای Markdown مستقیم نمایش داده می‌شود. نوع erDiagram برای ER است:

text
erDiagram
  PATIENT ||--o{ APPOINTMENT : books
  DOCTOR  ||--o{ APPOINTMENT : sees

  PATIENT {
    int PatientId PK
    string FullName
    date BirthDate
  }
  APPOINTMENT {
    int AppointmentId PK
    int PatientId FK
    int DoctorId FK
    datetime AppointmentDate
  }
  DOCTOR {
    int DoctorId PK
    string FullName
    string Specialty
  }

نمادهای رابطه: || دقیقاً یکی، o| صفر یا یکی، }o صفر یا چندتا، }| یک یا چندتا. این کد را داخل بلوک ```mermaid در README بگذار تا GitHub آن را رسم کند.

۴) Database Diagram در SSMS

اگر دیتابیس را روی SQL Server ساخته‌ای، SSMS خودش نمودار را از روی جدول‌های واقعی می‌سازد:

  1. در Object Explorer پایگاه‌داده‌ی مورد نظر را باز کن.
  2. روی پوشه‌ی Database Diagrams راست‌کلیک و New Database Diagram را بزن (بار اول ممکن است بپرسد ساخت اشیای پشتیبان تایید شود؛ Yes).
  3. جدول‌ها را انتخاب و Add کن؛ جدول‌ها با خطوط کلید خارجی نمایش داده می‌شوند.
  4. با کلیک راست روی جدول می‌توانی ستون‌ها، قیدها و روابط را ویرایش کنی؛ نمودار را ذخیره کن.

این ابزار برای تحلیل دیتابیس موجود عالی است، اما برای طراحی مفهومی از صفر (CDM) مناسب نیست چون فقط جدول‌های فیزیکی را نشان می‌دهد.

کدام ابزار را انتخاب کنم؟

می‌خواهم...پیشنهاد
نمودار مفهومی (CDM) یا Chen برای تحویل پروژهdraw.io یا Power Designer
نمودار جدول‌ها + اسکریپت SQL سریعdbdiagram.io یا طراح تعاملی سایت
نمودار داخل مستندات GitHubMermaid
تحلیل دیتابیس موجود SQL ServerDatabase Diagram در SSMS
هر سه سطح CDM/LDM/PDM از یک مدلPower Designer یا طراح تعاملی سایت
مهم‌تر از ابزار، نمادگذاری یکسان و نام‌گذاری درست است. قبل از تحویل نمودار، آن را با چک‌لیست تحلیل و بازبینی نمودار بررسی کن.

تمرین‌های خودآزمایی

اول خودت جواب بده، بعد پاسخ را باز کن و مقایسه کن.

۱کدام ابزار برای قرار دادن نمودار داخل فایل README یک پروژه در GitHub مناسب‌تر است و چرا؟نمایش پاسخ
پاسخ

Mermaid؛ چون نمودار به‌صورت متن در همان فایل Markdown نوشته می‌شود، در GitHub مستقیم رندر می‌شود و با تغییر کد، همراه Git نسخه‌بندی می‌شود.

۲با DBML رابطه‌ی «هر کتاب یک ناشر دارد» (Book.PublisherId به Publisher.PublisherId) را چطور تعریف می‌کنی؟نمایش پاسخ
پاسخ
Table Book {
  BookId int [pk]
  PublisherId int [ref: > Publisher.PublisherId]
}

علامت > یعنی «چند به یک» (many-to-one).

۳چرا برای تحلیل یک دیتابیس موجود Database Diagram در SSMS بهتر از رسم دستی است؟نمایش پاسخ
پاسخ

چون مستقیم از ساختار واقعی جدول‌ها و کلیدهای خارجی ساخته می‌شود؛ پس بدون خطای انسانی نشان می‌دهد دیتابیس واقعاً چه ارتباط‌هایی دارد، نه آنچه تصور می‌کنی.