CS350 · مراجعة شاملة

مراجعة الاختبار النهائي - قواعد البيانات

يغطي منهج الاختبار من الوحدة 7 إلى 13

7 أساسيات SQL - الجزء الأول: تعريف البيانات والقيود

استخدام لغة تعريف البيانات (DDL) لبناء مخططات الجداول، تحديد أنواع البيانات، وتطبيق قيود التكامل المرجعي والمجال.

7.1 نظرة عامة وتاريخ SQL

لغة SQL هي اللغة القياسية الشاملة للتعامل مع قواعد البيانات العلائقية، بدأت باسم SEQUEL في شركة IBM.

لغة SQL (Structured Query Language) هي لغة قياسية تعتمد على النموذج العلائقي.

تتضمن قدرات متعددة مثل: لغة تعريف البيانات (DDL) لإنشاء المخططات وتحديد أنواع البيانات والقيود، أوامر استرجاع البيانات (SELECT)، أوامر تعديل البيانات (INSERT, DELETE, UPDATE)، وأوامر لإنشاء العروض (Views) والمشغلات (Triggers).

تطورت اللغة من SEQUEL في مشروع System-R التابع لـ IBM في السبعينيات، ومرت بعدة معايير مثل SQL-89، SQL-92، و SQL-99.

7.2 إنشاء المخططات والجداول (CREATE SCHEMA & TABLE)

أمر CREATE TABLE يبني هيكل الجدول ويحدد أسماء الأعمدة، أنواع بياناتها، والقيود الأساسية مثل المفتاح الأساسي.

يُستخدم أمر CREATE SCHEMA لإنشاء قاعدة بيانات متميزة (مثال: CREATE SCHEMA COMPANY AUTHORIZATION 'Smith';).

بينما يُستخدم CREATE TABLE لتعريف علاقة أساسية جديدة من خلال تحديد اسمها، وسماتها، وأنواع بياناتها.

يمكن أيضاً تحديد قيود مثل NOT NULL، PRIMARY KEY، UNIQUE، و FOREIGN KEY داخل هذا الأمر.

إذا كانت هناك جداول متعددة، يمكن إضافة اسم المخطط كبادئة لاسم الجدول (مثال: COMPANY.EMPLOYEE).

7.3 مشكلة المرجع الدائري

تحدث عندما يشير جدول (أ) إلى جدول (ب) بمفتاح أجنبي، وفي نفس الوقت يشير جدول (ب) إلى جدول (أ).

في مخطط قاعدة بيانات COMPANY، نجد أن جدول EMPLOYEE يحتوي على مفتاح أجنبي Dno يشير إلى DEPARTMENT.Dnumber، بينما يحتوي جدول DEPARTMENT على مفتاح أجنبي Mgr_ssn يشير إلى EMPLOYEE.Ssn.

هذا يخلق مشكلة عند إنشاء الجداول باستخدام CREATE TABLE، حيث لا يمكن إنشاء أي من الجدولين أولاً لأن كلاهما يعتمد على الآخر.

الحل هو إنشاء أحد الجدولين أولاً بدون قيد المفتاح الأجنبي (FOREIGN KEY)، ثم إضافة القيد المفقود لاحقاً باستخدام أمر ALTER TABLE.

7.4 أنواع البيانات في SQL

توفر SQL أنواع بيانات متنوعة لتخزين الأرقام، النصوص، التواريخ، والكائنات الكبيرة (مثل الصور).

تشمل أنواع البيانات الأساسية في SQL:

  1. الرقمية: الأعداد الصحيحة (INTEGER, SMALLINT)، الأعداد الحقيقية (FLOAT, DOUBLE PRECISION)، والأرقام المنسقة DECIMAL(i, j) حيث i هي الدقة (إجمالي الخانات) و j هو المقياس (الخانات بعد الفاصلة).
  2. النصية: ثابتة الطول CHAR(n) ومتغيرة الطول VARCHAR(n).
  3. المنطقية: BIT(n).
  4. الكائنات الكبيرة (LOBs): BLOB(n) للبيانات الثنائية كالصور والفيديو، و CLOB(n) للنصوص الطويلة كالمقالات.
  5. التاريخ والوقت: DATE (yyyy-mm-dd)، TIME (hh:mm:ss)، TIMESTAMP (يجمع بين التاريخ والوقت)، و INTERVAL (لتمثيل فترة زمنية نسبية مثل 'سنتين و5 أشهر').

7.5 خيارات التكامل المرجعي وتسمية القيود

تحدد خيارات التكامل المرجعي ما يحدث للسجلات المرتبطة عند حذف أو تحديث السجل الأساسي (مثل CASCADE لحذف السجلات المرتبطة تلقائياً).

عند تعريف مفتاح أجنبي، يمكننا تحديد الإجراء الذي يجب اتخاذه عند حذف (ON DELETE) أو تحديث (ON UPDATE) السجل المرجعي. الخيارات المتاحة هي:

  1. RESTRICT: (الافتراضي) يمنع الحذف/التحديث إذا كانت هناك سجلات مرتبطة.
  2. CASCADE: ينقل التغيير (حذف أو تحديث) تلقائياً إلى السجلات المرتبطة.
  3. SET NULL: يغير قيمة المفتاح الأجنبي في السجلات المرتبطة إلى NULL.
  4. SET DEFAULT: يغير قيمة المفتاح الأجنبي إلى القيمة الافتراضية المحددة.

كما يمكن إعطاء اسم للقيد باستخدام الكلمة المفتاحية CONSTRAINT (مثال: CONSTRAINT EMPPK PRIMARY KEY (Ssn))، مما يسهل حذفه لاحقاً باستخدام DROP CONSTRAINT.

7.6 قيود المجال باستخدام CHECK و CREATE DOMAIN

تُستخدم CHECK لضمان أن القيم المدخلة في عمود معين تقع ضمن نطاق أو شرط محدد.

يمكن تحديد قيود إضافية على البيانات باستخدام جملة CHECK.

على سبيل المثال، لضمان أن رقم القسم بين 1 و 20: CHECK (Dnumber > 0 AND Dnumber < 21).

بدلاً من تكرار هذا القيد في عدة جداول، يمكن إنشاء مجال مخصص باستخدام CREATE DOMAIN. مثال: CREATE DOMAIN D_NUM AS INTEGER CHECK (Dnumber > 0 AND Dnumber < 21);.

بعد ذلك، يمكن استخدام D_NUM كنوع بيانات لسمة Dnumber في جدول DEPARTMENT، ولسمة Dnum في جدول PROJECT، مما يسهل إعادة الاستخدام ويحافظ على اتساق البيانات.

8 استعلامات الاسترجاع الأساسية وتحديث البيانات في SQL

كتابة استعلامات SQL لاسترجاع البيانات وتحديثها، مع فهم الفروق بين المجموعات والحقائب وعمليات الدمج.

8.1 جملة الاسترجاع الأساسية (SELECT)

اللبنة الأساسية في SQL لاستخراج البيانات، وتتكون من تحديد الأعمدة (SELECT)، الجداول (FROM)، والشروط (WHERE).

أبسط شكل لجملة SELECT في SQL يُسمى كتلة (SELECT-FROM-WHERE).

تحدد قائمة الأعمدة (attribute list) في SELECT البيانات المراد استرجاعها. تحدد قائمة الجداول (table list) في FROM الجداول المطلوبة. ويحدد الشرط (condition) في WHERE التعبيرات المنطقية التي يجب أن تستوفيها السجلات (tuples) ليتم استرجاعها.

يمكن أن يحتوي الشرط على شروط اختيار (selection conditions) لجدول واحد، أو شروط ربط (join conditions) لربط سجلات من جداول متعددة.

8.2 الحقائب (Multisets) مقابل المجموعات (Sets)

في SQL، الجداول هي حقائب (Bags) تسمح بتكرار السجلات، وليست مجموعات رياضية صارمة (Sets) تمنع التكرار.

يوجد تمييز مهم بين نموذج SQL العملي والنموذج العلائقي الرسمي.

يسمح SQL للجدول (العلاقة) باحتواء سجلين أو أكثر متطابقين في جميع قيم السمات. لذلك، علاقة SQL هي حقيبة (Bag أو Multiset) وليست مجموعة (Set).

الحقيبة تشبه المجموعة ولكن يمكن أن يظهر العنصر أكثر من مرة، والترتيب فيها غير مهم.

يمكن إجبار علاقات SQL لتكون مجموعات عن طريق تحديد PRIMARY KEY أو UNIQUE، أو باستخدام الكلمة المفتاحية DISTINCT في الاستعلام.

8.3 الأسماء المستعارة وتأهيل السمات

استخدام اسم الجدول أو اسم مستعار (Alias) قبل اسم العمود لمنع الغموض، خاصة عند استخدام نفس اسم العمود في جداول مختلفة أو عند ربط الجدول بنفسه.

في SQL، يجب أن تكون جميع أسماء السمات في جدول معين مختلفة، ولكن يمكن استخدام نفس الاسم في جداول مختلفة.

في هذه الحالة، يجب تأهيل (Qualify) اسم السمة باستخدام اسم الجدول (مثل EMPLOYEE.LNAME).

لتبسيط الاستعلامات، يمكن استخدام الأسماء المستعارة (Aliases أو Tuple Variables) باستخدام الكلمة المفتاحية AS.

تعتبر الأسماء المستعارة ضرورية جداً عندما يحتاج الاستعلام إلى الإشارة لنفس الجدول مرتين (Self-Join)، حيث تعمل الأسماء المستعارة كنسخ مختلفة من نفس الجدول.

8.4 غياب شرط WHERE (الضرب الديكارتي)

نسيان جملة WHERE عند الاستعلام من جداول متعددة يؤدي إلى دمج كل صف من الجدول الأول مع كل صف من الجدول الثاني (الضرب الديكارتي).

جملة WHERE اختيارية في SQL. إذا كانت مفقودة، فهذا يعني عدم وجود شروط (يكافئ WHERE TRUE)، ويتم تحديد جميع السجلات.

إذا تم تحديد أكثر من جدول في جملة FROM ولم يكن هناك شرط WHERE (أي لا توجد شروط ربط)، فسيتم دمج جميع المجموعات الممكنة من السجلات معاً. يُعرف هذا بالضرب الديكارتي (Cartesian Product).

من المهم جداً عدم إغفال شروط الربط لتجنب نتائج استعلام غير صحيحة وضخمة جداً.

8.5 عمليات المجموعات والحقائب

عمليات تدمج نتائج استعلامين: UNION (اتحاد)، INTERSECT (تقاطع)، EXCEPT (فرق). الإصدارات العادية تزيل التكرار، وإصدارات ALL تحتفظ به.

يدمج SQL عمليات المجموعات مباشرة: UNION، EXCEPT (أو MINUS)، و INTERSECT.

نتائج هذه العمليات هي مجموعات (Sets) من السجلات، حيث يتم إزالة التكرارات تلقائياً.

يجب أن تكون الجداول متوافقة نوعياً (Type Compatible أو Union Compatible)، أي لها نفس أنواع السمات وبنفس الترتيب.

إذا أراد المستخدم الاحتفاظ بالتكرارات (التعامل كحقائب)، يمكنه استخدام عمليات الحقائب: UNION ALL، EXCEPT ALL، و INTERSECT ALL.

8.6 مقارنة السلاسل النصية (LIKE)

استخدام المعامل LIKE للبحث عن نصوص جزئية باستخدام الرموز `%` (لأي عدد من الحروف) و `_` (لحرف واحد فقط).

يُستخدم معامل المقارنة LIKE لمقارنة السلاسل النصية الجزئية.

يتم استخدام حرفين محجوزين (Wildcards): الرمز `%` (أو `*` في بعض الأنظمة) يحل محل عدد عشوائي من الحروف (صفر أو أكثر)، والرمز `_` يحل محل حرف عشوائي واحد فقط.

يسمح هذا المعامل للمستخدمين بتجاوز حقيقة أن كل قيمة في SQL تعتبر ذرية (Atomic) وغير قابلة للتجزئة، مما يتيح البحث داخل النصوص.

8.7 ترتيب النتائج (ORDER BY)

تُستخدم جملة ORDER BY لفرز النتائج تصاعدياً (ASC) أو تنازلياً (DESC) بناءً على عمود واحد أو أكثر.

تُستخدم جملة ORDER BY لفرز السجلات في نتيجة الاستعلام بناءً على قيم سمة (أو سمات) معينة.

الترتيب الافتراضي هو الترتيب التصاعدي (ASC). يمكننا تحديد الكلمة المفتاحية DESC إذا أردنا ترتيباً تنازلياً.

بدون ORDER BY، تظهر الصفوف في نتيجة الاستعلام بترتيب عشوائي يحدده النظام.

يمكن الترتيب بناءً على أعمدة متعددة، حيث يتم الفرز بالعمود الأول، ثم الثاني في حال التساوي.

8.8 أوامر تحديث البيانات (INSERT, DELETE, UPDATE)

الأوامر الثلاثة لتعديل حالة قاعدة البيانات: INSERT لإضافة صفوف، DELETE لحذفها، و UPDATE لتعديل القيم الحالية.

هناك ثلاثة أوامر SQL لتعديل قاعدة البيانات:

  1. INSERT: لإضافة سجل أو أكثر. يمكن إدراج القيم مباشرة أو استخراجها من استعلام آخر.
  2. DELETE: لإزالة السجلات. يتضمن عادةً شرط WHERE؛ وبدونه يتم حذف جميع السجلات في الجدول.
  3. UPDATE: لتعديل قيم السجلات الحالية باستخدام جملة SET لتحديد القيم الجديدة، وجملة WHERE لتحديد السجلات المستهدفة.

يتم تطبيق قيود التكامل (Integrity Constraints) تلقائياً عند تنفيذ هذه الأوامر.

9 مقدمة في قواعد البيانات: استعلامات SQL المتقدمة والقيود

التعامل مع الاستعلامات المعقدة، القيم الفارغة، عمليات الربط، التجميع، وتطبيق قواعد العمل باستخدام التوكيدات والمشغلات.

9.1 القيم الفارغة (NULL) والمنطق ثلاثي القيم

تستخدم SQL المنطق ثلاثي القيم (صحيح، خاطئ، غير معروف) للتعامل مع البيانات المفقودة، تماماً كإجابة 'لا أعلم' في استبيان.

تسمح SQL بالاستعلامات التي تتحقق مما إذا كانت السمة NULL (مفقودة أو غير محددة أو غير قابلة للتطبيق).

تستخدم SQL المعاملات IS أو IS NOT لمقارنة سمة بـ NULL لأنها تعتبر كل قيمة NULL مميزة عن قيم NULL الأخرى، لذا فإن مقارنة المساواة (=) غير مناسبة.

يؤدي وجود NULL إلى تقييم الشرط إلى UNKNOWN، مما يؤدي إلى منطق ثلاثي القيم. عند دمج الشروط باستخدام AND و OR و NOT، يجب أخذ UNKNOWN في الاعتبار.

9.2 الاستعلامات المتداخلة (Nested Queries)

استعلام كامل يوضع داخل استعلام آخر (عادة في جملة WHERE)، كصندوق داخل صندوق.

يمكن تحديد استعلام SELECT كامل، يسمى الاستعلام المتداخل (nested query)، داخل جملة WHERE لاستعلام آخر (الاستعلام الخارجي). يمكن أن يكون هناك عدة مستويات من التداخل.

المعامل IN يقارن قيمة بمجموعة من القيم ويقيم إلى TRUE إذا كانت القيمة أحد عناصر المجموعة.

تنقسم الاستعلامات المتداخلة إلى نوعين: غير مترابطة (تُنفذ مرة واحدة بشكل مستقل) ومترابطة (Correlated) حيث يشير الاستعلام الداخلي إلى سمة من الاستعلام الخارجي، مما يعني أنه يُنفذ لكل صف في الاستعلام الخارجي.

9.3 دالة EXISTS

دالة منطقية تتحقق مما إذا كان الاستعلام الفرعي يرجع أي صفوف (ليست فارغة).

تُستخدم EXISTS للتحقق مما إذا كانت نتيجة الاستعلام فارغة (لا تحتوي على صفوف) أو لا (تحتوي على صف واحد أو أكثر). تُطبق على استعلام، ولكنها تُرجع نتيجة منطقية (TRUE أو FALSE).

يمكن استخدامها في جملة WHERE كشرط. تُقيم EXISTS (Q) إلى TRUE إذا كانت نتيجة Q تحتوي على صف واحد أو أكثر؛ وتُقيم إلى FALSE إذا لم تكن هناك صفوف.

تُستخدم NOT EXISTS للتحقق من عدم وجود صفوف.

9.4 الجداول المترابطة (Joined Tables)

دمج أعمدة من جدولين أو أكثر بناءً على عمود مشترك بينهما.

يمكن تحديد 'علاقة مترابطة' في جملة FROM. يسمح ذلك للمستخدم بتحديد أنواع مختلفة من الربط: INNER JOIN (الربط العادي حيث يجب أن تستوفي الصفوف المترابطة جميع شروط الربط)، OUTER JOIN (يسمح بتضمين السجلات التي ليس لها تطابق عن طريق حشوها بقيم NULL)، و NATURAL JOIN (ربط ضمني حيث يتم دمج الأعمدة التي لها نفس الاسم تلقائياً).

ينقسم الربط الخارجي إلى LEFT (يحتفظ بكل سجلات الجدول الأيسر)، RIGHT (يحتفظ بكل سجلات الجدول الأيمن)، و FULL (يحتفظ بكل السجلات من كلا الجدولين).

9.5 دوال التجميع والتجميع (Grouping)

دوال تلخص بيانات عدة صفوف في قيمة واحدة (مثل المجموع أو المتوسط)، وغالباً ما تُقسم البيانات إلى مجموعات باستخدام GROUP BY.

تشمل دوال التجميع COUNT و SUM و MAX و MIN و AVG. يمكنها تلخيص المعلومات من عدة صفوف في صف واحد.

في كثير من الحالات، نريد تطبيق هذه الدوال على مجموعات فرعية من الصفوف. تتكون كل مجموعة من الصفوف التي لها نفس القيمة لسمة التجميع (مثل الموظفين في نفس القسم).

تحتوي SQL على جملة GROUP BY لتحديد سمات التجميع. إذا أردنا تصفية هذه المجموعات بناءً على شرط معين، نستخدم جملة HAVING (بدلاً من WHERE التي تصفي الصفوف الفردية).

9.6 التوكيدات (Assertions)

قواعد عامة تُطبق على قاعدة البيانات بأكملها لضمان عدم انتهاك شروط معينة أبداً.

التوكيدات هي قيود عامة لا تتناسب مع قيود SQL الأساسية (مثل المفاتيح الأساسية، UNIQUE، NOT NULL). يتم إنشاؤها باستخدام CREATE ASSERTION.

تتكون من اسم القيد، متبوعاً بـ CHECK، ثم شرط يجب أن يكون دائماً TRUE.

لاستخدامها، نحدد استعلاماً ينتهك الشرط ونضعه داخل جملة NOT EXISTS، بحيث يجب أن تكون نتيجة الاستعلام فارغة دائماً.

9.7 المشغلات (SQL Triggers)

أكواد تُنفذ تلقائياً (تُستدعى) استجابةً لحدث معين في قاعدة البيانات (مثل الإضافة أو التعديل).

تُستخدم المشغلات لمراقبة قاعدة البيانات وبدء إجراء عند حدوث أحداث وشروط معينة.

تتكون من ثلاثة أجزاء (ECA): الحدث (Event) مثل عملية إدراج أو حذف أو تحديث؛ الشرط (Condition) الذي يجب أن يتحقق؛ والإجراء (Action) الذي يُتخذ عند تحقق الشرط.

يمكن تحديد وقت التشغيل (BEFORE أو AFTER) وما إذا كان يُنفذ لكل صف (FOR EACH ROW).

10 مقدمة في قواعد البيانات: المزيد عن SQL والجبر العلائقي

فهم الجداول الافتراضية (Views)، تعديل المخططات، والأساس الرياضي لقواعد البيانات من خلال الجبر العلائقي.

10.1 الجداول الافتراضية (Views) في SQL

الجدول الافتراضي (View) هو جدول غير مخزن فعلياً، يُشتق من جداول أخرى لتسهيل الاستعلامات المعقدة وتوفير آلية أمان.

يتم إنشاء الجداول الافتراضية باستخدام الأمر CREATE VIEW. لا يتم تخزين بيانات الجدول الافتراضي فعلياً في معظم الحالات، بل يتم اشتقاقها ديناميكياً.

يسمح الجدول الافتراضي بعمليات استعلام كاملة، ولكنه يقيد عمليات التحديث.

هناك استراتيجيتان لتنفيذ الجداول الافتراضية:

  • تعديل الاستعلام (Query Modification) حيث يقوم نظام إدارة قواعد البيانات بتعديل الاستعلام تلقائياً ليتم تنفيذه على الجداول الأساسية، و
  • تجسيد الجدول الافتراضي (View Materialization) حيث يتم إنشاء جدول مؤقت فعلي يحتفظ بنتيجة الاستعلام.

10.2 تعديل المخطط في SQL

تُستخدم أوامر مثل DROP و ALTER لتعديل هيكل قاعدة البيانات بعد إنشائها.

يُستخدم الأمر DROP TABLE لإزالة جدول أساسي وتعريفه بالكامل. إذا كان الجدول مرتبطاً بجداول أخرى (مُشار إليه)، فلا يمكن حذفه إلا بإضافة الكلمة CASCADE التي تزيل جميع الإشارات التلقائية.

يُستخدم الأمر ALTER TABLE لإضافة أو حذف أعمدة (Attributes) من جدول موجود. عند إضافة عمود جديد، سيحتوي على قيم فارغة (NULL) لجميع السجلات الحالية، لذا لا يُسمح باستخدام قيد NOT NULL للعمود الجديد مباشرة.

10.3 الجبر العلائقي: العمليات الأحادية

العمليات الأحادية تُطبق على جدول واحد وتشمل: الاختيار (SELECT)، الإسقاط (PROJECT)، وإعادة التسمية (RENAME).

  • الاختيار (SELECT - $\sigma$): يقوم بتصفية السجلات (الصفوف) بناءً على شرط معين. إنها عملية تبادلية (Commutative).
  • الإسقاط (PROJECT - $\pi$): يقوم باختيار أعمدة محددة وتجاهل الباقي، مما يخلق تقسيماً عمودياً. هذه العملية تزيل التكرارات تلقائياً وليست تبادلية.
  • إعادة التسمية (RENAME - $\rho$): تُستخدم لتغيير اسم الجدول أو أسماء الأعمدة أو كليهما، وهي مفيدة جداً عند كتابة استعلامات معقدة تتطلب دمج نفس الجدول.
تطبيق الاختيار ثم الإسقاط على العلاقة R \[\pi_{<attribute\ list>}(\sigma_{<condition>}(R))\]

10.4 الجبر العلائقي: عمليات المجموعات

عمليات المجموعات (الاتحاد، التقاطع، الفرق) تتطلب أن يكون الجدولان متوافقين نوعياً (Type Compatible).

تشمل عمليات المجموعات الثنائية:

  • الاتحاد (UNION - $\cup$): يدمج السجلات من كلا الجدولين مع إزالة التكرارات.
  • التقاطع (INTERSECTION - $\cap$): يُرجع السجلات الموجودة في كلا الجدولين معاً.
  • فرق المجموعات (SET DIFFERENCE - $-$): يُرجع السجلات الموجودة في الجدول الأول وغير الموجودة في الثاني.

تتطلب هذه العمليات التوافق النوعي (Type Compatibility): يجب أن يحتوي الجدولان على نفس عدد الأعمدة، ويجب أن تكون مجالات (Domains) الأعمدة المتقابلة متوافقة.

شرط التوافق النوعي للأعمدة المتقابلة \[dom(A_i) = dom(B_i) \text{ for } i=1, 2, ..., n\]

10.5 الجبر العلائقي: الجداء الديكارتي وعمليات الربط

الجداء الديكارتي يدمج كل سجل من الجدول الأول مع كل سجل من الجدول الثاني، بينما الربط (JOIN) يدمج السجلات المرتبطة فقط بناءً على شرط معين.

  • الجداء الديكارتي (CARTESIAN PRODUCT - $\times$): ينتج عنه جدول يحتوي على جميع التوليفات الممكنة للسجلات. إذا كان R يحتوي على $n$ سجل و S يحتوي على $m$ سجل، فالنتيجة تحتوي على $n \times m$ سجل. نادراً ما يكون مفيداً بمفرده.
  • الربط (JOIN - $\bowtie$): يعادل جداء ديكارتي متبوعاً بعملية اختيار (SELECT). يدمج السجلات التي تحقق شرط الربط فقط.
  • الربط المتساوي (EQUIJOIN): ربط يستخدم شرط المساواة فقط.
  • الربط الطبيعي (NATURAL JOIN - $*$): نوع من الربط المتساوي يزيل العمود المكرر تلقائياً، ويتطلب أن تكون أعمدة الربط بنفس الاسم في كلا الجدولين.
تعريف عملية الربط باستخدام الجداء الديكارتي والاختيار \[R \bowtie_{<condition>} S = \sigma_{<condition>}(R \times S)\]

10.6 الجبر العلائقي: عملية القسمة والمجموعة الكاملة

عملية القسمة تُستخدم للإجابة على استعلامات تتضمن كلمة 'كل' (Every/All). المجموعة الكاملة للعمليات تتكون من 6 عمليات أساسية يمكن اشتقاق الباقي منها.

  • عملية القسمة (DIVISION - $\div$): تُطبق على جدولين $R(Z)$ و $S(X)$ حيث $X$ مجموعة جزئية من $Z$. النتيجة هي السجلات التي تظهر في $R$ مقترنة بكل سجل موجود في $S$.
  • المجموعة الكاملة للعمليات (Complete Set): تتكون من {الاختيار $\sigma$، الإسقاط $\pi$، الاتحاد $\cup$، الفرق $-$، إعادة التسمية $\rho$، الجداء الديكارتي $\times$}. تُسمى كاملة لأن أي عملية أخرى (مثل التقاطع أو الربط) يمكن التعبير عنها باستخدام مزيج من هذه العمليات الست.
اشتقاق عملية التقاطع باستخدام الاتحاد والفرق \[R \cap S = (R \cup S) - ((R - S) \cup (S - R))\]

11 مقدمة في قواعد البيانات: تصميم قواعد البيانات 1

وضع الأساس لتصميم قواعد بيانات خالية من التكرار باستخدام الاعتمادات الوظيفية والنماذج العادية الأساسية (1NF, 2NF, 3NF).

11.1 إرشادات التصميم غير الرسمية

قواعد بسيطة لضمان تصميم قاعدة بيانات خالية من التكرار والمشاكل، مثل التأكد من أن كل جدول يمثل كياناً واحداً.

تتضمن إرشادات التصميم غير الرسمية أربعة مبادئ رئيسية:

  1. دلالات السمات: يجب أن يمثل كل صف (Tuple) كياناً أو علاقة واحدة.
  2. تقليل المعلومات المتكررة لتجنب شذوذ التحديث (Update Anomalies) والذي يشمل شذوذ الإدراج والحذف والتعديل.
  3. القيم الفارغة (Null Values): يجب تصميم العلاقات بحيث تحتوي على أقل عدد ممكن من القيم الفارغة.
  4. السجلات الزائفة (Spurious Tuples): يجب تصميم العلاقات لتلبية شرط الربط غير المفقود (Lossless Join) لتجنب توليد سجلات خاطئة عند دمج الجداول.

11.2 الاعتمادات الوظيفية (FDs)

قيد يحدد أن قيمة سمة معينة (X) تحدد بشكل فريد قيمة سمة أخرى (Y).

الاعتمادات الوظيفية (FDs) هي مقاييس رسمية لـ "جودة" التصميم العلائقي.

يُقال إن مجموعة السمات X تحدد وظيفياً مجموعة السمات Y (تُكتب X -> Y) إذا كانت قيمة X تحدد قيمة فريدة لـ Y. بعبارة أخرى، لأي صفين t1 و t2، إذا كان t1[X] = t2[X]، فيجب أن يكون t1[Y] = t2[Y].

هذه الاعتمادات مستمدة من القيود الواقعية للبيانات.

تعريف الاعتماد الوظيفي رياضياً. \[X \rightarrow Y \implies \forall t_1, t_2 \in r(R), t_1[X] = t_2[X] \Rightarrow t_1[Y] = t_2[Y]\]

11.3 قواعد الاستدلال للاعتمادات الوظيفية

قواعد رياضية (بديهيات أرمسترونغ) لاستنتاج اعتمادات وظيفية جديدة من مجموعة اعتمادات موجودة.

بالنظر إلى مجموعة من الاعتمادات الوظيفية F، يمكننا استنتاج اعتمادات إضافية باستخدام قواعد أرمسترونغ:

  1. الانعكاس (Reflexive): إذا كانت Y مجموعة فرعية من X، فإن X -> Y.
  2. الزيادة (Augmentation): إذا كان X -> Y، فإن XZ -> YZ.
  3. التعدي (Transitive): إذا كان X -> Y و Y -> Z، فإن X -> Z.

هذه القواعد تعتبر سليمة (Sound) وكاملة (Complete). هناك قواعد إضافية مشتقة مثل التفكيك (Decomposition) والاتحاد (Union).

11.4 المفاتيح والسمات

المفتاح هو سمة أو مجموعة سمات تحدد الصف بشكل فريد، والسمة الأساسية هي جزء من أي مفتاح مرشح.

المفتاح الفائق (Superkey) هو مجموعة من السمات التي تحدد الصف بشكل فريد.

المفتاح (Key) هو مفتاح فائق أصغري (Minimal)، أي أن إزالة أي سمة منه تفقده خاصية التفرد.

إذا كان هناك أكثر من مفتاح، تُسمى مفاتيح مرشحة (Candidate Keys)، ويُختار أحدها ليكون المفتاح الأساسي (Primary Key).

السمة الأساسية (Prime Attribute) هي أي سمة تنتمي لأي مفتاح مرشح، والسمة غير الأساسية (Nonprime Attribute) هي التي لا تنتمي لأي مفتاح مرشح.

11.5 النموذج العادي الأول (1NF)

يجب أن تكون جميع القيم في الجدول ذرية (غير قابلة للتجزئة) ولا يُسمح بالسمات متعددة القيم أو الجداول المتداخلة.

النموذج العادي الأول (1NF) هو أساس قواعد البيانات العلائقية.

يمنع هذا النموذج السمات المركبة (Composite attributes)، والسمات متعددة القيم (Multivalued attributes)، والعلاقات المتداخلة (Nested relations).

يجب أن تكون قيمة السمة لأي صف مفردة وذرية (Atomic).

يُعتبر هذا النموذج جزءاً من التعريف الأساسي للعلاقة (Relation).

11.6 النموذج العادي الثاني (2NF)

يجب أن يكون الجدول في 1NF، وكل سمة غير أساسية يجب أن تعتمد على المفتاح الأساسي بالكامل (لا توجد اعتمادات جزئية).

النموذج العادي الثاني (2NF) يعتمد على مفهوم الاعتماد الوظيفي الكامل (Full Functional Dependency).

يكون المخطط R في 2NF إذا كانت كل سمة غير أساسية (Non-prime attribute) تعتمد وظيفياً بالكامل على المفتاح الأساسي.

الاعتماد الكامل يعني أنه إذا أزلنا أي جزء من المفتاح، فإن الاعتماد لن يعود قائماً.

إذا كان المفتاح الأساسي يتكون من سمة واحدة فقط، فإن الجدول يكون تلقائياً في 2NF (بافتراض أنه في 1NF).

11.7 النموذج العادي الثالث (3NF)

يجب أن يكون الجدول في 2NF، ولا يجوز أن تعتمد أي سمة غير أساسية على سمة غير أساسية أخرى (لا توجد اعتمادات متعدية).

النموذج العادي الثالث (3NF) يمنع الاعتمادات المتعدية (Transitive Dependencies).

يكون المخطط في 3NF إذا كان في 2NF ولا توجد أي سمة غير أساسية تعتمد بشكل متعدٍ على المفتاح الأساسي.

الاعتماد المتعدي يحدث عندما يكون X -> Y و Y -> Z، مما يؤدي إلى X -> Z (حيث Y ليس مفتاحاً مرشحاً).

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

12 مقدمة في قواعد البيانات: تصميم قواعد البيانات - الجزء الثاني

استكشاف النماذج العيارية المتقدمة (BCNF, 4NF, 5NF) للتعامل مع الاعتماديات المعقدة وضمان خصائص التفكيك السليمة.

12.1 نموذج بويس-كود العياري (BCNF)

نموذج عياري أقوى من 3NF، يشترط أن يكون كل محدد (Determinant) مفتاحاً مرشحاً (Superkey).

يكون مخطط العلاقة R في نموذج بويس-كود العياري (BCNF) إذا كان لكل اعتمادية دالية X -> A متحققة في R، فإن X هو مفتاح مرشح (Superkey) لـ R.

كل علاقة في BCNF هي بالضرورة في 3NF، ولكن العكس غير صحيح.

الهدف هو الوصول إلى BCNF، ولكن قد نضطر أحياناً للتضحية بخاصية حفظ الاعتماديات لتحقيق ذلك.

شرط نموذج بويس-كود العياري \[X \rightarrow A \implies X \text{ is a superkey}\]

12.2 خصائص التفكيك العلائقي

القواعد الأساسية عند تقسيم جدول كبير إلى جداول أصغر: حفظ السمات، حفظ الاعتماديات، والربط غير الفاقد.

عند تفكيك مخطط علاقة شامل (Universal Relation) إلى مجموعة من المخططات، يجب مراعاة ثلاث خصائص:

  1. حفظ السمات (Attribute Preservation): يجب أن تظهر كل سمة في علاقة واحدة على الأقل.
  2. حفظ الاعتماديات (Dependency Preservation): يجب أن يكون اتحاد إسقاطات الاعتماديات على الجداول الجديدة مكافئاً للاعتماديات الأصلية.
  3. الربط غير الفاقد (Lossless Join): وهو شرط إلزامي، يعني أن ربط الجداول المفككة يجب أن يعيد الجدول الأصلي تماماً دون إضافة صفوف وهمية (Spurious Tuples).
اختبار الربط غير الفاقد للتفكيك الثنائي (LJ1) \[(R_1 \cap R_2) \rightarrow (R_1 - R_2) \lor (R_1 \cap R_2) \rightarrow (R_2 - R_1)\]

12.3 الاعتماديات متعددة القيم والنموذج العياري الرابع (4NF)

يحدث عندما تحدد سمة واحدة مجموعة من القيم لسمة أخرى بشكل مستقل. 4NF يمنع هذا التكرار المستقل.

الاعتمادية متعددة القيم (MVD): يُرمز لها بـ X ->> Y، وتعني أنه لقيمة معينة من X، توجد مجموعة من القيم لـ Y، وهذه المجموعة مستقلة تماماً عن السمات الأخرى في العلاقة.

النموذج العياري الرابع (4NF): تكون العلاقة في 4NF إذا كان لكل اعتمادية متعددة القيم غير بديهية (Nontrivial MVD) X ->> Y، يكون X مفتاحاً مرشحاً (Superkey).

رمز الاعتمادية متعددة القيم \[X \twoheadrightarrow Y\]

12.4 اعتماديات الربط والنموذج العياري الخامس (5NF)

يتعامل مع الحالات التي لا يمكن فيها تقسيم الجدول إلى جدولين دون فقدان المعلومات، بل يجب تقسيمه إلى 3 جداول أو أكثر.

اعتمادية الربط (JD): يُرمز لها بـ JD(R1, R2, ..., Rn)، وتعني أن العلاقة R يجب أن تمتلك تفكيكاً غير فاقد إلى n من العلاقات.

الاعتمادية متعددة القيم (MVD) هي حالة خاصة من JD حيث n = 2.

النموذج العياري الخامس (5NF): يُعرف أيضاً بـ PJNF، وتكون العلاقة في 5NF إذا كان لكل اعتمادية ربط غير بديهية، كل Ri هو مفتاح مرشح (Superkey) لـ R.

شرط اعتمادية الربط (JD) \[\pi_{R_1}(r) \bowtie \pi_{R_2}(r) \bowtie ... \bowtie \pi_{R_n}(r) = r\]

12.5 اعتماديات التضمين (Inclusion Dependencies)

قواعد تضمن أن القيم الموجودة في عمود معين يجب أن تكون موجودة مسبقاً في عمود آخر (مثل المفاتيح الأجنبية).

اعتمادية التضمين: يُرمز لها بـ R.X < S.Y، وهي تحدد قيداً ينص على أن مجموعة القيم في سمات X من العلاقة R يجب أن تكون مجموعة جزئية من القيم في سمات Y من العلاقة S.

تُستخدم هذه الاعتماديات لإضفاء الطابع الرسمي على قيود التكامل المرجعي (Referential Integrity) وعلاقات الفئة/الفئة الفرعية (Class/Subclass).

التعريف الرياضي لاعتمادية التضمين \[\pi_X(r(R)) \subseteq \pi_Y(s(S))\]

12.6 نموذج المجال والمفتاح العياري (DKNF)

النموذج العياري 'المثالي' حيث يتم فرض جميع القيود ببساطة عن طريق قيود المفاتيح والمجالات فقط.

تكون العلاقة في DKNF إذا كانت جميع القيود والاعتماديات التي يجب أن تتحقق يمكن فرضها ببساطة عن طريق فرض قيود المجال (Domain Constraints) وقيود المفاتيح (Key Constraints) على العلاقة.

الفكرة هي تحديد 'النموذج العياري النهائي' الذي يأخذ في الاعتبار جميع أنواع الاعتماديات.

13 أمن قواعد البيانات

حماية قواعد البيانات من التهديدات المختلفة باستخدام نماذج التحكم في الوصول (DAC, MAC, RBAC) والتدابير المضادة.

13.1 تهديدات أمن قواعد البيانات والتدابير المضادة

حماية قواعد البيانات تعني الدفاع عنها ضد فقدان السلامة، التوافر، والسرية باستخدام أدوات تحكم متعددة.

تتضمن أنواع الأمان قضايا قانونية وأخلاقية، قضايا سياسات، وقضايا متعلقة بالنظام.

التهديدات الرئيسية لقواعد البيانات هي: فقدان السلامة (Integrity)، فقدان التوافر (Availability)، وفقدان السرية (Confidentiality).

لحماية قواعد البيانات، يتم تنفيذ أربعة أنواع من التدابير المضادة:

  • التحكم في الوصول (Access Control): تقييد الوصول للنظام ككل.
  • التحكم في الاستنتاج (Inference Control): حماية قواعد البيانات الإحصائية من استنتاج معلومات فردية.
  • التحكم في التدفق (Flow Control): منع تدفق المعلومات للمستخدمين غير المصرح لهم (مثل القنوات الخفية Covert Channels).
  • تشفير البيانات (Data Encryption): حماية البيانات الحساسة أثناء النقل.

13.2 مسؤول قاعدة البيانات والتدقيق

مسؤول قاعدة البيانات (DBA) هو السلطة المركزية، ومسار التدقيق (Audit Trail) هو سجل يراقب كل تحركات المستخدمين لاكتشاف التلاعب.

مسؤول قاعدة البيانات (DBA) يمتلك حساب نظام (superuser) يوفر قدرات قوية تشمل:

  • إنشاء الحسابات،
  • منح الصلاحيات،
  • إلغاء الصلاحيات،
  • وتعيين مستويات الأمان.

يجب على النظام تتبع جميع العمليات من خلال سجل النظام (System Log).

إذا تم الاشتباه في أي تلاعب، يتم إجراء تدقيق قاعدة البيانات (Database Audit)، والذي يتكون من مراجعة السجل لفحص جميع الوصول والعمليات.

السجل المستخدم لأغراض أمنية يسمى مسار التدقيق (Audit Trail).

13.3 التحكم التقديري في الوصول (DAC)

نموذج أمان يتيح لمالك البيانات منح أو إلغاء صلاحيات الوصول للآخرين بحرية.

يعتمد DAC على منح (GRANT) وإلغاء (REVOKE) الصلاحيات.

يتم تطبيق الصلاحيات على مستويين:

  • مستوى الحساب (مثل CREATE TABLE)
  • ومستوى العلاقة/الجدول (مثل SELECT, MODIFY, REFERENCES).

يتبع هذا النموذج نموذج مصفوفة الوصول (Access Matrix Model) حيث تمثل الصفوف الكيانات (المستخدمين) والأعمدة تمثل الكائنات (الجداول).

يمكن لمالك الجدول تمرير الصلاحيات باستخدام GRANT OPTION، مما يسمح بانتشار الصلاحيات. يمكن الحد من هذا الانتشار أفقياً أو عمودياً.

كما يمكن استخدام العروض (Views) كآلية أمان لإخفاء أعمدة أو صفوف معينة عن المستخدمين.

13.4 التحكم الإلزامي في الوصول (MAC)

نموذج أمان صارم يصنف البيانات والمستخدمين إلى مستويات أمنية (مثل سري للغاية، سري) ويمنع تسريب المعلومات.

يُستخدم MAC عندما تكون هناك حاجة لسياسة أمان إضافية تصنف البيانات والمستخدمين.

الفئات الأمنية النموذجية هي: سري للغاية (TS) ≥ سري (S) ≥ سري (C) ≥ غير مصنف (U).

النموذج الأكثر شيوعاً هو نموذج Bell-LaPadula، والذي يفرض قيدين:

  • خاصية الأمان البسيطة (Simple Security Property): لا يُسمح للموضوع S بقراءة الكائن O إلا إذا كان تصنيف S أعلى من أو يساوي تصنيف O (لا تقرأ لأعلى).
  • خاصية النجمة (* Property): لا يُسمح للموضوع S بكتابة الكائن O إلا إذا كان تصنيف S أقل من أو يساوي تصنيف O (لا تكتب لأسفل).

13.5 العلاقات متعددة المستويات والتعددية الاستنساخية

في قواعد البيانات الآمنة، قد يرى المستخدمون ذوو الصلاحيات المختلفة بيانات مختلفة لنفس السجل، وهو ما يسمى بالتعددية الاستنساخية.

لدمج الأمان متعدد المستويات في قواعد البيانات العلائقية، يتم ربط كل سمة (Attribute) بـ سمة تصنيف (Classification Attribute).

يسمى المفتاح الأساسي في هذا النظام بـ المفتاح الظاهري (Apparent Key).

يؤدي هذا إلى مفهوم التعددية الاستنساخية (Polyinstantiation)، حيث يمكن أن تحتوي عدة صفوف على نفس قيمة المفتاح الظاهري ولكن بقيم سمات مختلفة للمستخدمين في مستويات تصنيف مختلفة.

يتم تطبيق قواعد سلامة إضافية مثل سلامة الكيان (Entity Integrity) (يجب أن يكون للمفتاح الظاهري نفس التصنيف الأمني داخل الصف) وسلامة القيم الفارغة (Null Integrity).

مخطط علاقة متعددة المستويات حيث C هو تصنيف السمة و TC هو تصنيف الصف ككل. \[R(A_1, C_1, A_2, C_2, \dots, A_n, C_n, TC)\]

13.6 التحكم في الوصول المبني على الأدوار (RBAC)

منح الصلاحيات بناءً على المسمى الوظيفي (الدور) بدلاً من المستخدم الفردي، مما يسهل إدارة الأنظمة الكبيرة.

ظهر RBAC كتقنية مثبتة لإدارة الأمان في الأنظمة واسعة النطاق.

الفكرة الأساسية هي أن الأذونات ترتبط بالأدوار (Roles)، ويتم تعيين المستخدمين للأدوار المناسبة. يتم إنشاء الأدوار باستخدام CREATE ROLE.

يوفر RBAC تسلسل هرمي للأدوار (Role Hierarchy) يعكس خطوط السلطة والمسؤولية في المؤسسة.

كما يدعم القيود الزمنية (Temporal Constraints) على الأدوار، مثل مدة التفعيل.

يعتبر RBAC مثالياً لتطبيقات الويب والمؤسسات الناشئة مقارنة بـ DAC و MAC.

مرجع المعادلات

المعادلة / المفهوم الوحدة LaTeX / Notation
تطبيق الاختيار ثم الإسقاط على العلاقة R M10 \(\pi_{<attribute\ list>}(\sigma_{<condition>}(R))\)
شرط التوافق النوعي للأعمدة المتقابلة M10 \(dom(A_i) = dom(B_i) \text{ for } i=1, 2, ..., n\)
تعريف عملية الربط باستخدام الجداء الديكارتي والاختيار M10 \(R \bowtie_{<condition>} S = \sigma_{<condition>}(R \times S)\)
اشتقاق عملية التقاطع باستخدام الاتحاد والفرق M10 \(R \cap S = (R \cup S) - ((R - S) \cup (S - R))\)
تعريف الاعتماد الوظيفي رياضياً. M11 \(X \rightarrow Y \implies \forall t_1, t_2 \in r(R), t_1[X] = t_2[X] \Rightarrow t_1[Y] = t_2[Y]\)
شرط نموذج بويس-كود العياري M12 \(X \rightarrow A \implies X \text{ is a superkey}\)
اختبار الربط غير الفاقد للتفكيك الثنائي (LJ1) M12 \((R_1 \cap R_2) \rightarrow (R_1 - R_2) \lor (R_1 \cap R_2) \rightarrow (R_2 - R_1)\)
رمز الاعتمادية متعددة القيم M12 \(X \twoheadrightarrow Y\)
شرط اعتمادية الربط (JD) M12 \(\pi_{R_1}(r) \bowtie \pi_{R_2}(r) \bowtie ... \bowtie \pi_{R_n}(r) = r\)
التعريف الرياضي لاعتمادية التضمين M12 \(\pi_X(r(R)) \subseteq \pi_Y(s(S))\)
مخطط علاقة متعددة المستويات حيث C هو تصنيف السمة و TC هو تصنيف الصف ككل. M13 \(R(A_1, C_1, A_2, C_2, \dots, A_n, C_n, TC)\)

مقارنة المفاهيم الأساسية

النصوص ثابتة الطول مقابل متغيرة الطول

المعيار CHAR(n) VARCHAR(n)
استهلاك المساحة يحجز n بايت دائماً (يهدر المساحة) يحجز فقط المساحة المطلوبة + بايت للطول
أفضل استخدام البيانات ذات الطول الثابت (مثل رقم الهوية) البيانات ذات الطول المتغير (مثل الأسماء)

إجراءات التكامل المرجعي

المعيار RESTRICT CASCADE SET NULL
السلوك عند الحذف يمنع الحذف يحذف السجلات المرتبطة يضع القيمة فارغة

المجموعات (Sets) مقابل الحقائب (Bags)

المعيار Sets (المجموعات) Bags / Multisets (الحقائب)
التكرار غير مسموح مسموح
النموذج المستخدم النموذج العلائقي الرسمي نموذج SQL العملي
الأداء (بدون فهارس) بطيء (يتطلب فرز لإزالة التكرار) سريع

عمليات المجموعات مقابل عمليات الحقائب

المعيار Set Operations (UNION, INTERSECT) Multiset Operations (UNION ALL, INTERSECT ALL)
التعامل مع التكرار يتم إزالة التكرارات يتم الاحتفاظ بالتكرارات

الاستعلامات المتداخلة: المترابطة مقابل غير المترابطة

المعيار Correlated Nested Query Uncorrelated Nested Query
الاعتمادية يعتمد على الاستعلام الخارجي (يشير إلى سماته) مستقل تماماً عن الاستعلام الخارجي
تكرار التنفيذ يُنفذ مرة واحدة لكل صف في الاستعلام الخارجي يُنفذ مرة واحدة فقط

WHERE مقابل HAVING

المعيار WHERE Clause HAVING Clause
مستوى التصفية يصفي الصفوف الفردية يصفي المجموعات بأكملها
استخدام دوال التجميع لا يمكن استخدام دوال التجميع داخله يُستخدم عادةً مع دوال التجميع

استراتيجيات تنفيذ الجداول الافتراضية

المعيار Query Modification View Materialization
آلية العمل تعديل الاستعلام تلقائياً ليُنفذ على الجداول الأساسية إنشاء جدول مؤقت فعلي يحتفظ بالنتيجة
الكفاءة مع الاستعلامات المعقدة المتكررة غير فعال (يتم إعادة الحساب في كل مرة) فعال (البيانات جاهزة في الجدول المؤقت)
تحديث البيانات يعكس البيانات الحية دائماً يتطلب استراتيجية تحديث تدريجي (Incremental update) للحفاظ على التزامن

الربط الداخلي مقابل الربط الخارجي

المعيار INNER JOIN OUTER JOIN
التعامل مع السجلات غير المتطابقة يتم استبعادها من النتيجة تظهر في النتيجة (على الأقل مرة واحدة)

مقارنة النماذج العادية

المعيار 1NF 2NF 3NF
القاعدة الأساسية السمات تعتمد على المفتاح (قيم ذرية) السمات تعتمد على المفتاح بالكامل السمات تعتمد على لا شيء سوى المفتاح
المشكلة التي يحلها السمات المتعددة والمركبة الاعتمادات الجزئية الاعتمادات المتعدية

مقارنة بين 3NF و BCNF

المعيار 3NF BCNF
قوة النموذج أضعف من BCNF أقوى بصرامة من 3NF
حفظ الاعتماديات مضمون دائماً (خوارزمية 11.2/11.4) قد يُفقد أثناء التفكيك
شرط المحدد (Determinant) يسمح بأن يكون المحدد غير مفتاح إذا كان التابع سمة أولية (Prime) يجب أن يكون كل محدد مفتاحاً مرشحاً (Superkey)

مقارنة بين التحكم التقديري (DAC) والتحكم الإلزامي (MAC)

المعيار DAC MAC
المرونة درجة عالية من المرونة، مناسب لتطبيقات متنوعة. جامد جداً، قابل للتطبيق في بيئات محدودة (مثل العسكرية).
مستوى الحماية عرضة للهجمات الخبيثة مثل أحصنة طروادة. درجة عالية من الحماية، يمنع التدفق غير القانوني للمعلومات.

🃏 البطاقات التعليمية

🎯 اختبر نفسك

1 / 381 🎯 نتيجتك: 0

حديث البروفيسور

أهلاً بكم يا أبنائي وبناتي طلاب مقرر CS350 في ليلة الامتحان النهائي. الليلة هي تتويج لجهودكم طوال الفصل الدراسي، ومن المهم جداً أن تنظروا إلى المنهج كقصة واحدة متصلة بدلاً من وحدات منفصلة. تبدأ رحلتنا في الوحدة السابعة حيث وضعنا الأساس الهيكلي باستخدام لغة تعريف البيانات (DDL) لبناء الجداول وفرض القيود المرجعية. هذا الأساس هو ما سمح لنا في الوحدة الثامنة بكتابة استعلامات الاسترجاع والتحديث، وهنا يجب أن تحذروا من فخ الامتحان الشائع: الخلط بين المجموعات (Sets) والحقائب (Bags) عند استخدام عمليات الاتحاد والتقاطع. في الوحدة التاسعة، تعمقنا أكثر في الاستعلامات المعقدة، والتعامل مع القيم الفارغة (NULL)، والروابط (Joins)، بالإضافة إلى استخدام المشغلات (Triggers) لفرض قواعد العمل. تذكروا أن القيم الفارغة يمكن أن تغير نتائج الاستعلام بشكل غير متوقع، لذا راجعوها بعناية. الوحدة العاشرة شكلت جسراً بين التطبيق العملي والنظري من خلال الجبر العلائقي (Relational Algebra) وتعديل المخططات وإنشاء العروض (Views). الجبر العلائقي ليس مجرد رياضيات، بل هو المحرك الذي ينفذ استعلاماتكم. بعد إتقان الاستعلام، انتقلنا في الوحدتين الحادية عشرة والثانية عشرة إلى فن تصميم قواعد البيانات. لقد تعلمنا كيف نزيل التكرار والعيوب باستخدام الاعتمادات الوظيفية (Functional Dependencies) والتطبيع (Normalization). احذروا من فخ التحلل (Decomposition)؛ تأكدوا دائماً من أنه يحافظ على المعلومات (Lossless) ويحفظ الاعتمادات عند الانتقال من 1NF إلى BCNF وحتى 4NF و 5NF. أخيراً، في الوحدة الثالثة عشرة، توجنا عملنا بحماية هذه البيانات الثمينة من خلال نماذج التحكم في الوصول مثل DAC و MAC و RBAC. في الامتحان، اربطوا بين الوحدات: كيف يمكن استخدام العروض (الوحدة 10) كأداة أمنية (الوحدة 13)؟ وكيف يؤثر التصميم السيئ (الوحدات 11 و 12) على تعقيد استعلامات SQL (الوحدات 8 و 9)؟ اقرأوا الأسئلة بهدوء، وركزوا على التفاصيل الدقيقة. أثق بقدراتكم تماماً، وأتمنى لكم كل التوفيق والنجاح في اختباركم النهائي.

خزنة الامتحان | النقاط الحرجة

32 نقطة حرجة
🔑 مفهوم أساسي M13
نموذج Bell-LaPadula في MAC يعتمد على قاعدتين ذهبيتين: لا تقرأ لأعلى (Simple Security) ولا تكتب لأسفل (* Property). هذا يمنع تسريب البيانات السرية لمستويات أقل.
💡 سر الامتحان M13
العروض (Views) ليست مجرد أداة لتسهيل الاستعلامات، بل هي آلية أمان قوية جداً في نموذج DAC لإخفاء الأعمدة والصفوف الحساسة دون تغيير هيكل الجدول الأصلي.
💡 سر الامتحان M8
استخدام UNION ALL أسرع بكثير من UNION. عملية UNION العادية تجبر قاعدة البيانات على فرز (Sort) النتائج للبحث عن التكرارات وإزالتها، بينما UNION ALL يدمج النتائج فوراً.
⚠️ فخ M8
تنفيذ أمر DELETE أو UPDATE بدون جملة WHERE. هذا الخطأ الشائع سيؤدي إلى مسح أو تعديل كل صفوف الجدول بلا استثناء. دائماً اختبر شرط WHERE باستخدام SELECT أولاً.
⚠️ فخ M13
الاعتقاد بأن نموذج DAC آمن تماماً. في الواقع، DAC مرن ولكنه ضعيف جداً أمام هجمات 'أحصنة طروادة' لأن المستخدمين يمكنهم تمرير الصلاحيات بغير قصد لبرامج خبيثة.
🔑 مفهوم أساسي M13
نموذج RBAC يفصل المستخدمين عن الصلاحيات المباشرة. أنت لا تمنح 'أحمد' صلاحية القراءة، بل تمنح دور 'المحاسب' صلاحية القراءة، ثم تعين 'أحمد' كـ 'محاسب'. هذا يسهل الإدارة بشكل هائل.
⚠️ فخ M9
محاولة استخدام دوال التجميع (مثل COUNT أو AVG) داخل جملة WHERE. جملة WHERE تُقيم قبل التجميع، لذا يجب استخدام جملة HAVING لتصفية المجموعات.
🔑 مفهوم أساسي M12
اعتماديات التضمين (Inclusion Dependencies) هي الأساس النظري الذي تُبنى عليه المفاتيح الأجنبية (Foreign Keys) في قواعد البيانات العلائقية.
⚠️ فخ M8
نسيان جملة WHERE في استعلام يضم جداول متعددة لا يسبب خطأ برمجي (Syntax Error)، بل ينفذ الاستعلام وينتج 'ضرباً ديكارتياً' كارثياً قد يوقف النظام عن العمل بسبب حجم البيانات الهائل.
🔑 مفهوم أساسي M12
كل علاقة في BCNF هي بالضرورة في 3NF، ولكن العكس غير صحيح. BCNF أقوى بصرامة.
💡 سر الامتحان M11
التعريف العام لـ 3NF يحتوي على ثغرة مقصودة: يُسمح بالاعتماد إذا كانت السمة المستنتجة 'سمة أساسية'. هذه الثغرة هي ما يعالجه نموذج BCNF لاحقاً.
⚠️ فخ M12
الاعتقاد بأن مصطلح 'Lossless Join' يعني أننا لا نفقد صفوفاً من البيانات. الحقيقة هي أنه يعني أننا لا 'نضيف' صفوفاً وهمية (Spurious Tuples) عند دمج الجداول.
⚠️ فخ M7
الخلط بين BLOB و CLOB. تذكر أن B تعني Binary (للصور والفيديو)، بينما C تعني Character (للنصوص الطويلة).
⚠️ فخ M8
استخدام حرف البدل `%` في بداية نمط البحث (مثل `LIKE '%Smith'`) يمنع قاعدة البيانات من استخدام الفهارس (Indexes)، مما يجبرها على فحص كل صف في الجدول (Full Table Scan).
💡 سر الامتحان M7
لحل مشكلة المرجع الدائري (Circular Reference)، لا يمكنك إنشاء كلا الجدولين في نفس الوقت. السر يكمن في إنشاء الجدول الأول بدون المفتاح الأجنبي، إنشاء الجدول الثاني كاملاً، ثم استخدام ALTER TABLE لإضافة المفتاح الأجنبي للجدول الأول.
💡 سر الامتحان M10
المجموعة الكاملة للعمليات (Complete Set) تعني أن 6 عمليات فقط ($\sigma, \pi, \cup, -, \rho, \times$) تكفي نظرياً لبناء أي استعلام مهما كان معقداً، وكل العمليات الأخرى (مثل JOIN) هي مجرد اختصارات.
🔑 مفهوم أساسي M11
الاعتماد الوظيفي الكامل (Full FD) هو جوهر النموذج العادي الثاني (2NF). إذا كان لديك مفتاح أساسي من عمود واحد، فأنت تلقائياً في 2NF (لا يوجد اعتماد جزئي).
⚠️ فخ M11
الاعتقاد بأن التطبيع (Normalization) دائماً يحسن الأداء. في الواقع، التطبيع المفرط يكثر من عمليات الربط (JOIN) مما يبطئ الاستعلامات. لذا نلجأ أحياناً لـ 'إلغاء التطبيع' (Denormalization).
⚠️ فخ M11
الخلط بين المفتاح الفائق (Superkey) والمفتاح (Key). تذكر: كل مفتاح هو مفتاح فائق، ولكن ليس كل مفتاح فائق هو مفتاح. المفتاح يجب أن يكون 'أصغرياً' (Minimal).
💡 سر الامتحان M12
الاعتمادية متعددة القيم (MVD) التي يعالجها 4NF هي في الواقع مجرد حالة خاصة من اعتمادية الربط (JD) التي يعالجها 5NF، وذلك عندما يتم تقسيم الجدول إلى جزأين فقط (n=2).
⚠️ فخ M13
الخلط بين المفتاح الأساسي (Primary Key) والمفتاح الظاهري (Apparent Key). في قواعد البيانات متعددة المستويات، المفتاح الظاهري قد يتكرر (Polyinstantiation)، مما يكسر قاعدة تفرد المفتاح الأساسي التقليدية.
🔑 مفهوم أساسي M8
جداول SQL هي 'حقائب' (Bags) وليست 'مجموعات' (Sets). هذا يعني أن التكرار مسموح افتراضياً لتحسين الأداء. إذا أردت سلوك المجموعات الرياضية، يجب عليك صراحة استخدام DISTINCT.
🔑 مفهوم أساسي M7
في DECIMAL(i, j)، الحرف i لا يمثل الأرقام قبل الفاصلة، بل يمثل إجمالي عدد الأرقام (الدقة). فمثلاً DECIMAL(5,2) يعني 3 أرقام قبل الفاصلة ورقمين بعدها.
⚠️ فخ M7
الاعتقاد بأن عدم كتابة ON DELETE يعني أن السجلات المرتبطة ستُحذف تلقائياً. الصحيح أن الخيار الافتراضي هو RESTRICT، والذي سيمنع الحذف ويُظهر خطأ.
🔑 مفهوم أساسي M10
التوافق النوعي (Type Compatibility) هو شرط صارم لعمليات المجموعات (الاتحاد، التقاطع، الفرق). لا يمكنك دمج جدولين ما لم يكن لهما نفس الهيكل (عدد الأعمدة وأنواع البيانات).
🔑 مفهوم أساسي M9
الاستعلامات المترابطة (Correlated Queries) تُنفذ مرة واحدة لكل صف في الاستعلام الخارجي، مما يجعلها مكلفة حسابياً (O(N*M)). حاول دائماً إعادة كتابتها باستخدام الربط (Joins) إذا أمكن لتحسين الأداء.
⚠️ فخ M9
استخدام المعامل '=' للتحقق من القيم الفارغة (مثال: WHERE DNO = NULL). هذا سيعيد دائماً UNKNOWN ولن يرجع أي صفوف. يجب استخدام 'IS NULL'.
⚠️ فخ M12
الاعتقاد بأن التفكيك إلى BCNF يحافظ دائماً على جميع الاعتماديات الدالية. الحقيقة: خوارزمية BCNF (11.3) قد تضحي بحفظ الاعتماديات من أجل الوصول إلى BCNF.
⚠️ فخ M10
الخلط بين عملية SELECT في الجبر العلائقي ($\sigma$) وكلمة SELECT في SQL. في الجبر العلائقي، SELECT تقوم بتصفية الصفوف (تعادل WHERE في SQL)، بينما PROJECT ($\pi$) هي التي تختار الأعمدة (تعادل SELECT في SQL).
💡 سر الامتحان M9
دالة EXISTS سريعة جداً (Short-circuiting) لأنها تتوقف عن البحث بمجرد العثور على أول سجل يطابق الشرط، مما يجعلها أفضل أداءً من استخدام COUNT(*) > 0 في الاستعلامات الفرعية.
🔑 مفهوم أساسي M10
الربط الطبيعي (NATURAL JOIN) يعتمد على تطابق أسماء الأعمدة. إذا لم تكن هناك أعمدة بنفس الاسم، فإنه يتحول إلى جداء ديكارتي (Cartesian Product).
⚠️ فخ M10
الاعتقاد بأن جميع الجداول الافتراضية (Views) قابلة للتحديث. الجداول الافتراضية التي تحتوي على عمليات تجميع (Aggregate) أو ربط (Joins) غالباً غير قابلة للتحديث المباشر.