Ответ
Связи в реляционных БД — это фундаментальная концепция, реализуемая через внешние ключи (Foreign Keys, FK). Внешний ключ в одной таблице ссылается на первичный ключ (Primary Key, PK) в другой, что обеспечивает целостность данных и позволяет строить отношения.
Основные типы связей:
-
Один-ко-многим (1:N) — самый распространённый
- Пример: Один автор написал много книг.
- Реализация: В таблице
booksсоздаётся столбецauthor_id, который является внешним ключом, ссылающимся наidв таблицеauthors.CREATE TABLE authors ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL );
CREATE TABLE books ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(255) NOT NULL, author_id INT NOT NULL, FOREIGN KEY (author_id) REFERENCES authors(id) ON DELETE CASCADE );
* `ON DELETE CASCADE` означает, что при удалении автора все его книги будут удалены автоматически. Другие варианты: `RESTRICT` (запретить удаление), `SET NULL`. -
Многие-ко-многим (M:N)
- Пример: Студенты записываются на курсы. Один студент может быть на многих курсах, один курс может иметь много студентов.
- Реализация: Требуется промежуточная таблица связи (junction table), которая содержит два внешних ключа.
CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(100)); CREATE TABLE courses (id INT PRIMARY KEY, title VARCHAR(100));
CREATE TABLE student_courses ( student_id INT, course_id INT, PRIMARY KEY (student_id, course_id), -- Составной первичный ключ FOREIGN KEY (student_id) REFERENCES students(id), FOREIGN KEY (course_id) REFERENCES courses(id) );
-
Один-к-одному (1:1)
- Пример: Пользователь и его паспортные данные.
- Реализация: Внешний ключ можно разместить в любой из таблиц, часто с добавлением уникального ограничения (
UNIQUE), чтобы запретить дублирование связи.CREATE TABLE users (id INT PRIMARY KEY, login VARCHAR(50)); CREATE TABLE passports ( id INT PRIMARY KEY, user_id INT UNIQUE NOT NULL, -- Уникальность обеспечивает связь 1:1 number VARCHAR(20), FOREIGN KEY (user_id) REFERENCES users(id) );
Зачем это нужно: Связи предотвращают появление "сиротствующих" записей (например, книги без автора) и позволяют СУБД эффективно выполнять операции JOIN для выборки связанных данных.