MySQL وتصميم قواعد البيانات

مخططات العلاقات بين الكيانات (ERD)

13 دقيقة الدرس 2 من 40

مخططات العلاقات بين الكيانات (ERD)

مخططات العلاقات بين الكيانات هي المخطط المرئي لقاعدة بياناتك. في هذا الدرس، سنتعلم كيفية إنشاء ERDs التي تنقل بنية قاعدة بياناتك بوضوح إلى أصحاب المصلحة التقنيين وغير التقنيين.

فهم الكيانات والسمات

الكيان هو شيء أو كائن في العالم الحقيقي يمكن تمييزه عن الكائنات الأخرى. كل كيان له سمات تصف خصائصه.

كيان: CUSTOMER (عميل) السمات: - customer_id (المفتاح الأساسي) - first_name (الاسم الأول) - last_name (اسم العائلة) - email (البريد الإلكتروني) - phone (الهاتف) - created_at (تاريخ الإنشاء) كيان: ORDER (طلب) السمات: - order_id (المفتاح الأساسي) - customer_id (المفتاح الخارجي) - order_date (تاريخ الطلب) - total_amount (المبلغ الإجمالي) - status (الحالة)
مفهوم رئيسي: الكيان عادة يصبح جدولاً في قاعدة بياناتك، وكل سمة تصبح عموداً في ذلك الجدول.

العلاقات والأعداد

العلاقات تصف كيفية ارتباط الكيانات ببعضها البعض. الأعداد تحدد العلاقة العددية بين حالات الكيان.

أنواع العلاقات: 1. واحد-إلى-واحد (1:1) مثال: شخص - جواز سفر شخص واحد لديه جواز سفر واحد، جواز سفر واحد ينتمي لشخص واحد 2. واحد-إلى-متعدد (1:N) مثال: عميل - طلبات عميل واحد يمكنه تقديم طلبات عديدة، طلب واحد ينتمي لعميل واحد 3. متعدد-إلى-متعدد (M:N) مثال: طلاب - دورات طالب واحد يمكنه التسجيل في دورات عديدة، دورة واحدة لها طلاب عديدون

علاقات واحد-إلى-واحد (1:1)

علاقات واحد-إلى-واحد أقل شيوعاً ولكنها مهمة عندما تحتاج لفصل البيانات للأمان أو الأداء أو الأسباب المنطقية.

مثال: User و UserProfile CREATE TABLE users ( id INT PRIMARY KEY, email VARCHAR(100) UNIQUE, password_hash VARCHAR(255), created_at DATETIME ); CREATE TABLE user_profiles ( id INT PRIMARY KEY, user_id INT UNIQUE, bio TEXT, avatar_url VARCHAR(255), birth_date DATE, FOREIGN KEY (user_id) REFERENCES users(id) ); لماذا الفصل؟ - إبقاء جدول المصادقة نحيفاً وسريعاً - بيانات الملف الشخصي يتم الوصول إليها بشكل أقل تكراراً - أسهل لإدارة الأذونات

علاقات واحد-إلى-متعدد (1:N)

هذا هو نوع العلاقة الأكثر شيوعاً. الجانب "المتعدد" يحتوي على مفتاح خارجي يشير إلى الجانب "الواحد".

مثال: مؤلف وكتب CREATE TABLE authors ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), email VARCHAR(100) ); CREATE TABLE books ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(200), author_id INT, published_year INT, isbn VARCHAR(13), FOREIGN KEY (author_id) REFERENCES authors(id) ); العلاقة: - مؤلف واحد يكتب كتباً عديدة - كل كتاب له مؤلف واحد (مثال مبسط) - المفتاح الخارجي (author_id) يذهب على الجانب "المتعدد" (books)
حيلة للذاكرة: المفتاح الخارجي يذهب دائماً على الجانب "المتعدد" من علاقة واحد-إلى-متعدد.

علاقات متعدد-إلى-متعدد (M:N)

علاقات متعدد-إلى-متعدد تتطلب جدول تقاطع (يُسمى أيضاً جدول الجسر أو الجدول الترابطي) لربط الكيانين.

مثال: طلاب ودورات CREATE TABLE students ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), email VARCHAR(100) ); CREATE TABLE courses ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), code VARCHAR(10) ); CREATE TABLE enrollments ( id INT PRIMARY KEY AUTO_INCREMENT, student_id INT, course_id INT, enrollment_date DATE, grade VARCHAR(2), FOREIGN KEY (student_id) REFERENCES students(id), FOREIGN KEY (course_id) REFERENCES courses(id), UNIQUE KEY unique_enrollment (student_id, course_id) ); العلاقة: - طالب واحد يسجل في دورات عديدة - دورة واحدة لها طلاب عديدون - جدول التقاطع يخزن العلاقة بالإضافة إلى بيانات إضافية
مهم: جدول التقاطع غالباً يتضمن سمات إضافية مثل enrollment_date أو grade أو status التي تصف العلاقة نفسها.

المفاتيح الأساسية والخارجية

المفاتيح أساسية في تصميم قاعدة البيانات العلائقية والعلاقات.

المفتاح الأساسي (PK): - يحدد بشكل فريد كل صف في الجدول - لا يمكن أن يكون NULL - يجب أن يكون فريداً - عادة عدد صحيح يزيد تلقائياً - مثال: customer_id، order_id، product_id المفتاح الخارجي (FK): - ينشئ رابطاً بين جدولين - يشير إلى مفتاح أساسي في جدول آخر - يفرض سلامة الإحالة - يمكن أن يكون NULL (علاقة اختيارية) - مثال: customer_id في جدول الطلبات

رموز ERD - قدم الغراب

قدم الغراب هو أشهر رمز ERD. إليك كيفية قراءته:

رموز قدم الغراب: │ = واحد (واحد بالضبط) ○─ = صفر أو واحد (اختياري) ├─ = واحد أو متعدد ○< = صفر أو متعدد أمثلة القراءة: CUSTOMER ├────○< ORDER "عميل واحد يضع صفر أو طلبات عديدة" EMPLOYEE │─────│ COMPANY_CAR "موظف واحد لديه سيارة شركة واحدة بالضبط" BOOK ○<────├─ AUTHOR "صفر أو كتب عديدة مكتوبة بواسطة واحد أو مؤلفين عديدين"
نصيحة القراءة: اقرأ دائماً علاقات ERD من اليسار إلى اليمين: "واحد [الكيان الأيسر] له [العدد] [الكيان الأيمن]".

إنشاء ERDs لسيناريوهات العالم الحقيقي

لنصمم ERD كاملاً لنظام تجارة إلكترونية:

الكيانات والعلاقات: CUSTOMER (عميل) - customer_id (PK) - name, email, phone ORDER (طلب) - order_id (PK) - customer_id (FK) - order_date, status, total ORDER_ITEM (عنصر طلب - جدول تقاطع) - id (PK) - order_id (FK) - product_id (FK) - quantity, price PRODUCT (منتج) - product_id (PK) - category_id (FK) - name, description, price, stock CATEGORY (فئة) - category_id (PK) - name, description العلاقات: CUSTOMER ├────○< ORDER (عميل واحد، طلبات عديدة) ORDER ├────├─ ORDER_ITEM (طلب واحد، عناصر عديدة) PRODUCT ○<────├─ ORDER_ITEM (منتجات عديدة، طلبات عديدة - M:N) CATEGORY ├────○< PRODUCT (فئة واحدة، منتجات عديدة)

مفاهيم ERD المتقدمة

المفاتيح المركبة: مفتاح أساسي مكون من أعمدة متعددة مثال: (student_id, course_id) في enrollments الكيانات الضعيفة: كيان يعتمد على كيان آخر للوجود مثال: ORDER_ITEM يعتمد على ORDER العلاقات المعرّفة: الكيان الفرعي لا يمكن أن يوجد بدون الأصل مثال: التعليق لا يمكن أن يوجد بدون المقال العلاقات غير المعرّفة: الكيان الفرعي يمكن أن يوجد بشكل مستقل مثال: الطلب يمكن أن يوجد بدون تعيين ساعٍ فوراً

أفضل ممارسات ERD

  • استخدم أسماء كيانات واضحة: أسماء مفردة (User، Order، Product)
  • قم بتسمية العلاقات: صف الإجراء (places، contains، belongs_to)
  • أظهر الأعداد: اذكر دائماً واحد-إلى-واحد، واحد-إلى-متعدد، إلخ
  • قم بتضمين المفاتيح الأساسية: احددها بوضوح (PK)
  • أظهر المفاتيح الخارجية: اذكرها برمز (FK)
  • حافظ على البساطة: ابدأ بالكيانات الرئيسية، أضف التفاصيل لاحقاً
  • استخدم رموزاً متسقة: التزم بنمط رمز واحد (قدم الغراب موصى به)
خطأ شائع: لا تنشئ علاقات متعدد-إلى-متعدد بدون جدول تقاطع. لا يمكن تنفيذها مباشرة في قواعد البيانات العلائقية.

أدوات ERD

أدوات شائعة لإنشاء ERDs احترافية:

أدوات مجانية: - draw.io (diagrams.net) - على الويب، مجاني - MySQL Workbench - أداة MySQL الرسمية - DBeaver - أداة قاعدة بيانات مجانية مع ERD - Lucidchart - متاحة نسخة مجانية أدوات مدفوعة: - dbdiagram.io - أداة بسيطة عبر الإنترنت - Vertabelo - تصميم تعاوني - ERDPlus - مناسبة للأكاديميين - Enterprise Architect - مجموعة UML كاملة

من ERD إلى SQL

تحويل ERD إلى جداول SQL:

تصميم ERD: AUTHOR ├────○< BOOK (مؤلف واحد يكتب كتباً عديدة) تنفيذ SQL: CREATE TABLE authors ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE ); CREATE TABLE books ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(200) NOT NULL, author_id INT NOT NULL, published_year INT, FOREIGN KEY (author_id) REFERENCES authors(id) ON DELETE RESTRICT ON UPDATE CASCADE ); النقاط الرئيسية: - كل كيان يصبح جدولاً - السمات تصبح أعمدة - المفاتيح الأساسية تُنشأ أولاً - المفاتيح الخارجية تشير إلى المفاتيح الأساسية - القيود تفرض العلاقات

تمرين تطبيقي:

صمم ERD لنظام إدارة مستشفى بهذه المتطلبات:

  • الأطباء يعالجون مرضى متعددين
  • المرضى يمكن أن يُعالجوا بواسطة أطباء متعددين
  • كل موعد يربط طبيب ومريض مع تاريخ/وقت
  • المرضى لديهم تاريخ طبي
  • الأطباء ينتمون إلى أقسام

الحل المقترح:

الكيانات: - DOCTOR (id, name, specialization, department_id) - PATIENT (id, name, dob, phone, address) - APPOINTMENT (id, doctor_id, patient_id, date_time, status) - MEDICAL_HISTORY (id, patient_id, condition, diagnosis_date) - DEPARTMENT (id, name, location) العلاقات: - DEPARTMENT ├────○< DOCTOR (1:N) - DOCTOR ○<────├─ APPOINTMENT ├────>○ PATIENT (M:N) - PATIENT ├────○< MEDICAL_HISTORY (1:N)

الملخص

في هذا الدرس، تعلمت:

  • الكيانات تمثل أشياء أو كائنات بسمات تصفها
  • العلاقات تربط الكيانات بالأعداد (1:1، 1:N، M:N)
  • المفاتيح الأساسية تحدد الصفوف بشكل فريد؛ المفاتيح الخارجية تنشئ العلاقات
  • واحد-إلى-متعدد الأكثر شيوعاً؛ متعدد-إلى-متعدد يحتاج لجدول تقاطع
  • رمز قدم الغراب هو المعيار الصناعي لـ ERDs
  • ERDs تتحول إلى جداول SQL مع القيود
التالي: في الدرس التالي، سنتعلم عن التطبيع والشكلين الطبيعيين الأول والثاني (1NF & 2NF)!

ES
Edrees Salih
منذ 8 ساعات

We are still cooking the magic in the way!