ماڈیول اسباق (1/4)
اعلی درجے کی ڈیٹا کی اقسام اور ENUMs
پچھلے سبق میں ہم نے بنیادی CREATE TABLE کمانڈ دیکھا۔ آئیے اب کچھ اعلی درجے کی ڈیٹا کی اقسام کو دریافت کریں جو PostgreSQL ہمارے ڈومینز کو زیادہ درست اور محفوظ طریقے سے ماڈل بنانے کے لیے پیش کرتا ہے۔
عددی اور متن کی اقسام
PostgreSQL میں نمبروں اور متن کے لیے کئی قسمیں ہیں۔ صحیح کا انتخاب کرنے سے توثیق اور اسٹوریج کی جگہ دونوں میں مدد ملتی ہے۔
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 اضافہ پر ترجیح دی جاتی ہے۔
CREATE TABLE public_orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer TEXT NOT NULL,
total NUMERIC(10, 2)
);ENUM (شمار)
اکثر ایک کالم میں چند پہلے سے طے شدہ اقدار میں سے صرف ایک ہونا ضروری ہے (جیسے آرڈر کی حیثیت: "نیا"، "ادائیگی"، "بھیج دیا گیا")۔ ایک نقطہ نظر CHECK کلیدی لفظ استعمال کرنا ہے، لیکن PostgreSQL حسب ضرورت ENUM اقسام پیش کرتا ہے۔
-- 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'
);یہ اس بات کی ضمانت دیتا ہے کہ ڈیٹا کی مستقل مزاجی کی حفاظت کرتے ہوئے کوئی بھی کبھی بھی غلط حیثیت نہیں ڈال سکتا۔
اسے آزمائیں
اس کے ساتھ 'user_reviews' ٹیبل بنائیں: id (SERIAL pk)، test_id (UUID ڈیفالٹ gen_random_uuid() کے ساتھ، اسکور (انٹیجر کالعدم نہیں) اور مواد (TEXT)۔ دیگر شعبوں میں سے کسی کو بھی قسم سے باہر واضح رکاوٹوں کی ضرورت نہیں ہے۔
اشارہ دکھائیں۔
CREATE TABLE user_reviews (...) اور پھر مختلف فیلڈز لکھیں۔ کوما یاد رکھیں۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
پہلے 'admin' اور 'user' کی قدروں کے ساتھ ENUM قسم 'user_role' بنائیں۔ پھر id (SERIAL pk) اور کردار کے ساتھ 'enum_users' ٹیبل بنائیں (وہ قسم جو آپ نے ابھی بنائی ہے، NOT NULL)۔
اشارہ دکھائیں۔
مت بھولنا؛ دو بیانات کو الگ کرنے کے لیے (کریٹ ٹائپ اور کریٹ ٹیبل)۔
3 کوششوں کے بعد حل دستیاب ہے۔