मुख्य सामग्री पर जाएं
मॉड्यूल 9 · पाठ 1 का 4पाठ्यक्रम में 33/57~10 min
मॉड्यूल पाठ (1/4)

उन्नत डेटा प्रकार और ENUMs

पिछले पाठ में हमने मूल CREATE TABLE कमांड देखी थी। आइए अब कुछ उन्नत डेटा प्रकारों का पता लगाएं जो PostgreSQL हमारे डोमेन को अधिक सटीक और सुरक्षित तरीके से मॉडल करने के लिए प्रदान करता है।

संख्यात्मक और पाठ प्रकार

PostgreSQL में संख्याओं और टेक्स्ट के लिए कई प्रकार हैं। सही का चयन करने से सत्यापन और भंडारण स्थान दोनों में मदद मिलती है।

SQL
CREATE TABLE advanced_products (
  id           SERIAL PRIMARY KEY,
  name         VARCHAR(50) NOT NULL,
  description  TEXT,
  -- NUMERIC(p,s) dove p = cifre totali, s = cifre decimali
  price        NUMERIC(10, 2) NOT NULL,
  featured     BOOLEAN DEFAULT FALSE
);
  • TEXT बनाम VARCHAR(n): पोस्टग्रेज़ में प्रदर्शन समान है। आप VARCHAR(n) का उपयोग केवल तभी करते हैं जब आप डेटाबेस स्तर पर सम्मिलित लंबाई को स्पष्ट रूप से सीमित करना चाहते हैं।
  • NUMERIC(10, 2): पैसे या अंकगणितीय सटीकता के लिए बिल्कुल सही। यहां यह अधिकतम 8 पूर्णांक अंक और 2 दशमलव (कुल 10) की अनुमति देता है। यदि आप 10.555 सम्मिलित करते हैं, तो पोस्टग्रेज़ इसे 10.56 पर पूर्णांकित कर देता है।

यूयूआईडी प्रकार

वेब पर प्रदर्शित सुरक्षित पहचानकर्ताओं (जैसे यूआरएल में सार्वजनिक आईडी) के लिए, UUID को अक्सर क्लासिक SERIAL वेतन वृद्धि पर प्राथमिकता दी जाती है।

SQL
CREATE TABLE public_orders (
  id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  customer    TEXT NOT NULL,
  total       NUMERIC(10, 2)
);

ENUM (गणना)

अक्सर किसी कॉलम में कुछ पूर्वनिर्धारित मानों में से केवल एक ही होना चाहिए (उदाहरण के लिए ऑर्डर स्थिति: "नया", "भुगतान किया गया", "शिप किया गया")। एक दृष्टिकोण CHECK कीवर्ड का उपयोग करना है, लेकिन PostgreSQL कस्टम ENUM प्रकार प्रदान करता है।

SQL
-- Dobbiamo prima creare il tipo:
CREATE TYPE order_status AS ENUM ('nuovo', 'pagato', 'spedito', 'cancellato');

-- Ora possiamo usarlo in una tabella:
CREATE TABLE orders_demo (
  id SERIAL PRIMARY KEY,
  status order_status NOT NULL DEFAULT 'nuovo'
);

यह गारंटी देता है कि डेटा स्थिरता की रक्षा करते हुए कोई भी कभी भी अमान्य स्थिति नहीं डाल सकता है।

इसे अजमाएं

व्यायाम#sql.m9.l1.e1
प्रयास: 0लोड हो रहा है...

एक 'user_reviews' तालिका बनाएं: आईडी (SERIAL pk), test_id (डिफ़ॉल्ट gen_random_uuid() के साथ UUID), स्कोर (पूर्णांक शून्य नहीं), और सामग्री (TEXT)। अन्य किसी भी क्षेत्र को प्रकार से परे स्पष्ट बाधाओं की आवश्यकता नहीं है।

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

CREATE TABLE user_reviews (...) और फिर विभिन्न फ़ील्ड लिखें। अल्पविराम याद रखें.

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

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

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

सबसे पहले 'एडमिन' और 'यूजर' मानों के साथ ENUM प्रकार 'user_role' बनाएं। फिर आईडी (SERIAL pk) और भूमिका (आपके द्वारा अभी बनाया गया प्रकार, शून्य नहीं) के साथ 'enum_users' तालिका बनाएं।

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

मत भूलना ; दो कथनों (क्रिएट प्रकार और क्रिएट टेबल) को अलग करने के लिए।

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