মূল কন্টেন্টে যান
মডিউল 8 · 3-এর পাঠ 4কোর্সে 31/57~12 min
মডিউল পাঠ (3/4)

টেবিল এবং সীমাবদ্ধতা তৈরি করা: DDL

এখন পর্যন্ত আপনি ইতিমধ্যে বিদ্যমান টেবিলে কাজ করছেন (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লোড হচ্ছে...

নিম্নলিখিত কলামগুলির সাথে একটি ইচ্ছা তালিকা তৈরি করুন: আইডি (সিরিয়াল প্রাথমিক কী), গ্রাহক_আইডি (পূর্ণ শূন্য উল্লেখ নেই গ্রাহকদের(আইডি)), পণ্য_আইডি (পূর্ণ শূন্য উল্লেখ নেই পণ্য(আইডি)), যোগ করা হয়েছে (ডেফল্ট_কার্ডের সাথে তারিখ শূন্য নয়)। জোড়ায় একটি অনন্য সীমাবদ্ধতা যোগ করুন (customer_id, product_id)।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

UNIQUE (customer_id, product_id) নীচে টেবিল-স্তরের সীমাবদ্ধতা হিসাবে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#sql.m8.l3.e2
প্রচেষ্টা: 0লোড হচ্ছে...

গ্রাহকদের টেবিলে ডিফল্ট মিথ্যা সহ বুলিয়ান টাইপের একটি নিউজলেটার কলাম যোগ করুন, শূন্য নয়। একটি একক ALTER TABLE বিবৃতি ব্যবহার করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ডিফল্ট ছাড়া, ALTER ব্যর্থ হবে কারণ সারি ইতিমধ্যেই বিদ্যমান এবং নতুন কলামটি NULL নয়।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ