طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 121 · مبادئ قواعد البيانات
الدرس 3 · الوحدة 2: أنواع نماذج قواعد البيانات

النماذج الهرمية والشبكية والعلائقية

ثلاث طرق لترتيب البيانات، ولماذا انتصرت الجداول. ⏱ نحو 20 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تعرّف نموذج البيانات.
  • تشرح النموذج الهرمي والشبكي بمزاياهما وعيوبهما.
  • تبيّن كيف يربط النموذج العلائقي الجداول بقيم مشتركة.
  • تقارن بين النماذج الثلاثة.

١ما نموذج البيانات؟

نموذج البيانات Data Model: الطريقة التي نرتّب بها البيانات ونربط بعضها ببعض داخل قاعدة البيانات. وقد مرّت قواعد البيانات بثلاثة نماذج رئيسة قبل ظهور NoSQL:

النموذجالشكلظهر في
الهرمي Hierarchicalشجرة: أب وأبناءالستينيات (نظام IMS من IBM)
الشبكي Networkشبكة: الابن له أكثر من أبأواخر الستينيات (معيار CODASYL)
العلائقي Relationalجداول مترابطة بالقيم1970 (اقترحه إدجار كود Edgar Codd)، وما زال الأشهر

٢النموذج الهرمي: شجرة

تُرتَّب البيانات مثل شجرة العائلة أو مجلدات الحاسب: لكل عنصر أب واحد فقط، وقد يكون له أبناء كثيرون. وللوصول إلى عنصر تنزل من الجذر خطوة خطوة.

النموذج الهرمي (شجرة)الكليةمقرر 111مقرر 121أحمدمحمدأحمديوسفالنموذج الشبكي (شبكة)الكليةمقرر 111مقرر 121محمدأحمديوسف
في الشجرة لكل ابن أب واحد، فيتكرر أحمد. وفي الشبكة يرتبط أحمد بالمقررين معًا.
المزاياالعيوب
سريع جدًّا حين تسأل من الأعلى إلى الأسفل: «طلاب مقرر 111».الابن له أب واحد: أحمد المسجّل في مقررين يُخزَّن مرتين (تكرار).
بسيط ومناسب للبيانات الشجرية بطبيعتها، مثل الهيكل الإداري.السؤال المعاكس صعب: «ما مقررات أحمد؟» يتطلب المرور على الشجرة كلها.

٣النموذج الشبكي: شبكة

جاء لحل مشكلة التكرار: يسمح بأن يكون للعنصر أكثر من أب. فأحمد يُخزَّن مرة واحدة، ويرتبط بالمقررين بمؤشرات (روابط) كما في الرسم الأيسر بالأعلى.

المزاياالعيوب
يمثّل علاقة «متعدد لمتعدد»: طالب في مقررات كثيرة، ومقرر فيه طلاب كثيرون.معقد: المبرمج يكتب مسار التنقل بين المؤشرات بنفسه.
لا تكرار للبيانات.تغيير البنية (إضافة رابط جديد) يتطلب تعديل البرامج التي تستخدمها.

٤النموذج العلائقي: جداول مترابطة بالقيم

فكرة إدجار كود البسيطة: لا مؤشرات ولا أشجار. كل شيء جداول، والجداول ترتبط ببعضها بقيم مشتركة. فالطالب في جدول الطلاب يحمل رقم قسمه dept_id، والرقم نفسه موجود في جدول الأقسام:

الجدول departments · 4 صفوف
idnamebuilding
1البرمجياتمبنى أ
2الشبكاتمبنى ب
3الدعم الفنيمبنى ب
4الأمن السيبرانيNULL
الجدول students · 5 صفوف
idnamedept_id
1001أحمد السلمي1
1002محمد الجهني1
1003عمر الحربي2
1004يوسف المالكي1
1005فيصل العمري3

من الرقم dept_id = 1 نعرف أن أحمد ومحمد ويوسف في قسم البرمجيات. ويمكن أن نسأل القاعدة من أي اتجاه نريد:

query.sql
-- ما رقم قسم الشبكات؟SELECT id FROM departments WHERE name = 'الشبكات'; -- من الطلاب الذين يحملون هذا الرقم؟SELECT name FROM students WHERE dept_id = 2;
النتيجة · صف واحد
id
2
النتيجة · 3 صفوف
name
عمر الحربي
تركي الرشيدي
نايف الشمري

لاحظ: المحرر عرض نتيجتين لأننا كتبنا استعلامين. وفي الدرس 18 ستتعلم كيف تدمجهما في استعلام واحد بـ JOIN.

لماذا انتصر النموذج العلائقي؟
البساطةالجدول مفهوم لكل الناس، حتى غير المبرمجين.
المرونةتسأل أي سؤال بلغة SQL، دون أن تكتب طريقة الوصول بنفسك.
الاستقلاليةتضيف عمودًا أو جدولًا دون أن تتعطل البرامج القديمة.
الصحةقيود ومفاتيح تمنع البيانات المتناقضة.

٥مقارنة النماذج الثلاثة

الهرميالشبكيالعلائقي
البنيةشجرةشبكة مؤشراتجداول
الربطأب ← أبناءمؤشرات بين السجلاتقيم مشتركة (مفاتيح)
متعدد لمتعددلا يدعمها (تكرار)يدعمهايدعمها (بجدول وسيط)
سهولة الاستعلامسهل في اتجاه واحدصعبسهل بلغة SQL
مثال اليومسجل نظام Windows، ملفات XMLقواعد بيانات الرسوم (Graph) الحديثة تشبههMySQL و PostgreSQL و Oracle

توقّع وتحقّق

في النموذج الهرمي، كم أبًا للعنصر؟

شجرة.

النموذج الذي يربط البيانات بقيم مشتركة بين الجداول:

مثل dept_id.

مشكلة الطالب المسجل في مقررين في النموذج الهرمي:

تكرار.

من اقترح النموذج العلائقي؟

عام 1970.

الخلاصة

تحدٍّ برمجي: طلاب قسم الدعم الفني

سهل

في قاعدة «الكلية التقنية»، يريد رئيس قسم الدعم الفني أسماء طلاب قسمه. لا تعرف رقم القسم؛ ابحث عنه أولًا.

المطلوب:
  • استعلام أول: رقم القسم الذي اسمه «الدعم الفني» من جدول departments.
  • استعلام ثانٍ: أسماء الطلاب الذين يحملون هذا الرقم في students.
👀 اعرض النتيجة المطلوبة
النتيجة المطلوبة
name
فيصل العمري
سلمان البلوي
✓ التحقق الآلي من حلّك:
  • الكود يعمل بلا أخطاء
  • الاستعلام الأخير يعرض أسماء طلاب قسم الدعم الفني
  • تبحث عن رقم القسم في جدول departments

💡 تلميح 1
انسخ المثال في القسم 4 وغيّر اسم القسم.
💡 تلميح 2
الاستعلام الأول يعطيك 3. استخدمه في الثاني: WHERE dept_id = 3

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

solution.sql
SELECT id FROM departments WHERE name = 'الدعم الفني'; SELECT name FROM students WHERE dept_id = 3;
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس