মূল কন্টেন্টে যান
মডিউল 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): Postgres-এ কর্মক্ষমতা অভিন্ন। আপনি VARCHAR(n) ব্যবহার করেন শুধুমাত্র যখন আপনি ডাটাবেস স্তরে সন্নিবেশিত দৈর্ঘ্য স্পষ্টভাবে সীমিত করতে চান।
  • NUMERIC(10, 2): অর্থ বা গাণিতিক নির্ভুলতার জন্য পারফেক্ট। এখানে এটি সর্বাধিক 8টি পূর্ণসংখ্যা সংখ্যা এবং 2 দশমিক (মোট 10) এর অনুমতি দেয়। আপনি যদি 10.555 সন্নিবেশ করেন, পোস্টগ্রেস এটিকে 10.56 এ রাউন্ড করে।

UUID প্রকার

ওয়েবে উন্মুক্ত নিরাপদ শনাক্তকারীর জন্য (যেমন ইউআরএলে পাবলিক আইডি), 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 (ডিফল্ট gen_random_uuid() সহ UUID), স্কোর (পূর্ণসংখ্যা শূন্য নয়), এবং সামগ্রী (TEXT)। অন্যান্য ক্ষেত্রগুলির কোনটিরই প্রকারের বাইরে সুস্পষ্ট সীমাবদ্ধতার প্রয়োজন নেই।

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

সারণী তৈরি করুন user_reviews (...) এবং তারপর বিভিন্ন ক্ষেত্র লিখুন। কমা মনে রাখবেন।

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

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

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

প্রথমে 'অ্যাডমিন' এবং 'ব্যবহারকারী' মান সহ ENUM প্রকার 'user_role' তৈরি করুন। তারপর id (SERIAL pk) এবং ভূমিকা সহ 'enum_users' টেবিল তৈরি করুন (আপনি এইমাত্র তৈরি করেছেন, NULL নয়)।

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

ভুলবেন না; দুটি বিবৃতি আলাদা করতে (ক্রিয়েট টাইপ এবং টেবিল তৈরি করুন)।

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