الدرس 10 من 10
قيود الجدول
- 16 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
قواعد يحرسها المحرّك
الشرح
القيود قواعد يحرسها المحرّك نفسه: PRIMARY KEY معرّف فريد لكل صفّ، وNOT NULL يمنع الفراغ، وUNIQUE يمنع التكرار، وCHECK يشترط شرطًا، وREFERENCES — المفتاح الأجنبي — يمنع الإشارة إلى صفّ غير موجود.
والتحقّق في كود التطبيق وحده لا يكفي: سكربت ترحيل، أو خدمة ثانية، أو تعديل يدوي يتجاوزه. أمّا القيد فيرفض INSERT المخالف أيًّا كان مصدره.
وفي SQLite فخّ معروف: المفاتيح الأجنبية لا تُفرض إلا بعد PRAGMA foreign_keys = ON;، وهو إعداد لكل اتصال على حدة. بدونه يُقبل REFERENCES في التعريف ولا يُطبَّق.
المطلوب
فعّل المفاتيح الأجنبية، ثم أنشئ جدول بطاقات الهدايا cards: id مفتاح أساسي، وcustomer_id إلزامي يشير إلى customers(id)، وcode نصّ إلزامي لا يتكرّر، وbalance عدد صحيح إلزامي لا يقلّ عن صفر.
معايير التصحيح
6 معايير- الجدول cards بأعمدته الأربعة
- id مفتاح أساسي
- الأعمدة الثلاثة الأخرى إلزامية
- الرمز المكرّر يُرفض
- الرصيد السالب يُرفض
- العميل غير الموجود يُرفض
الجداول المتاحة في هذا الدرس
CREATE TABLE customers ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, city TEXT NOT NULL ); CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id INTEGER REFERENCES customers(id), total INTEGER NOT NULL, placed_on TEXT NOT NULL ); INSERT INTO customers (id, name, city) VALUES (1, 'ليان', 'الرياض'), (2, 'خالد', 'جدة'), (3, 'ريم', 'الدمام'), (4, 'فهد', 'الرياض'); INSERT INTO orders (customer_id, total, placed_on) VALUES (1, 120, '2026-09-01'), (1, 80, '2026-09-12'), (2, 300, '2026-09-03'), (3, 45, '2026-09-20'), (2, 60, '2026-09-25');