Назад к вопросам
Junior
74
questionbank

Как реализуется связь "один ко многим" в базе данных?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Для реализации связи "один ко многим" в реляционной базе данных используется первичный ключ (Primary Key) из "одной" таблицы и внешний ключ (Foreign Key) в "многих" таблицах.

Таблица "одной" стороны (например, "Отделы"):

dept_id (PK) dept_name
1 IT
2 Продажи

Таблица "многих" сторон (например, "Сотрудники"):

emp_id (PK) emp_name dept_id (FK)
101 Иван 1
102 Мария 1
103 Петр 2

Здесь dept_id в таблице "Сотрудники" является внешним ключом и ссылается на первичный ключ dept_id в таблице "Отделы". Каждому отделу может соответствовать множество сотрудников, но каждый сотрудник принадлежит только одному отделу.

В Python с использованием ORM, например SQLAlchemy, это выглядит следующим образом:

# modules imported

class Department(Base):
    __tablename__ = 'departments'

    id = Column(Integer, primary_key=True) # Primary Key
    name = Column(String)

    # Отношение "один ко многим" - Один отдел имеет много сотрудников
    employees = relationship("Employee", back_populates="department")


class Employee(Base):
    __tablename__ = 'employees'

    id = Column(Integer, primary_key=True) # Primary Key
    name = Column(String)
    department_id = Column(Integer, ForeignKey('departments.id')) # Foreign Key

    # Отношение "многие к одному" - Много сотрудников принадлежат одному отделу
    department = relationship("Department", back_populates="employees")