دروس الوحدة (3/4)
إنشاء الجداول والقيود: DDL
لقد كنت تعمل حتى الآن على الجداول الموجودة بالفعل (customers،
محمي_INLINE_1...). تشير DDL ("لغة تعريف البيانات") إلى العبارات التي
إنشاء وتعديل المخطط نفسه: الجداول، والأعمدة، والقيود،
الفهارس.
إنشاء جدول: بناء الجملة
CREATE TABLE nome_tabella (
colonna TIPO [vincoli_colonna],
…,
[vincoli_tabella]
);مثال: قائمة الرغبات التي تربط العملاء والمنتجات:
CREATE TABLE wishlists (
id SERIAL PRIMARY KEY,
customer_id INTEGER NOT NULL REFERENCES customers(id),
product_id INTEGER NOT NULL REFERENCES products(id),
added_on DATE NOT NULL DEFAULT CURRENT_DATE,
note TEXT,
UNIQUE (customer_id, product_id)
);دعونا نقسمها قطعة قطعة.
الأنواع الأكثر شيوعا
| اكتب | ما يحمل |
|---|---|
| محمي_INLINE_2 / محمي_INLINE_3 | الأعداد الصحيحة (-2.1 ب… +2.1 ب) |
| محمي_INLINE_4 | أعداد صحيحة كبيرة |
| محمي_INLINE_5 | الكسور العشرية الدقيقة - المال والنسب المئوية |
| محمي_INLINE_6 | سلاسل متغيرة الطول |
| محمي_INLINE_7 | سلاسل يبلغ الحد الأقصى لطولها n |
| محمي_INLINE_9 | TRUE / FALSE / NULL |
| محمي_INLINE_13 | التاريخ فقط |
| محمي_INLINE_14 | التاريخ + الوقت (بدون منطقة زمنية) |
| محمي_INLINE_15 | التاريخ + الوقت مع المنطقة الزمنية |
| محمي_INLINE_16 | INTEGER بتسلسل متزايد تلقائيًا |
قيود
القيد هو القاعدة التي يفرضها PostgreSQL تلقائيًا: إذا كان
INSERT/UPDATE ينتهك ذلك، وتفشل العملية.
PRIMARY KEY -- identifica univocamente la riga, non NULL
NOT NULL -- vieta NULL
UNIQUE -- vieta duplicati su questa colonna
REFERENCES tabella(colonna) -- foreign key
CHECK (espressione_booleana) -- es. CHECK (price > 0)
DEFAULT espressione -- valore di default se non fornitoيمكن إعلان القيود مضمنة في عمود أو **على مستوى الجدول
القيود ** (أسفل الحقول). مثال على مركب UNIQUE:
UNIQUE (customer_id, product_id) -- niente coppia (cliente, prodotto) duplicataالتحقق من القيد
CHECK يفرض قاعدة مخصصة:
CREATE TABLE stock_alerts (
product_id INTEGER PRIMARY KEY REFERENCES products(id),
threshold INTEGER NOT NULL CHECK (threshold >= 0),
notify_email TEXT NOT NULL,
active BOOLEAN NOT NULL DEFAULT true
);threshold يجب أن يكون ≥ 0؛ إذا حاول شخص ما INSERT … threshold = -5، فهو
فشل مع خطأ القيد.
الإسقاط والتغيير
DROP TABLE wishlists; -- elimina la tabella (e i dati!)
DROP TABLE IF EXISTS wishlists; -- senza errore se non esiste
ALTER TABLE customers ADD COLUMN newsletter BOOLEAN NOT NULL DEFAULT false;
ALTER TABLE customers DROP COLUMN newsletter;دورك
قم بإنشاء جدول قوائم الرغبات باستخدام الأعمدة التالية: المعرف (المفتاح الأساسي التسلسلي)، customer_id (عدد صحيح ليس مراجعًا فارغة للعملاء (معرف))، Product_id (عدد صحيح ليس مراجع فارغة منتجات (معرف))، add_on (تاريخ ليس فارغًا مع DEFAULT CURRENT_DATE). أضف قيدًا فريدًا على الزوج (customer_id، Product_id).
إظهار التلميح
UNIQUE (customer_id، Product_id) كقيد على مستوى الجدول في الأسفل.
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
أضف إلى جدول العملاء عمود رسالة إخبارية من النوع BOOLEAN، وليس NULL، مع القيمة DEFAULT false. استخدم عبارة ALTER TABLE واحدة.
إظهار التلميح
بدون الإعداد الافتراضي، قد يفشل ALTER لأن الصفوف موجودة بالفعل والعمود الجديد ليس فارغًا.
الحل متاح بعد 3 من المحاولات