ابزارهای رایگان رسم نمودار ER و دیتابیس: draw.io، dbdiagram.io، Mermaid و SSMS
برای رسم نمودار ER لازم نیست Power Designer (که پولی است) داشته باشی. چند ابزار رایگان و آنلاین هستند که برای پروژهی دانشگاهی و کار روزمره کاملاً کافیاند. در این درس چهار ابزار را با یک مدل یکسان (کلینیک) مقایسه میکنیم.
مقایسهی سریع
| ابزار | نوع کار | مناسب برای | خروجی |
|---|---|---|---|
| draw.io (diagrams.net) | رسم گرافیکی آزاد | CDM و نمودارهای شکلدار، نمادگذاری Chen | PNG، SVG، PDF، فایل .drawio |
| dbdiagram.io | نوشتن کد DBML و نمایش خودکار | LDM و PDM، تولید SQL | PNG، PDF، اسکریپت SQL |
| Mermaid | نوشتن متن در Markdown | مستندات و README در GitHub | رندر مستقیم یا تصویر |
| SSMS Database Diagram | نمایش جدولهای موجود | تحلیل دیتابیس واقعی SQL Server | نمودار داخل SSMS (و کپی تصویر) |
۱) draw.io (diagrams.net)
یک ویرایشگر نمودار رایگان که در مرورگر (app.diagrams.net) و بهصورت برنامهی دسکتاپ کار میکند. برای CDM و نمودارهای شکلدار بسیار مناسب است.
- ابزار را باز کن و ذخیره در «Device» (روی سیستم خودت) را انتخاب کن.
- از پنل چپ More Shapes را بزن و دستهی Entity Relation را فعال کن.
- شکل Table را بکش، عنوان را ویرایش کن و ردیفها را بهعنوان ستون بنویس (برای کلید اصلی از PK در ابتدای ردیف استفاده کن).
- با کشیدن یک خط بین دو جدول ارتباط را رسم کن.
برای نمادگذاری Crow's Foot روی خط راستکلیک کن، Edit Style را بزن و نوع فلش را با مقدارهای زیر تنظیم کن:
startArrow=ERmandOne;endArrow=ERzeroToMany;endFill=0;startFill=0;
| مقدار فلش | معنی |
|---|---|
ERmandOne | دقیقاً یکی |
ERzeroToOne | صفر یا یکی |
ERoneToMany | یک یا چندتا |
ERzeroToMany | صفر یا چندتا |
برای نمادگذاری Chen از شکلهای عمومی (مستطیل، بیضی، لوزی) در دستهی General و Flowchart استفاده کن.
۲) dbdiagram.io و زبان DBML
در این ابزار بهجای کشیدن، جدولها را با یک زبان سادهی متنی (DBML) مینویسی و نمودار فوراً کنار آن رسم میشود. همین متن را میتوان به SQL تبدیل کرد.
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 است:
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 خودش نمودار را از روی جدولهای واقعی میسازد:
- در Object Explorer پایگاهدادهی مورد نظر را باز کن.
- روی پوشهی Database Diagrams راستکلیک و New Database Diagram را بزن (بار اول ممکن است بپرسد ساخت اشیای پشتیبان تایید شود؛ Yes).
- جدولها را انتخاب و Add کن؛ جدولها با خطوط کلید خارجی نمایش داده میشوند.
- با کلیک راست روی جدول میتوانی ستونها، قیدها و روابط را ویرایش کنی؛ نمودار را ذخیره کن.
این ابزار برای تحلیل دیتابیس موجود عالی است، اما برای طراحی مفهومی از صفر (CDM) مناسب نیست چون فقط جدولهای فیزیکی را نشان میدهد.
کدام ابزار را انتخاب کنم؟
| میخواهم... | پیشنهاد |
|---|---|
| نمودار مفهومی (CDM) یا Chen برای تحویل پروژه | draw.io یا Power Designer |
| نمودار جدولها + اسکریپت SQL سریع | dbdiagram.io یا طراح تعاملی سایت |
| نمودار داخل مستندات GitHub | Mermaid |
| تحلیل دیتابیس موجود SQL Server | Database 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 بهتر از رسم دستی است؟نمایش پاسخ
چون مستقیم از ساختار واقعی جدولها و کلیدهای خارجی ساخته میشود؛ پس بدون خطای انسانی نشان میدهد دیتابیس واقعاً چه ارتباطهایی دارد، نه آنچه تصور میکنی.