মডিউল পাঠ (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): Postgres-এ কর্মক্ষমতা অভিন্ন। আপনিVARCHAR(n)ব্যবহার করেন শুধুমাত্র যখন আপনি ডাটাবেস স্তরে সন্নিবেশিত দৈর্ঘ্য স্পষ্টভাবে সীমিত করতে চান।NUMERIC(10, 2): অর্থ বা গাণিতিক নির্ভুলতার জন্য পারফেক্ট। এখানে এটি সর্বাধিক 8টি পূর্ণসংখ্যা সংখ্যা এবং 2 দশমিক (মোট 10) এর অনুমতি দেয়। আপনি যদি10.555সন্নিবেশ করেন, পোস্টগ্রেস এটিকে10.56এ রাউন্ড করে।
UUID প্রকার
ওয়েবে উন্মুক্ত নিরাপদ শনাক্তকারীর জন্য (যেমন ইউআরএলে পাবলিক আইডি), 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 (ডিফল্ট gen_random_uuid() সহ UUID), স্কোর (পূর্ণসংখ্যা শূন্য নয়), এবং সামগ্রী (TEXT)। অন্যান্য ক্ষেত্রগুলির কোনটিরই প্রকারের বাইরে সুস্পষ্ট সীমাবদ্ধতার প্রয়োজন নেই।
ইঙ্গিত দেখান
সারণী তৈরি করুন user_reviews (...) এবং তারপর বিভিন্ন ক্ষেত্র লিখুন। কমা মনে রাখবেন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
প্রথমে 'অ্যাডমিন' এবং 'ব্যবহারকারী' মান সহ ENUM প্রকার 'user_role' তৈরি করুন। তারপর id (SERIAL pk) এবং ভূমিকা সহ 'enum_users' টেবিল তৈরি করুন (আপনি এইমাত্র তৈরি করেছেন, NULL নয়)।
ইঙ্গিত দেখান
ভুলবেন না; দুটি বিবৃতি আলাদা করতে (ক্রিয়েট টাইপ এবং টেবিল তৈরি করুন)।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ