القيود هي قواعد يفرضها نظام قاعدة البيانات على البيانات في الجداول — مما يضمن سلامة البيانات على مستوى قاعدة البيانات (وليس فقط في كود التطبيق). القيود الرئيسية هي: PRIMARY KEY و FOREIGN KEY و UNIQUE و و و .
القيود هي قواعد يفرضها نظام قاعدة البيانات على البيانات في الجداول — مما يضمن سلامة البيانات على مستوى قاعدة البيانات (وليس فقط في كود التطبيق). القيود الرئيسية هي: PRIMARY KEY و FOREIGN KEY و UNIQUE و و و .
NOT NULLCHECKDEFAULTCREATE TABLE users (
id INT PRIMARY KEY, -- unique + not null identifier
email VARCHAR(255) UNIQUE NOT NULL, -- must be unique AND present
age INT CHECK (age >= 0 AND age <= 120), -- must satisfy a condition
country VARCHAR(2) DEFAULT 'US', -- default value if not provided
role VARCHAR(20) NOT NULL DEFAULT 'user',
manager_id INT REFERENCES users(id) -- FOREIGN KEY (referential integrity)
);
PRIMARY KEY → uniquely identifies a row (unique + not null, indexed)
FOREIGN KEY → references another table's key (referential integrity)
UNIQUE → no duplicate values allowed in this column
NOT NULL → the column must have a value (can't be NULL)
CHECK → the value must satisfy a condition (age >= 0, status IN (...))
DEFAULT → a value used when none is provided on insert
-- ❌ relying only on application code to enforce uniqueness:
-- a race condition or a bug or a different app could insert a duplicate
-- ✅ a UNIQUE constraint guarantees it at the DB level — ALWAYS enforced,
-- regardless of which code or how many apps access the database
email VARCHAR(255) UNIQUE
قيود قاعدة البيانات هي خط الدفاع الأخير لسلامة البيانات — فهي مفروضة بغض النظر عن أي كود يدرج البيانات (تطبيقات متعددة أو برامج نصية أو تغييرات يدوية أو كود معيب)، وتتعامل مع حالات التسابق التي تفتقدها الفحوصات على مستوى التطبيق.
CHECK (price > 0) -- prices must be positive
CHECK (status IN ('active', 'inactive')) -- only valid statuses
CHECK (end_date > start_date) -- logical consistency
يفرض CHECK قواعد العمل والمجال مباشرة في المخطط.
القيود ضرورية للحفاظ على سلامة البيانات — فهي تضمن أن البيانات في قاعدة البيانات الخاصة بك تستوفي القواعس (التفرد والوجود والقيم الصحيحة والمراجع الصحيحة) على مستوى قاعدة البيانات، وهو أمر أساسي للتطبيقات الموثوقة، لذا فهم هذه القيود مهم.
معرفة أنواع القيود (PRIMARY KEY و FOREIGN KEY و UNIQUE و NOT NULL و CHECK و DEFAULT) وما يفرضه كل منها ضروري لتصميم المخطط بشكل صحيح.
النقطة الأساسية الأهم من الناحية المفاهيمية هي لماذا نفرض القيود على مستوى قاعدة البيانات بدلاً من تطبيق التطبيق فقط: قيود قاعدة البيانات هي خط الدفاع الأخير لسلامة البيانات — يتم فرضها دائماً بغض النظر عن أي كود وكم عدد التطبيقات التي تصل إلى البيانات، فهي تكتشف الأخطاء التي قد تفتقدها الفحوصات على مستوى التطبيق، والأهم من ذلك أنها تتعامل مع حالات التسابق التي لا يمكن للتحقق على مستوى التطبيق التعامل معها (على سبيل المثال إدراجان متزامنان يمران بفحص التفرد على مستوى التطبيق ولكن قيد UNIQUE يرفض بشكل صحيح النسخة المكررة).
الاعتماد على كود التطبيق وحده لسلامة البيانات محفوف بالمخاطر؛ القيود توفر ضمانة.
فهم قيود CHECK لفرض قواعد المجال والعمل (النطاقات الصحيحة والقيم المسموحة والاتساق المنطقي) مباشرة في المخطط مفيد أيضاً.
بما أن سلامة البيانات حاسمة للتطبيقات الموثوقة، وبما أن القيود توفر ضمانات على مستوى قاعدة البيانات تحمي من الأخطاء وحالات التسابق والبيانات غير المتسقة بطرق لا يمكن لكود التطبيق وحده تحقيقها، فإن فهم القيود — الأنواع والضمانات التي تؤديها وأهمية فرضها على مستوى قاعدة البيانات — معرفة أساسية مهمة لتصميم قواعد البيانات القوية وجزء أساسي من بناء التطبيقات التي تحافظ فيها البيانات على الاتساق والصحة.