مرکزی مواد پر جائیں
ماڈیول 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 کی قسم

ویب پر ظاہر ہونے والے محفوظ شناخت کنندگان کے لیے (جیسے URLs میں عوامی IDs)، 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' ٹیبل بنائیں: id (SERIAL pk)، test_id (UUID ڈیفالٹ gen_random_uuid() کے ساتھ، اسکور (انٹیجر کالعدم نہیں) اور مواد (TEXT)۔ دیگر شعبوں میں سے کسی کو بھی قسم سے باہر واضح رکاوٹوں کی ضرورت نہیں ہے۔

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

CREATE TABLE user_reviews (...) اور پھر مختلف فیلڈز لکھیں۔ کوما یاد رکھیں۔

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

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

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

پہلے 'admin' اور 'user' کی قدروں کے ساتھ ENUM قسم 'user_role' بنائیں۔ پھر id (SERIAL pk) اور کردار کے ساتھ 'enum_users' ٹیبل بنائیں (وہ قسم جو آپ نے ابھی بنائی ہے، NOT NULL)۔

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

مت بھولنا؛ دو بیانات کو الگ کرنے کے لیے (کریٹ ٹائپ اور کریٹ ٹیبل)۔

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