Назад к вопросам
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")