Какие существуют типы связей в базе данных?
Типы связей (relationships) определяют, как записи одной таблицы соотносятся с записями другой таблицы. Существует три основных типа связей.
Один к одному (1:1)
Каждой записи в таблице A соответствует ровно одна запись в таблице B, и наоборот.
Пример: каждый сотрудник имеет один пропуск, каждый пропуск принадлежит одному сотруднику.
Пример
CREATE TABLE employees (
id BIGINT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE passes (
id BIGINT PRIMARY KEY,
employee_id BIGINT UNIQUE NOT NULL,
card_number VARCHAR(20),
FOREIGN KEY (employee_id) REFERENCES employees(id)
);
Применение: разделение таблицы для вынесения редко используемых или конфиденциальных данных.
Один ко многим (1:N)
Каждой записи в таблице A может соответствовать несколько записей в таблице B, но каждая запись в B связана только с одной записью в A.
Пример: в каждом университете несколько факультетов, но каждый факультет принадлежит одному университету.
Пример
CREATE TABLE universities (
id BIGINT PRIMARY KEY,
name VARCHAR(200)
);
CREATE TABLE faculties (
id BIGINT PRIMARY KEY,
university_id BIGINT NOT NULL,
name VARCHAR(200),
FOREIGN KEY (university_id) REFERENCES universities(id)
);
Это самый распространённый тип связи в реляционных базах данных.
Многие ко многим (M:N)
Каждой записи в таблице A может соответствовать несколько записей в B, и наоборот. Реализуется через промежуточную (связующую) таблицу.
Пример: один студент может посещать несколько курсов, один курс может посещать несколько студентов.
Пример
CREATE TABLE students (
id BIGINT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE courses (
id BIGINT PRIMARY KEY,
title VARCHAR(200)
);
-- Связующая таблица
CREATE TABLE student_courses (
student_id BIGINT NOT NULL,
course_id BIGINT NOT NULL,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
Сводная таблица
| Тип связи | FK в дочерней таблице | Промежуточная таблица | Пример |
|---|---|---|---|
| 1:1 | Да + UNIQUE | Нет | Сотрудник — пропуск |
| 1:N | Да | Нет | Университет — факультеты |
| M:N | Нет | Да | Студенты — курсы |
На собеседовании: интервьюер ожидает, что кандидат объяснит, как реализуется связь M:N (через промежуточную таблицу), и знает, что 1:1 на практике используется редко (обычно для разделения данных по частоте доступа или безопасности).