Relations (One-to-Many, Many-to-Many) এবং Associations গাইড ও নোট

Web Development - ওয়েব২পাই (Web2Py) - Models এবং Database Interaction
208

Web2Py-তে Relations এবং Associations হল ডাটাবেস সম্পর্কের মৌলিক ধারণা, যা ডেটা মডেলিংয়ের জন্য ব্যবহৃত হয়। One-to-Many এবং Many-to-Many সম্পর্কগুলি ডাটাবেসের মধ্যে টেবিলগুলোর সম্পর্ক স্থাপন করতে সাহায্য করে। Web2Py তে এই সম্পর্কগুলি DAL (Database Abstraction Layer) এর মাধ্যমে খুব সহজে ম্যানেজ করা যায়। এই সম্পর্কগুলি অ্যাপ্লিকেশনের মধ্যে ডেটা সংগঠিত করার জন্য খুব গুরুত্বপূর্ণ।


One-to-Many সম্পর্ক

One-to-Many সম্পর্ক তখন তৈরি হয়, যখন একটি টেবিলের এক রেকর্ড একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে। যেমন, একটি ক্যাটেগরি একাধিক বই থাকতে পারে, কিন্তু প্রতিটি বই শুধুমাত্র একটি ক্যাটেগরির সাথে সম্পর্কিত থাকবে।

Web2Py তে One-to-Many সম্পর্ক তৈরি করা

DAL (Database Abstraction Layer) ব্যবহার করে Web2Py তে One-to-Many সম্পর্ক তৈরি করা যায়। এই সম্পর্কটি তৈরি করতে দুটি টেবিলের মধ্যে একটি ফিল্ডের মাধ্যমে সম্পর্ক স্থাপন করা হয়।

উদাহরণ:

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

  1. models/db.py:

    db = DAL('sqlite://storage.db')
    
    # Category টেবিল
    db.define_table('category',
                    Field('name', 'string'))
    
    # Book টেবিল - One-to-Many সম্পর্কের জন্য category_id ফিল্ড যুক্ত করা হচ্ছে
    db.define_table('book',
                    Field('title', 'string'),
                    Field('author', 'string'),
                    Field('category_id', db.category))  # category_id এখানে One-to-Many সম্পর্ক স্থাপন করছে
    
  2. controllers/default.py:

    def index():
        categories = db().select(db.category.ALL)
        return dict(categories=categories)
    
  3. views/default/index.html:

    <h1>Categories</h1>
    <ul>
    {{for category in categories:}}
        <li>{{=category.name}}</li>
        <ul>
        {{for book in db(db.book.category_id == category.id).select():}}
            <li>{{=book.title}} by {{=book.author}}</li>
        {{pass}}
        </ul>
    {{pass}}
    </ul>
    

এখানে, category_id ফিল্ডটি book টেবিলের মধ্যে One-to-Many সম্পর্ক স্থাপন করেছে। প্রতিটি বই শুধুমাত্র একটি ক্যাটেগরির সঙ্গে সম্পর্কিত হবে, এবং আমরা ক্যাটেগরি অনুযায়ী বইয়ের তালিকা দেখাতে পারব।


Many-to-Many সম্পর্ক

Many-to-Many সম্পর্ক তখন তৈরি হয়, যখন দুটি টেবিলের মধ্যে একাধিক রেকর্ড একে অপরের সাথে সম্পর্কিত থাকে। যেমন, একজন স্টুডেন্ট একাধিক কোর্স নিতে পারে এবং এক একটি কোর্সে একাধিক স্টুডেন্ট থাকতে পারে।

Web2Py তে Many-to-Many সম্পর্ক তৈরি করা

Many-to-Many সম্পর্ক তৈরি করতে একটি জংশন টেবিল ব্যবহার করা হয়, যা দুটি টেবিলের মধ্যে সম্পর্ক তৈরি করে। এই জংশন টেবিলটি সাধারণত দুটি টেবিলের প্রাইমারি কীগুলি ধারণ করে।

উদাহরণ:

ধরা যাক, আমাদের Student এবং Course টেবিল রয়েছে, এবং আমরা একটি Student-Course জংশন টেবিল তৈরি করব।

  1. models/db.py:

    db = DAL('sqlite://storage.db')
    
    # Student টেবিল
    db.define_table('student',
                    Field('name', 'string'))
    
    # Course টেবিল
    db.define_table('course',
                    Field('name', 'string'))
    
    # Student-Course জংশন টেবিল
    db.define_table('student_course',
                    Field('student_id', db.student),
                    Field('course_id', db.course))
    
  2. controllers/default.py:

    def index():
        students = db().select(db.student.ALL)
        courses = db().select(db.course.ALL)
        return dict(students=students, courses=courses)
    
    def enroll():
        student_id = request.vars.student_id
        course_id = request.vars.course_id
        db.student_course.insert(student_id=student_id, course_id=course_id)
        redirect(URL('index'))
    
  3. views/default/index.html:

    <h1>Students</h1>
    <ul>
    {{for student in students:}}
        <li>{{=student.name}}:
            <ul>
            {{for course in db(db.student_course.student_id == student.id).select(db.course.ALL):}}
                <li>{{=course.name}}</li>
            {{pass}}
            </ul>
        </li>
    {{pass}}
    </ul>
    
    <h1>Courses</h1>
    <ul>
    {{for course in courses:}}
        <li>{{=course.name}}</li>
    {{pass}}
    </ul>
    
  4. views/default/enroll.html:

    <h1>Enroll in Course</h1>
    <form action="{{=URL('enroll')}}" method="POST">
        <select name="student_id">
            {{for student in students:}}
                <option value="{{=student.id}}">{{=student.name}}</option>
            {{pass}}
        </select>
        <select name="course_id">
            {{for course in courses:}}
                <option value="{{=course.id}}">{{=course.name}}</option>
            {{pass}}
        </select>
        <button type="submit">Enroll</button>
    </form>
    

এখানে, Many-to-Many সম্পর্কটি student_course জংশন টেবিলের মাধ্যমে তৈরি করা হয়েছে, যা student_id এবং course_id এর সম্পর্ক স্থাপন করে। প্রতিটি স্টুডেন্ট একাধিক কোর্সে অংশগ্রহণ করতে পারে এবং প্রতিটি কোর্সে একাধিক স্টুডেন্ট থাকতে পারে।


Associations (সম্পর্ক)

Web2Py তে Associations হল এমন সম্পর্ক যা টেবিলগুলোর মধ্যে বিভিন্ন রকমের সম্পর্ক স্থাপন করে এবং ডেটা ম্যানিপুলেশন সহজ করে। One-to-Many এবং Many-to-Many সম্পর্কের পাশাপাশি, Web2Py তে Relationship Field ব্যবহার করে আপনি বিভিন্ন ধরনের সম্পর্ক স্থাপন করতে পারেন।

উদাহরণ:

  1. One-to-Many Association: আমরা যখন একটি টেবিলের মধ্যে অন্য একটি টেবিলের ফিল্ড রেফারেন্স করি, তখন আমরা একটি One-to-Many সম্পর্ক তৈরি করি। যেমন, book টেবিলের category_id ফিল্ড, যা category টেবিলের এক রেকর্ডের সাথে সম্পর্কিত।
  2. Many-to-Many Association: Many-to-Many সম্পর্কের জন্য একটি জংশন টেবিল ব্যবহার করা হয়, যা দুটি টেবিলের মধ্যে সম্পর্ক তৈরি করে।

সারাংশ

Web2Py তে Relations (One-to-Many, Many-to-Many) এবং Associations হল ডেটাবেসের টেবিলগুলোর মধ্যে সম্পর্ক তৈরি করার গুরুত্বপূর্ণ ধারণা। One-to-Many সম্পর্ক তৈরি করতে একটি টেবিলের প্রাইমারি কীর মাধ্যমে অন্য টেবিলের সাথে সম্পর্ক স্থাপন করা হয়, এবং Many-to-Many সম্পর্ক তৈরি করতে একটি জংশন টেবিল ব্যবহার করা হয়। Web2Py তে এই সম্পর্কগুলি খুব সহজে DAL (Database Abstraction Layer) এর মাধ্যমে ম্যানেজ করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...