يفرض PostgreSQL سلامة البيانات من خلال القيود — قواعد على بيانات الجدول. بالإضافة إلى القيود القياسية (، ، ، ، ، )، يضيف Postgres خيارات قوية مثل قيود و تعبيرات مرنة.
يفرض PostgreSQL سلامة البيانات من خلال القيود — قواعد على بيانات الجدول. بالإضافة إلى القيود القياسية (، ، ، ، ، )، يضيف Postgres خيارات قوية مثل قيود و تعبيرات مرنة.
PRIMARY KEYFOREIGN KEYUNIQUENOT NULLCHECKDEFAULTCHECKCREATE TABLE bookings (
id SERIAL PRIMARY KEY, -- unique identifier
room_id INT NOT NULL REFERENCES rooms(id), -- foreign key (referential integrity)
email VARCHAR(255) UNIQUE NOT NULL, -- unique + required
guests INT CHECK (guests > 0 AND guests <= 10), -- value constraint
status TEXT DEFAULT 'pending' -- default value
);
PRIMARY KEY → unique row identifier
FOREIGN KEY → references another table (referential integrity, with ON DELETE options)
UNIQUE → no duplicate values
NOT NULL → must have a value
CHECK → value must satisfy a condition
DEFAULT → default value when not provided
CHECK (price > 0)
CHECK (end_date > start_date) -- logical consistency between columns
CHECK (status IN ('active', 'inactive', 'pending'))
CHECK (email ~ '^[^@]+@[^@]+\.[^@]+$') -- regex validation
قيود CHECK في Postgres يمكنها فرض قواعد عمل غنية، بما في ذلك الشروط بين الأعمدة وأنماط regex.
-- prevent OVERLAPPING bookings for the same room (impossible with UNIQUE alone!)
CREATE TABLE bookings (
room_id INT,
during TSRANGE, -- a time range
EXCLUDE USING GIST (room_id WITH =, during WITH &&) -- no two rows where room_id is
); -- equal AND time ranges OVERLAP
قيود EXCLUDE (ميزة خاصة بـ Postgres) تمنع الصفوف التي تتعارض حسب عامل مخصص — وبشهرة، منع نطاقات الوقت المتداخلة (الحجوزات المزدوجة)، وهو ما لا يستطيع قيد UNIQUE القيام به.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
القيود ضرورية لـ سلامة البيانات — فهي تفرض قواعد البيانات على مستوى قاعدة البيانات (خط الدفاع الأخير، مطبق دائماً بغض النظر عن كود التطبيق)، لذا فإن فهم دعم PostgreSQL للقيود مهم لتصميم قواعد بيانات قوية.
معرفة القيود القياسية (PRIMARY KEY، FOREIGN KEY مع سلامة المراجع، UNIQUE، NOT NULL، CHECK، DEFAULT) وما يفرضه كل منها أساسي لتصميم المخطط، مما يوفر ضمانات على مستوى قاعدة البيانات (التفرد، المراجع الصحيحة، القيم المطلوبة، البيانات الصحيحة) التي تحمي من الأخطاء وحالات السباق والبيانات غير المتسقة بطرق لا يستطيع كود التطبيق وحده تحقيقها.
قيود CHECK في PostgreSQL قادرة بشكل خاص، حيث تفرض قواعد عمل غنية بما في ذلك الشروط بين الأعمدة (الاتساق المنطقي مثل end_date > start_date) وحتى أنماط regex — مما يتيح لك تشفير قواعد المجال مباشرة في المخطط.
خاصة قيمة هي قيد EXCLUDE الخاص بـ Postgres، الذي يمنع الصفوف المتعارضة حسب عوامل مخصصة — وبشكل ملحوظ منع نطاقات الوقت المتداخلة (الحجوزات المزدوجة لغرفة/مورد)، وهي قدرة قوية لا يمكن لقيد UNIQUE قياسي توفيرها وتحل بأناقة مشكلة شائعة في الواقع (الجدولة، الحجوزات) على مستوى قاعدة البيانات.
فهم القيود — القياسية للسلامة، تعبيرات CHECK المرنة في Postgres، و EXCLUDE للوقاية من التعارضات — مهم لتصميم قواعد بيانات تفرض الصحة تلقائياً.
بما أن سلامة البيانات حرجة والقيود توفر ضمانات لا يستطيع كود التطبيق توفيرها، وبما أن Postgres توفر خيارات قوية (CHECK غنية، EXCLUDE للتداخلات) تجاوزاً للأساسيات، فإن فهم دعم PostgreSQL للقيود معرفة قيمة وعملياً ملائمة لبناء قواعد بيانات قوية، حيث قيد EXCLUDE بالذات يكون قدرة Postgres المميزة والمفيدة التي تستحق معرفتها لأنظمة الجدولة/الحجوزات.