مرکزی مواد پر جائیں
ماڈیول 8 · سبق 3 از 4کورس میں 31/57~12 min
ماڈیول اسباق (3/4)

میزیں اور رکاوٹیں بنانا: ڈی ڈی ایل

اب تک آپ ان میزوں پر کام کر رہے ہیں جو پہلے سے موجود ہیں (customers, orders…)۔ ڈی ڈی ایل ("ڈیٹا ڈیفینیشن لینگویج") سے مراد وہ بیانات ہیں۔ اسکیما کو خود بنائیں اور اس میں ترمیم کریں: میزیں، کالم، رکاوٹیں، اشاریہ جات

ٹیبل بنائیں: نحو

SQL
CREATE TABLE nome_tabella (
  colonna  TIPO  [vincoli_colonna],
  …,
  [vincoli_tabella]
);

مثال: ایک خواہش کی فہرست جو صارفین اور مصنوعات کو لنک کرتی ہے:

SQL
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 کی زیادہ سے زیادہ لمبائی کے ساتھ سٹرنگز
BOOLEANTRUE / FALSE / NULL
DATEصرف تاریخ
TIMESTAMPتاریخ + وقت (کوئی ٹائم زون نہیں)
TIMESTAMPTZٹائم زون کے ساتھ تاریخ + وقت
SERIALINTEGER خود بخود بڑھنے والی ترتیب کے ساتھ

پابندیاں

ایک رکاوٹ ایک اصول ہے جسے PostgreSQL خود بخود نافذ کرتا ہے: اگر ایک INSERT/UPDATE اس کی خلاف ورزی کرتا ہے، آپریشن ناکام ہوجاتا ہے۔

SQL
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:

SQL
UNIQUE (customer_id, product_id)   -- niente coppia (cliente, prodotto) duplicata

پابندی کو چیک کریں۔

CHECK ایک حسب ضرورت اصول نافذ کرتا ہے:

SQL
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، یہ رکاوٹ کی غلطی کے ساتھ ناکام ہوجاتا ہے۔

گرانا اور بدلنا

SQL
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;

آپ کی باری

ورزش#sql.m8.l3.e1
کوششیں: 0لوڈ ہو رہا ہے…

مندرجہ ذیل کالموں کے ساتھ خواہش کی فہرست بنائیں: 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 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#sql.m8.l3.e2
کوششیں: 0لوڈ ہو رہا ہے…

کسٹمرز ٹیبل میں BOOLEAN قسم کا ایک نیوز لیٹر کالم شامل کریں، NOT NULL، DEFAULT false کے ساتھ۔ ایک واحد ALTER TABLE بیان استعمال کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

DEFAULT کے بغیر، ALTER ناکام ہو جائے گا کیونکہ قطاریں پہلے سے موجود ہیں اور نیا کالم NULL نہیں ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔