SQLAlchemy তে Primary Key, Foreign Key, এবং Constraints ডেটাবেস টেবিলের ডেটা সঠিকভাবে সংরক্ষণ, সম্পর্ক স্থাপন এবং সুরক্ষা নিশ্চিত করার জন্য ব্যবহৃত হয়। এগুলো ডেটাবেসের কাঠামোকে আরও সুশৃঙ্খল এবং কার্যকরী করে তোলে।
Primary Key
Primary Key (PK) হলো একটি টেবিলের এমন একটি কলাম বা কলাম সেট, যা টেবিলের প্রতিটি রেকর্ডের জন্য অনন্য (unique) এবং না-null (NOT NULL) হতে হবে। এটি একটি টেবিলের প্রতিটি রেকর্ডকে পৃথকভাবে চিহ্নিত করতে ব্যবহৃত হয়। সাধারণত, প্রাথমিক কী শুধুমাত্র একবারই টেবিলের মধ্যে থাকে এবং এটি ডেটাবেসের রেকর্ড সনাক্ত করার জন্য ব্যবহৃত হয়।
Primary Key এর বৈশিষ্ট্য:
- একটি টেবিলের প্রতিটি রেকর্ডের জন্য অনন্য হতে হবে।
- NULL মান গ্রহণ করতে পারে না।
- সাধারণত INTEGER অথবা UUID ডেটা টাইপে থাকে।
উদাহরণ:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# Table অবজেক্ট তৈরি
users = Table('users', metadata,
Column('id', Integer, primary_key=True), # Primary Key
Column('name', String),
Column('age', Integer))
# SQLite ডেটাবেসে টেবিল তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
metadata.create_all(engine)
এখানে, id কলামটি Primary Key হিসেবে সংজ্ঞায়িত করা হয়েছে।
Foreign Key
Foreign Key (FK) একটি টেবিলের কলাম যা অন্য টেবিলের Primary Key বা Unique Key এর দিকে নির্দেশ করে। এটি দুইটি টেবিলের মধ্যে সম্পর্ক তৈরি করে, যেমন One-to-Many বা Many-to-Many। Foreign Key ডেটাবেসের একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করে এবং ডেটা সঠিকতা (data integrity) বজায় রাখতে সহায়ক হয়।
Foreign Key এর বৈশিষ্ট্য:
- এটি অন্য টেবিলের একটি Primary Key বা Unique Key এর দিকে নির্দেশ করে।
- এটি NULL হতে পারে, কিন্তু সম্পর্কিত রেকর্ড যদি না থাকে তবে ত্রুটি (error) তৈরি হতে পারে।
- এটি টেবিলের মধ্যে সম্পর্ক সৃষ্টি করে, যেমন One-to-Many বা Many-to-Many।
উদাহরণ:
from sqlalchemy import create_engine, Table, Column, Integer, String, ForeignKey, MetaData
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# Parent টেবিল তৈরি (যেখানে Primary Key আছে)
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# Child টেবিল তৈরি (যেখানে Foreign Key আছে)
posts = Table('posts', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('users.id')), # Foreign Key
Column('title', String))
# SQLite ডেটাবেসে টেবিল তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
metadata.create_all(engine)
এখানে, posts টেবিলের user_id কলামটি users টেবিলের id কলামের দিকে Foreign Key হিসেবে নির্দেশ করে।
Constraints
Constraints হলো ডেটাবেসের টেবিলের কলামগুলোর জন্য সীমাবদ্ধতা যা ডেটার সঠিকতা, নির্ভরযোগ্যতা এবং নিরাপত্তা নিশ্চিত করে। SQLAlchemy তে কিছু সাধারণ কনস্ট্রেইন্ট রয়েছে, যেমন NOT NULL, UNIQUE, CHECK, এবং DEFAULT।
সাধারণ Constraints এর উদাহরণ:
- NOT NULL: কোনো কলামটি NULL হতে পারে না। এই কনস্ট্রেইন্ট ব্যবহার করে কলামের মান অবশ্যই প্রদান করতে হবে।
Column('name', String, nullable=False) # NOT NULL
- UNIQUE: একটি কলামের সমস্ত মান অনন্য (unique) হতে হবে। এটি ব্যবহার করে একটি কলামের মধ্যে ডুপ্লিকেট ভ্যালু রাখা যাবে না।
Column('email', String, unique=True) # UNIQUE constraint
- DEFAULT: কলামটির জন্য একটি ডিফল্ট মান সেট করা যায়, যদি ব্যবহারকারী কোনো মান না দেয়।
Column('age', Integer, default=18) # Default value for age
- CHECK: কলামের মানের উপর কিছু শর্ত আরোপ করা যায়। উদাহরণস্বরূপ, একটি age কলাম যাতে 0 বা তার বেশি হয়।
Column('age', Integer, CheckConstraint('age >= 0')) # CHECK constraint
উদাহরণ:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# Table অবজেক্ট তৈরি
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String, nullable=False), # NOT NULL
Column('email', String, unique=True), # UNIQUE constraint
Column('age', Integer, default=18), # DEFAULT constraint
Column('salary', Integer, CheckConstraint('salary > 0')) # CHECK constraint
)
# SQLite ডেটাবেসে টেবিল তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
metadata.create_all(engine)
এখানে:
nameকলামের জন্য NOT NULL কনস্ট্রেইন্ট ব্যবহার করা হয়েছে।emailকলামের জন্য UNIQUE কনস্ট্রেইন্ট ব্যবহার করা হয়েছে।salaryকলামের জন্য CHECK কনস্ট্রেইন্ট ব্যবহার করা হয়েছে।
সারাংশ
Primary Key, Foreign Key, এবং Constraints SQLAlchemy তে ডেটাবেস টেবিলের জন্য বিভিন্ন সুরক্ষা এবং কাঠামো তৈরি করতে ব্যবহৃত হয়। Primary Key ডেটাবেস টেবিলের প্রতিটি রেকর্ডকে অনন্যভাবে চিহ্নিত করে, Foreign Key ডেটাবেসের একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করে এবং Constraints ডেটা সঠিকতা এবং নিরাপত্তা নিশ্চিত করতে সাহায্য করে। SQLAlchemy এই কনস্ট্রেইন্টগুলোর মাধ্যমে ডেটাবেস ম্যানিপুলেশনকে আরও শক্তিশালী এবং কার্যকর করে তোলে।
Read more