مدلهای ER: طراحی پایگاهداده روی کاغذ، پیش از SQL
پیش از نوشتن حتی یک خط CREATE TABLE، طراحان پایگاهداده معمولاً اول روی کاغذ (یا یک ابزار طراحی) فکرشان را به شکل یک مدل ER (مخفف Entity-Relationship، یعنی «موجودیت-رابطه») ترسیم میکنند. این مدل، همان چیزی است که در درس نرمالسازی به آن رسیدیم، اما اینبار بهصورت بصری.
سه مفهوم اصلی مدل ER
- موجودیت (Entity): هر چیزی که میخواهیم اطلاعاتش را نگه داریم — معمولاً بعداً یک جدول میشود. مثال: دانشآموز، درس.
- ویژگی (Attribute): اطلاعاتی که هر موجودیت دارد — بعداً یک ستون میشود. مثال: نام دانشآموز، عنوان درس.
- رابطه (Relationship): ارتباط بین دو موجودیت — بعداً یا یک کلید خارجی میشود، یا (اگر رابطه چندبهچند باشد) یک جدول واسط. مثال: «ثبتنامکردن».
نمودار ER همان اسکیمای آشنای ما
بیا مدل ER همان سه جدول students، enrollments و courses را که در فصل ۴ به بعد همیشه استفاده کردیم، ببینیم:
هر دانشآموز (۱) میتواند در چند ثبتنام (M) باشد؛ هر ثبتنام دقیقاً به یک درس اشاره میکند.
در این نمودار، Students و Courses موجودیتاند، full_name و title ویژگیاند، و «ثبتنام» رابطهای است که چون چندبهچند است (هر دانشآموز چند درس، هر درس چند دانشآموز)، خودش به یک موجودیت/جدول واسط (Enrollments) تبدیل شده — دقیقاً همان چیزی که در درس بعدی (ارتباطات) با جزئیات بیشتر میبینیم.
از نمودار ER تا CREATE TABLE
ترجمهی این نمودار به SQL تقریباً مستقیم است:
| مفهوم ER | معادل SQL |
|---|---|
| موجودیت (Entity) | CREATE TABLE |
| ویژگی (Attribute) | یک ستون در جدول |
| ویژگی شناسهای (Identifier) | PRIMARY KEY |
| رابطهی یکبهچند | ستون FOREIGN KEY در سمت «چند» |
| رابطهی چندبهچند | یک جدول واسط با دو FOREIGN KEY |
بیا این نمودار را عملاً به SQL تبدیل کنیم و ببینیم دقیقاً همان چیزی است که همیشه با آن کار کردهایم:
CREATE TABLE دقیقاً همان نموداری است که بالا کشیدیم. اینکه اول روی کاغذ (یا حتی روی یک تختهسفید با همکارانت) طراحی کنی، پیش از اینکه کد بنویسی، باعث میشود اشتباهات ساختاری را خیلی زودتر و ارزانتر پیدا کنی — تغییردادن یک جعبه در یک نمودار، خیلی سادهتر از تغییردادن یک جدول واقعی پر از داده است.جمعبندی این درس
- مدل ER از سه بخش تشکیل شده: موجودیت (Entity)، ویژگی (Attribute) و رابطه (Relationship).
- هر موجودیت معمولاً یک جدول، هر ویژگی یک ستون، و هر رابطه یک کلید خارجی یا جدول واسط میشود.
- طراحی روی کاغذ پیش از نوشتن SQL، هزینهی اصلاح اشتباهات ساختاری را بهشدت کاهش میدهد.
در درس بعدی، عمیقتر به خودِ روابط میرویم: یکبهیک، یکبهچند و چندبهچند دقیقاً چه فرقی دارند و هرکدام کِی بهکار میآیند.