النماذج الهرمية والشبكية والعلائقية
ثلاث طرق لترتيب البيانات، ولماذا انتصرت الجداول. ⏱ نحو 20 دقيقة.
- تعرّف نموذج البيانات.
- تشرح النموذج الهرمي والشبكي بمزاياهما وعيوبهما.
- تبيّن كيف يربط النموذج العلائقي الجداول بقيم مشتركة.
- تقارن بين النماذج الثلاثة.
١ما نموذج البيانات؟
نموذج البيانات Data Model: الطريقة التي نرتّب بها البيانات ونربط بعضها ببعض داخل قاعدة البيانات. وقد مرّت قواعد البيانات بثلاثة نماذج رئيسة قبل ظهور NoSQL:
| النموذج | الشكل | ظهر في |
|---|---|---|
| الهرمي Hierarchical | شجرة: أب وأبناء | الستينيات (نظام IMS من IBM) |
| الشبكي Network | شبكة: الابن له أكثر من أب | أواخر الستينيات (معيار CODASYL) |
| العلائقي Relational | جداول مترابطة بالقيم | 1970 (اقترحه إدجار كود Edgar Codd)، وما زال الأشهر |
٢النموذج الهرمي: شجرة
تُرتَّب البيانات مثل شجرة العائلة أو مجلدات الحاسب: لكل عنصر أب واحد فقط، وقد يكون له أبناء كثيرون. وللوصول إلى عنصر تنزل من الجذر خطوة خطوة.
| المزايا | العيوب |
|---|---|
| سريع جدًّا حين تسأل من الأعلى إلى الأسفل: «طلاب مقرر 111». | الابن له أب واحد: أحمد المسجّل في مقررين يُخزَّن مرتين (تكرار). |
| بسيط ومناسب للبيانات الشجرية بطبيعتها، مثل الهيكل الإداري. | السؤال المعاكس صعب: «ما مقررات أحمد؟» يتطلب المرور على الشجرة كلها. |
٣النموذج الشبكي: شبكة
جاء لحل مشكلة التكرار: يسمح بأن يكون للعنصر أكثر من أب. فأحمد يُخزَّن مرة واحدة، ويرتبط بالمقررين بمؤشرات (روابط) كما في الرسم الأيسر بالأعلى.
| المزايا | العيوب |
|---|---|
| يمثّل علاقة «متعدد لمتعدد»: طالب في مقررات كثيرة، ومقرر فيه طلاب كثيرون. | معقد: المبرمج يكتب مسار التنقل بين المؤشرات بنفسه. |
| لا تكرار للبيانات. | تغيير البنية (إضافة رابط جديد) يتطلب تعديل البرامج التي تستخدمها. |
٤النموذج العلائقي: جداول مترابطة بالقيم
فكرة إدجار كود البسيطة: لا مؤشرات ولا أشجار. كل شيء جداول، والجداول ترتبط ببعضها بقيم مشتركة. فالطالب في جدول الطلاب يحمل رقم قسمه dept_id، والرقم نفسه موجود في جدول الأقسام:
departments · 4 صفوف| id | name | building |
|---|---|---|
| 1 | البرمجيات | مبنى أ |
| 2 | الشبكات | مبنى ب |
| 3 | الدعم الفني | مبنى ب |
| 4 | الأمن السيبراني | NULL |
students · 5 صفوف| id | name | dept_id |
|---|---|---|
| 1001 | أحمد السلمي | 1 |
| 1002 | محمد الجهني | 1 |
| 1003 | عمر الحربي | 2 |
| 1004 | يوسف المالكي | 1 |
| 1005 | فيصل العمري | 3 |
من الرقم dept_id = 1 نعرف أن أحمد ومحمد ويوسف في قسم البرمجيات. ويمكن أن نسأل القاعدة من أي اتجاه نريد:
-- ما رقم قسم الشبكات؟SELECT id FROM departments WHERE name = 'الشبكات'; -- من الطلاب الذين يحملون هذا الرقم؟SELECT name FROM students WHERE dept_id = 2;
| id |
|---|
| 2 |
| name |
|---|
| عمر الحربي |
| تركي الرشيدي |
| نايف الشمري |
لاحظ: المحرر عرض نتيجتين لأننا كتبنا استعلامين. وفي الدرس 18 ستتعلم كيف تدمجهما في استعلام واحد بـ JOIN.
| لماذا انتصر النموذج العلائقي؟ | |
|---|---|
| البساطة | الجدول مفهوم لكل الناس، حتى غير المبرمجين. |
| المرونة | تسأل أي سؤال بلغة SQL، دون أن تكتب طريقة الوصول بنفسك. |
| الاستقلالية | تضيف عمودًا أو جدولًا دون أن تتعطل البرامج القديمة. |
| الصحة | قيود ومفاتيح تمنع البيانات المتناقضة. |
٥مقارنة النماذج الثلاثة
| الهرمي | الشبكي | العلائقي | |
|---|---|---|---|
| البنية | شجرة | شبكة مؤشرات | جداول |
| الربط | أب ← أبناء | مؤشرات بين السجلات | قيم مشتركة (مفاتيح) |
| متعدد لمتعدد | لا يدعمها (تكرار) | يدعمها | يدعمها (بجدول وسيط) |
| سهولة الاستعلام | سهل في اتجاه واحد | صعب | سهل بلغة SQL |
| مثال اليوم | سجل نظام Windows، ملفات XML | قواعد بيانات الرسوم (Graph) الحديثة تشبهه | MySQL و PostgreSQL و Oracle |
توقّع وتحقّق
في النموذج الهرمي، كم أبًا للعنصر؟
النموذج الذي يربط البيانات بقيم مشتركة بين الجداول:
dept_id.مشكلة الطالب المسجل في مقررين في النموذج الهرمي:
من اقترح النموذج العلائقي؟
الخلاصة
- الهرمي: شجرة، لكل عنصر أب واحد، فيتكرر ما له أكثر من أب.
- الشبكي: مؤشرات تسمح بأكثر من أب، لكنه معقد.
- العلائقي: جداول ترتبط بقيم مشتركة مثل
dept_id، ويُسأل بلغةSQLمن أي اتجاه. - العلائقي هو الأشهر اليوم لبساطته ومرونته واستقلاليته.
تحدٍّ برمجي: طلاب قسم الدعم الفني
سهلفي قاعدة «الكلية التقنية»، يريد رئيس قسم الدعم الفني أسماء طلاب قسمه. لا تعرف رقم القسم؛ ابحث عنه أولًا.
- استعلام أول: رقم القسم الذي اسمه «الدعم الفني» من جدول
departments. - استعلام ثانٍ: أسماء الطلاب الذين يحملون هذا الرقم في
students.
👀 اعرض النتيجة المطلوبة
| name |
|---|
| فيصل العمري |
| سلمان البلوي |
- الكود يعمل بلا أخطاء
- الاستعلام الأخير يعرض أسماء طلاب قسم الدعم الفني
- تبحث عن رقم القسم في جدول departments
💡 تلميح 1
💡 تلميح 2
WHERE dept_id = 3حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
SELECT id FROM departments WHERE name = 'الدعم الفني'; SELECT name FROM students WHERE dept_id = 3;