मुख्य सामग्री पर जाएं
मॉड्यूल 8 · पाठ 3 का 4पाठ्यक्रम में 31/57~12 min
मॉड्यूल पाठ (3/4)

तालिकाएँ और बाधाएँ बनाना: DDL

अब तक आप उन तालिकाओं पर काम कर रहे हैं जो पहले से मौजूद हैं (customers, orders…). DDL ("डेटा डेफिनिशन लैंग्वेज") उन कथनों को संदर्भित करता है स्कीमा स्वयं बनाएं और संशोधित करें: तालिकाएँ, कॉलम, बाधाएँ, अनुक्रमित.

तालिका बनाएं: वाक्यविन्यास

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.1बी…+2.1बी) | | BIGINT | बड़े पूर्णांक | | NUMERIC(p, s) | सटीक दशमलव - पैसा, प्रतिशत | | TEXT | परिवर्तनीय-लंबाई वाले तार | | VARCHAR(n) | n | की अधिकतम लंबाई वाली स्ट्रिंग | | BOOLEAN | TRUE / FALSE / NULL | | DATE | केवल तिथि | | TIMESTAMP | दिनांक + समय (कोई समयक्षेत्र नहीं) | | TIMESTAMPTZ | दिनांक + समय क्षेत्र के साथ | | SERIAL | INTEGER स्वत: वृद्धि क्रम के साथ |

प्रतिबंध

बाधा एक नियम है जिसे 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लोड हो रहा है...

निम्नलिखित कॉलमों के साथ एक इच्छा सूची तालिका बनाएं: आईडी (सीरियल प्राथमिक कुंजी), ग्राहक_आईडी (पूर्णांक शून्य संदर्भ ग्राहक (आईडी)), उत्पाद_आईडी (पूर्णांक शून्य संदर्भ उत्पाद (आईडी)), add_on (डिफ़ॉल्ट वर्तमान_दिनांक के साथ दिनांक शून्य नहीं)। जोड़ी पर एक अद्वितीय बाधा जोड़ें (ग्राहक_आईडी, उत्पाद_आईडी)।

संपादक लोड हो रहा है...
संकेत दिखाएँ

नीचे तालिका-स्तरीय बाधा के रूप में अद्वितीय (ग्राहक_आईडी, उत्पाद_आईडी)।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम की समीक्षा करें

व्यायाम#sql.m8.l3.e2
प्रयास: 0लोड हो रहा है...

ग्राहक तालिका में बूलियन प्रकार का एक न्यूज़लेटर कॉलम जोड़ें, शून्य नहीं, डिफ़ॉल्ट असत्य के साथ। एकल परिवर्तन तालिका कथन का उपयोग करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

डिफ़ॉल्ट के बिना, ALTER विफल हो जाएगा क्योंकि पंक्तियाँ पहले से मौजूद हैं और नया कॉलम शून्य नहीं है।

3 प्रयासों के बाद समाधान उपलब्ध है