خانه/ مدل‌سازی داده (CDM، LDM، PDM)/ تولید LDM، PDM و اسکریپت SQL

تولید LDM و PDM و اسکریپت SQL با Power Designer

متوسط ۱۵ دقیقه مطالعه
یادداشت: مسیر منوها بر اساس نسخه‌ی ۱۶ Power Designer است و در نسخه‌های دیگر ممکن است کمی فرق کند. اگر Logical Data Model در نسخه‌ی تو وجود ندارد، مستقیم از CDM به PDM برو؛ مفهوم‌ها یکی است.

در درس قبل مدل مفهومی ساختیم. حالا می‌خواهیم از همان مدل، مدل فیزیکی (PDM) را برای SQL Server بسازیم و از آن اسکریپت SQL بگیریم.

نمای کلی مسیر

ازبهمنو
CDMLDM (در نسخه‌هایی که دارند)Tools → Generate Logical Data Model…
CDM یا LDMPDMTools → Generate Physical Data Model…
PDMاسکریپت SQL / ساخت دیتابیسDatabase → Generate Database… (Ctrl+G)
دیتابیس یا اسکریپتPDM (مهندسی معکوس)File → Reverse Engineer → Database…

گام ۱: تولید PDM از CDM

  1. مدل CDM را باز کن و از منوی Tools گزینه‌ی Generate Physical Data Model… را بزن.
  2. در تب General گزینه‌ی Generate new Physical Data Model را انتخاب کن.
  3. فهرست DBMS را باز کن و نزدیک‌ترین نسخه به SQL Server خودت را انتخاب کن (مثلاً Microsoft SQL Server 2019؛ اگر دقیقاً نبود نسخه‌ی قبلی).
  4. در Name و Code نام مدل را بنویس (مثل UniversityPDM).
  5. در تب Detail گزینه‌ی Check model را فعال بگذار تا قبل از تولید، مدل بررسی شود.
  6. در تب Selection می‌توانی انتخاب کنی کدام موجودیت‌ها تبدیل شوند (پیش‌فرض: همه).
  7. OK را بزن.

یک مدل جدید با پسوند .pdm باز می‌شود که جدول‌ها (Table)، ارجاع‌ها (Reference) و ستون‌ها را نشان می‌دهد.

گام ۲: قوانین تبدیل CDM به PDM

Power Designer قوانین نگاشت را خودکار اعمال می‌کند؛ باید بدانی چه اتفاقی می‌افتد تا نتیجه را بخوانی:

در CDMدر PDM
EntityTable
AttributeColumn
Primary IdentifierPrimary Key
رابطه‌ی یک‌به‌چندستون کلید خارجی در جدول سمت «چند» + Reference
رابطه‌ی چندبه‌چندجدول واسط با کلید ترکیبی و دو Reference
Mandatoryستون NOT NULL
Name و Codeنام و Code جدول/ستون (Code مبنای اسکریپت است)
StudentPK StudentIdintFullNamevarchar(100)BirthDatedate EnrollPK,FK StudentIdintPK,FK CourseIdintGradedecimal(4,2) CoursePK CourseIdintTitlevarchar(100)FK TeacherIdint
PDM بعد از تولید: جدول واسط Enroll ساخته شده است. نوع‌ها همان مقدارهای پیش‌فرض‌اند و باید بازبینی شوند.

گام ۳: بازبینی و اصلاح PDM

نتیجه‌ی خودکار را بدون بازبینی استفاده نکن. روی هر جدول دوبار کلیک کن و این موارد را بررسی کن:

  1. تب Columns: Data Type هر ستون را درست کن. برای متن فارسی nvarchar(100) انتخاب کن، نه varchar.
  2. ستون‌های P (Primary)، F (Foreign) و M (Mandatory) را بررسی کن.
  3. برای کلیدهای اصلی عددی که باید خودکار افزایش پیدا کنند، در جزئیات ستون (Column Properties) گزینه‌ی Identity را فعال کن.
  4. تب Indexes: ایندکس‌های لازم (مثلاً روی ستون‌های کلید خارجی پرمصرف) را اضافه کن.
  5. روی هر Reference (خط بین جدول‌ها) دوبار کلیک کن و در تب Integrity رفتار حذف و به‌روزرسانی را مشخص کن (None، Restrict، Cascade، Set null).
اگر در CDM نوع داده را از ابتدا دقیق تعیین کرده باشی، PDM تمیزتر تولید می‌شود و کار کمتری برای اصلاح داری. در هر حال نوع‌ها را با درس انتخاب نوع داده مطابقت بده.

گام ۴: تولید اسکریپت SQL

  1. با PDM باز، منوی Database → Generate Database… (یا Ctrl+G) را بزن.
  2. در تب General: Directory (محل ذخیره) و File name (مثلاً create_university.sql) را بنویس و گزینه‌ی One file only را فعال کن.
  3. گزینه‌ی Script generation را انتخاب کن (نه اتصال مستقیم به دیتابیس).
  4. در تب Options مشخص کن Table، Index، Reference و ... تولید شوند و آیا DROP قبل از CREATE بیاید.
  5. تب Preview را باز کن و اسکریپت را ببین؛ بعد OK را بزن.

فایل .sql تولید می‌شود. آن را در SSMS باز کن (نصب SSMS)، یک پایگاه‌داده‌ی خالی انتخاب کن و اجرا کن. اسکریپتی شبیه این را خواهی دید:

sql
CREATE TABLE Student (
   StudentId   int            not null,
   FullName    nvarchar(100)  not null,
   BirthDate   date           null,
   constraint PK_STUDENT primary key (StudentId)
);

CREATE TABLE Enroll (
   StudentId   int            not null,
   CourseId    int            not null,
   Grade       decimal(4,2)   null,
   constraint PK_ENROLL primary key (StudentId, CourseId)
);

alter table Enroll
   add constraint FK_ENROLL_ENROLL_STUDENT foreign key (StudentId)
      references Student (StudentId);

نام قیدها (PK_STUDENT، FK_ENROLL_...) را Power Designer از روی Code می‌سازد. دقت کن بر خلاف سازنده‌ی ما، Power Designer معمولاً کلید خارجی‌ها را با ALTER TABLE جداگانه در انتهای اسکریپت می‌آورد.

مهندسی معکوس: از دیتابیس به نمودار

برای تحلیل یک پایگاه‌داده‌ی موجود (مثلاً پروژه‌ی دانشجویی دیگر یا دیتابیس نمونه) می‌توانی نمودار PDM بسازی:

  1. File → Reverse Engineer → Database…
  2. یک مدل PDM جدید با DBMS مناسب بساز.
  3. منبع را انتخاب کن: Script files (فایل‌های .sql) یا Using a data source (اتصال ODBC به سرور).
  4. جدول‌ها را انتخاب و تایید کن؛ نمودار ساخته می‌شود.

با این روش می‌توانی از دیتابیس واقعی نمودار تحلیل بگیری و ایرادهای طراحی را پیدا کنی.

خطاهای رایج و راه‌حل

مشکلراه‌حل
اسکریپت روی SQL Server خطای Syntax می‌دهدنام جدول/ستون کلمه‌ی رزروشده است (Order، User، Group)؛ Code را عوض کن
نوع ستون‌ها <Undefined> استدر CDM یا PDM نوع داده تعیین کن و دوباره تولید کن
همه‌ی جدول‌ها با حروف بزرگ ساخته شده‌انددر Model Options → Naming Convention تنظیم Code را عوض کن
اجرای اسکریپت دوم بار خطا می‌دهدگزینه‌ی Drop table قبل از Create را در تب Options فعال کن
PDM بعد از تغییر CDM به‌روز نشدهGenerate PDM را با گزینه‌ی Update existing اجرا کن

تمرین بعدی: همین مراحل را روی مدل خودت اجرا کن و خروجی را با اسکریپت طراح تعاملی مقایسه کن. اگر Power Designer در دسترس نیست، درس بعد ابزارهای رایگان را معرفی می‌کند: ابزارهای رایگان رسم نمودار.

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

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

۱رابطه‌ی چندبه‌چند Student–Course در PDM به چه شکلی درمی‌آید؟نمایش پاسخ
پاسخ

به یک جدول واسط (مثلاً Enroll) با دو کلید خارجی به Student و Course تبدیل می‌شود که کلید اصلی آن ترکیب هر دو است. Power Designer نام این جدول را از نام (Code) ارتباط می‌گیرد.

۲اسکریپت تولیدشده روی SQL Server خطای «Incorrect syntax near the keyword 'Order'» می‌دهد. چرا و چه کنیم؟نمایش پاسخ
پاسخ

Order کلمه‌ی رزرو‌شده‌ی SQL است. Code موجودیت را به Orders (یا CustomerOrder) تغییر بده و دوباره PDM و اسکریپت را تولید کن؛ یا نام را در [براکت] قرار بده.

۳اگر بعد از تولید PDM در CDM یک صفت جدید اضافه کنیم، لازم است PDM را از اول بسازیم؟نمایش پاسخ
پاسخ

نه. در پنجره‌ی Generate Physical Data Model گزینه‌ی Update existing Physical Data Model را انتخاب کن تا فقط تغییرات به PDM موجود منتقل شود و ویرایش‌های دستی تو حفظ شود.