الدرس 10 من 10

قيود الجدول

هدف الدرس

قواعد يحرسها المحرّك

01

الشرح

القيود قواعد يحرسها المحرّك نفسه: PRIMARY KEY معرّف فريد لكل صفّ، وNOT NULL يمنع الفراغ، وUNIQUE يمنع التكرار، وCHECK يشترط شرطًا، وREFERENCES — المفتاح الأجنبي — يمنع الإشارة إلى صفّ غير موجود.

والتحقّق في كود التطبيق وحده لا يكفي: سكربت ترحيل، أو خدمة ثانية، أو تعديل يدوي يتجاوزه. أمّا القيد فيرفض INSERT المخالف أيًّا كان مصدره.

وفي SQLite فخّ معروف: المفاتيح الأجنبية لا تُفرض إلا بعد PRAGMA foreign_keys = ON;، وهو إعداد لكل اتصال على حدة. بدونه يُقبل REFERENCES في التعريف ولا يُطبَّق.

02

المطلوب

فعّل المفاتيح الأجنبية، ثم أنشئ جدول بطاقات الهدايا cards: id مفتاح أساسي، وcustomer_id إلزامي يشير إلى customers(id)، وcode نصّ إلزامي لا يتكرّر، وbalance عدد صحيح إلزامي لا يقلّ عن صفر.

معايير التصحيح

6 معايير
  1. الجدول cards بأعمدته الأربعة
  2. id مفتاح أساسي
  3. الأعمدة الثلاثة الأخرى إلزامية
  4. الرمز المكرّر يُرفض
  5. الرصيد السالب يُرفض
  6. العميل غير الموجود يُرفض
الجداول المتاحة في هذا الدرس
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');
query.sql
المخرجاتSQLite · sql.js

جارٍ تحميل SQLite…

–/6

يبدأ الفحص حين تجهز البيئة.

6 معايير في بطاقة «المطلوب».