ماڈیول اسباق (3/4)
میزیں اور رکاوٹیں بنانا: ڈی ڈی ایل
اب تک آپ ان میزوں پر کام کر رہے ہیں جو پہلے سے موجود ہیں (customers,
orders…)۔ ڈی ڈی ایل ("ڈیٹا ڈیفینیشن لینگویج") سے مراد وہ بیانات ہیں۔
اسکیما کو خود بنائیں اور اس میں ترمیم کریں: میزیں، کالم، رکاوٹیں،
اشاریہ جات
ٹیبل بنائیں: نحو
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)
);آئیے اسے ٹکڑے ٹکڑے کر دیں۔
سب سے عام اقسام
| قسم | یہ کیا رکھتا ہے |
|---|---|
INTEGER / INT | پورے نمبر (-2.1B … +2.1B) |
BIGINT | بڑے عدد |
NUMERIC(p, s) | عین مطابق اعشاریہ - رقم، فیصد |
TEXT | متغیر لمبائی کے تار |
VARCHAR(n) | n کی زیادہ سے زیادہ لمبائی کے ساتھ سٹرنگز |
BOOLEAN | TRUE / FALSE / NULL |
DATE | صرف تاریخ |
TIMESTAMP | تاریخ + وقت (کوئی ٹائم زون نہیں) |
TIMESTAMPTZ | ٹائم زون کے ساتھ تاریخ + وقت |
SERIAL | 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;آپ کی باری
مندرجہ ذیل کالموں کے ساتھ خواہش کی فہرست بنائیں: id (سیریل پرائمری کلید)، customer_id (انٹیجر NOT NULL REFERENCES گاہک(id))، product_id (InTEGER NOT NULL REFERENCES پروڈکٹس (id))، add_on (DATE NOT NULL DEFAULT_CURARDATE کے ساتھ)۔ جوڑے پر ایک انوکھی رکاوٹ شامل کریں (customer_id، product_id)۔
اشارہ دکھائیں۔
UNIQUE (customer_id، product_id) نیچے میز کی سطح کی رکاوٹ کے طور پر۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
کسٹمرز ٹیبل میں BOOLEAN قسم کا ایک نیوز لیٹر کالم شامل کریں، NOT NULL، DEFAULT false کے ساتھ۔ ایک واحد ALTER TABLE بیان استعمال کریں۔
اشارہ دکھائیں۔
DEFAULT کے بغیر، ALTER ناکام ہو جائے گا کیونکہ قطاریں پہلے سے موجود ہیں اور نیا کالم NULL نہیں ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔