Database Tutorials One-to-One, One-to-Many, এবং Many-to-Many Relationships গাইড ও নোট

345

SQLAlchemy তে One-to-One, One-to-Many, এবং Many-to-Many সম্পর্ক (relationships) মডেলিংয়ের জন্য শক্তিশালী সমর্থন রয়েছে। এসব সম্পর্ক ডেটাবেসের টেবিলের মধ্যে সম্পর্ক স্থাপন করে এবং ডেটাবেসের অপারেশনগুলো সহজে সম্পন্ন করতে সহায়তা করে। SQLAlchemy ORM এর মাধ্যমে এই সম্পর্কগুলোকে Python ক্লাসের মাধ্যমে মডেল করা যায়।


One-to-One Relationship

One-to-One সম্পর্ক একটি সম্পর্ক যেখানে একটি রেকর্ড অন্য একটি রেকর্ডের সাথে একযোগে সম্পর্কিত থাকে। অর্থাৎ, একটি Parent টেবিলের একটি রেকর্ডের সাথে একটি Child টেবিলের একটি রেকর্ড সম্পর্কিত থাকে।

উদাহরণ:

ধরা যাক, আমাদের একটি User টেবিল এবং একটি Profile টেবিল রয়েছে। প্রতিটি User এর একটি Profile থাকবে, এবং প্রতিটি Profile শুধুমাত্র একটি User এর সাথে সম্পর্কিত থাকবে।

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# Base তৈরি
Base = declarative_base()

# User ক্লাস (One-to-One Relationship)
class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)

    # User এর সাথে সম্পর্কিত Profile
    profile = relationship("Profile", back_populates="user", uselist=False)

# Profile ক্লাস
class Profile(Base):
    __tablename__ = 'profiles'

    id = Column(Integer, primary_key=True)
    bio = Column(String)
    user_id = Column(Integer, ForeignKey('users.id'))

    # Profile এর সাথে সম্পর্কিত User
    user = relationship("User", back_populates="profile")

# SQLite ডেটাবেসের জন্য ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)

# টেবিল তৈরি
Base.metadata.create_all(engine)

# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()

# নতুন ইউজার এবং প্রোফাইল ইনসার্ট করা
new_user = User(name="John Doe", profile=Profile(bio="Software Developer"))
session.add(new_user)
session.commit()

# ডেটা ফেচ করা
user = session.query(User).first()
print(user.name, user.profile.bio)

এখানে, User এবং Profile এর মধ্যে One-to-One সম্পর্ক তৈরি করা হয়েছে। User এর একটি Profile আছে, এবং Profile শুধুমাত্র একটিই User এর সাথে সম্পর্কিত।


One-to-Many Relationship

One-to-Many সম্পর্ক একটি সম্পর্ক যেখানে একটি Parent টেবিলের একটি রেকর্ড একাধিক Child টেবিলের রেকর্ডের সাথে সম্পর্কিত থাকে। উদাহরণস্বরূপ, একটি Author এর অনেকগুলো Book থাকতে পারে।

উদাহরণ:

ধরা যাক, আমাদের একটি Author টেবিল এবং একটি Book টেবিল রয়েছে, যেখানে একটি Author এর অনেকগুলো Book থাকতে পারে।

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# Base তৈরি
Base = declarative_base()

# Author ক্লাস (One-to-Many Relationship)
class Author(Base):
    __tablename__ = 'authors'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)

    # Author এর সাথে সম্পর্কিত Book
    books = relationship("Book", back_populates="author")

# Book ক্লাস
class Book(Base):
    __tablename__ = 'books'

    id = Column(Integer, primary_key=True)
    title = Column(String)
    author_id = Column(Integer, ForeignKey('authors.id'))

    # Book এর সাথে সম্পর্কিত Author
    author = relationship("Author", back_populates="books")

# SQLite ডেটাবেসের জন্য ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)

# টেবিল তৈরি
Base.metadata.create_all(engine)

# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()

# নতুন Author এবং Books ইনসার্ট করা
new_author = Author(name="J.K. Rowling", books=[Book(title="Harry Potter and the Philosopher's Stone"), Book(title="Harry Potter and the Chamber of Secrets")])
session.add(new_author)
session.commit()

# ডেটা ফেচ করা
author = session.query(Author).first()
print(author.name)
for book in author.books:
    print(book.title)

এখানে, One-to-Many সম্পর্কটি Author এবং Book টেবিলের মধ্যে তৈরি করা হয়েছে। একটি Author এর অনেকগুলো Book থাকতে পারে।


Many-to-Many Relationship

Many-to-Many সম্পর্ক একটি সম্পর্ক যেখানে একাধিক Parent টেবিলের রেকর্ড অনেকগুলো Child টেবিলের রেকর্ডের সাথে সম্পর্কিত থাকে। উদাহরণস্বরূপ, একটি Student এর অনেকগুলো Course থাকতে পারে এবং একটি Course এর অনেকগুলো Student থাকতে পারে। এই সম্পর্কটি একটি association table এর মাধ্যমে তৈরি করা হয়।

উদাহরণ:

ধরা যাক, আমাদের একটি Student টেবিল এবং একটি Course টেবিল রয়েছে। একটি Student এর অনেকগুলো Course থাকতে পারে এবং একটি Course এর অনেকগুলো Student থাকতে পারে।

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Table
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# Base তৈরি
Base = declarative_base()

# Association table তৈরি
student_course = Table('student_course', Base.metadata,
    Column('student_id', Integer, ForeignKey('students.id')),
    Column('course_id', Integer, ForeignKey('courses.id'))
)

# Student ক্লাস (Many-to-Many Relationship)
class Student(Base):
    __tablename__ = 'students'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)

    # Student এর সাথে সম্পর্কিত Course
    courses = relationship("Course", secondary=student_course, back_populates="students")

# Course ক্লাস
class Course(Base):
    __tablename__ = 'courses'

    id = Column(Integer, primary_key=True)
    name = Column(String)

    # Course এর সাথে সম্পর্কিত Student
    students = relationship("Student", secondary=student_course, back_populates="courses")

# SQLite ডেটাবেসের জন্য ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)

# টেবিল তৈরি
Base.metadata.create_all(engine)

# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()

# নতুন Student এবং Courses ইনসার্ট করা
student1 = Student(name="Alice", courses=[Course(name="Math"), Course(name="Science")])
student2 = Student(name="Bob", courses=[Course(name="Math")])
session.add(student1)
session.add(student2)
session.commit()

# ডেটা ফেচ করা
students = session.query(Student).all()
for student in students:
    print(student.name)
    for course in student.courses:
        print(course.name)

এখানে, Many-to-Many সম্পর্কটি Student এবং Course টেবিলের মধ্যে তৈরি করা হয়েছে। student_course association table এর মাধ্যমে এই সম্পর্কটি তৈরি করা হয়েছে।


সারাংশ

SQLAlchemy তে One-to-One, One-to-Many, এবং Many-to-Many সম্পর্ক তৈরি করা সম্ভব এবং এগুলো ডেটাবেসের টেবিলের মধ্যে সম্পর্ক স্থাপন করে। One-to-One সম্পর্কটি দুটি টেবিলের মধ্যে একে অপরের সাথে সম্পর্কিত রেকর্ড তৈরি করে, One-to-Many সম্পর্কটি একটি টেবিলের রেকর্ডকে অন্য একটি টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত করে এবং Many-to-Many সম্পর্কটি দুটি টেবিলের মধ্যে একাধিক রেকর্ডের সম্পর্ক স্থাপন করে, যা একটি association table এর মাধ্যমে হয়। SQLAlchemy ORM ব্যবহার করে এই সম্পর্কগুলো সহজে মডেল করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...