رسم مدل مفهومی (CDM) در Power Designer قدمبهقدم
در این درس یک مدل مفهومی (CDM) برای «ثبتنام دانشگاه» میسازیم: دانشجو، درس و استاد با ارتباط چندبهچند «ثبتنام» بین دانشجو و درس و ارتباط یکبهچند «تدریس» بین استاد و درس.
گام ۱: ساخت مدل جدید
- Power Designer را باز کن و از منوی
File → New Model…وارد پنجرهی انتخاب نوع مدل شو. - در دستهی Model types گزینهی Conceptual Data Model را انتخاب کن.
- در قسمت Model name یک نام مثل
UniversityCDMبنویس و OK را بزن. - یک صفحهی خالی (Diagram) و یک Palette (نوار ابزار) در کنار صفحه نمایش داده میشود.
View (بخش Toolbars یا Palette، بسته به نسخه) آن را فعال کن.ابزارهای اصلی Palette
| ابزار | کاربرد در CDM |
|---|---|
| Entity | ساخت موجودیت (مستطیل) |
| Relationship | کشیدن ارتباط بین دو موجودیت (و تعیین کاردینالیتی) |
| Association / Association Link | ارتباط پیچیدهتر یا ارتباط با صفت (موجودیت مرتبط) |
| Inheritance | ارثبری (مثلاً Person با زیرگروههای Student و Teacher) |
| Select (فلش) | انتخاب و جابهجایی اشیا؛ با کلیک راست از ابزار فعلی خارج میشوی |
گام ۲: ساخت موجودیتها
- ابزار Entity را از Palette انتخاب کن و روی صفحه کلیک کن؛ یک مستطیل ظاهر میشود. با کلیک راست از ابزار خارج شو.
- روی موجودیت دوبار کلیک کن تا پنجرهی Entity Properties باز شود.
- در تب General:
NameراStudentوCodeرا همStudentبگذار. - به تب Attributes برو و برای هر صفت یک ردیف اضافه کن.
ستونهای مهم تب Attributes:
| ستون | معنی | مثال |
|---|---|---|
| Name / Code | نام و شناسهی صفت | StudentId، FullName |
| Data Type | نوع داده (در CDM اختیاری است ولی بهتر است مشخص شود) | Integer، Variable characters (۱۰۰) |
| P (Primary Identifier) | این صفت شناسهی موجودیت است | تیک برای StudentId |
| M (Mandatory) | مقدار اجباری است (NOT NULL) | تیک برای FullName |
| D (Displayed) | در نمودار نمایش داده شود | معمولاً فعال |
همین کار را برای Course (CourseId شناسه، Title، Credits) و Teacher (TeacherId شناسه، FullName) تکرار کن.
گام ۳: رسم ارتباط و تعیین کاردینالیتی
- ابزار Relationship را انتخاب کن، روی
Studentکلیک کن و بدون رها کردن ماوس تاCourseبکش و رها کن. - روی خط ارتباط دوبار کلیک کن تا Relationship Properties باز شود.
- در تب General نام ارتباط را
Enrollبگذار (میتوان برای هر جهت یک Role هم نوشت: «ثبتنام میکند» و «ثبتنام میشود»). - در تب Cardinalities نوع را Many-Many انتخاب کن.
- برای هر جهت گزینهی Mandatory را بسته به قاعدهی کسبوکار فعال یا غیرفعال کن.
اکنون روی خط ارتباط برچسبهایی مثل 0,n و 1,1 میبینی. این نمادگذاری حداقل–حداکثر است که در Power Designer پیشفرض است. ارتباط «تدریس» بین Teacher و Course را هم با نوع One-Many بکش.
| کاردینالیتی نمایشدادهشده | معنی | گزینهی تنظیم |
|---|---|---|
(0,1) | اختیاری، حداکثر یکی | One + غیر Mandatory |
(1,1) | دقیقاً یکی | One + Mandatory |
(0,n) | صفر یا چندتا | Many + غیر Mandatory |
(1,n) | حداقل یکی و چندتا | Many + Mandatory |
نتیجهی کار
مدل مفهومی ساختهشده باید این شکل را داشته باشد (نسخهی سادهشده با همان کاردینالیتیها؛ ظاهر دقیق در Power Designer کمی متفاوت است):
نمره (Grade) صفتِ «ثبتنام» است، نه دانشجو یا درس. در Power Designer دو راه داری: ارتباط چندبهچند را به یک Association تبدیل کنی که صفت دارد، یا یک موجودیت مستقل Enrollment با دو ارتباط یکبهچند بسازی. روش دوم برای شروع سادهتر است.
گام ۴: بررسی مدل با Check Model
قبل از تولید مدل بعدی، مدل را بررسی کن: منوی Tools → Check Model… (کلید F4) و OK. خطاها و هشدارها در پنجرهی Result فهرست میشوند.
| پیام رایج | علت | راهحل |
|---|---|---|
| Entity has no identifier | هیچ صفتی شناسه (P) نیست | در تب Attributes تیک P را بزن |
| Name or Code already used | دو شیء همنام | یکی را تغییر نام بده |
| Relationship has no name/role | نام ارتباط خالی است | یک نام معنادار بنویس |
| Attribute has no data type | نوع داده تعیین نشده (هشدار) | برای تولید PDM بهتر است نوع تعیین شود |
نکتههای کار حرفهای
- Code انگلیسی، Name خوانا: برای خروجی SQL از Code استفاده میشود.
- نام موجودیتها را مفرد بنویس (Student نه Students).
- برای هر ارتباط دو جمله بساز و بخوان: «هر دانشجو حداقل صفر و حداکثر چند درس ثبتنام میکند.»
- نمودار را مرتب کن (Symbol → Align) تا خطوط همدیگر را قطع نکنند؛ نمودار خوانا نمرهی بیشتری میگیرد.
- قبل از مرحلهی بعد، مدل را ذخیره کن (
Ctrl+S، فرمت.cdm).
مدل مفهومی آماده است. در درس بعد از روی همین CDM مدل LDM و PDM و اسکریپت SQL را تولید میکنیم.
تمرینهای خودآزمایی
اول خودت جواب بده، بعد پاسخ را باز کن و مقایسه کن.
۱در Entity Properties تفاوت Name و Code چیست و کدام را انگلیسی بنویسم؟نمایش پاسخ
Name نام نمایشی است (میتواند فارسی یا با فاصله باشد) و Code شناسهای است که هنگام تولید PDM و اسکریپت SQL بهعنوان نام جدول و ستون بهکار میرود. Code را انگلیسی و بدون فاصله بنویس (مثل Student و FullName).
۲رابطهی «هر استاد چند درس ارائه میدهد و هر درس دقیقاً یک استاد دارد» چه کاردینالیتیهایی در CDM میگیرد؟نمایش پاسخ
سمت استاد (0,n) (یا (1,n) اگر هر استاد باید حداقل یک درس داشته باشد) و سمت درس (1,1). در پنجرهی Cardinalities نوع رابطه را «One-Many» انتخاب و گزینهی Mandatory سمت درس را فعال میکنی.
۳چرا Check Model خطای «entity has no identifier» میدهد و راهحل چیست؟نمایش پاسخ
چون برای آن موجودیت هیچ صفتی بهعنوان شناسه (Primary Identifier) علامت نخورده است. در تب Attributes ستون P را برای یکی از صفتها (مثلاً StudentId) تیک بزن.