Как определить множество отношений для одной или нескольких таблиц?

#python #sqlalchemy #orm #relationship

Вопрос:

введите описание изображения здесь

  1. Один факультет предлагает множество курсов(предметов) — один ко многим
  2. На одной кафедре много профессоров — один ко многим
  3. Одну кафедру возглавляет один профессор — один к одному
  4. Один курс может быть записан многими студентами, и один студент может записаться на множество курсов — от многих до многих
  5. Один курс преподает только один профессор, но один профессор преподает много курсов — от многих до одного

models.py

 from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from sqlalchemy.sql.schema import Table

from .database import Base


class Department(Base):
    __tablename__ = "department"
    id = Column(Integer, primary_key=True, index=True)
    department_name = Column(String)
    hod_id = Column(Integer, primary_key=True)

    professor = relationship("Professors", backref="department")


class Professor(Base):
    __tablename__ = "professor"
    id = Column(Integer, primary_key=True, index=True)
    professor_name = Column(String)
    hod_id = Column(Integer, ForeignKey("hod.id"))
    professor_id = Column(Integer, ForeignKey("professor.id"))


association_table = Table(
    "association_table",
    Column("course_id", Integer, ForeignKey("course.course_id")),
    Column("student_id", Integer, ForeignKey("student.student_id")),
)


class Student(Base):
    __tablename__ = "student"
    student_id = Column(Integer, primary_key=True, index=True)
    student_name = Column(String)


class Course(Base):
    __tablename__ = "course"
    course_id = Column(Integer, primary_key=True, index=True)
    course_name = Column(String, unique=True)
    students = relationship("Student", secondary=association_table)
 

How do I define two or more relationships for a single table? How do I write models.py for my ER Diagram and I’m confused if departments are one to many relationships or should it be many to many?