Связь (relationship) в базе данных — это способ логического соединения двух или более таблиц на основе общих атрибутов (полей). Она определяет, как данные в одной таблице соотносятся с данными в другой. Связи являются фундаментальным понятием в реляционных базах данных и обеспечивают целостность данных, уменьшают избыточность и позволяют эффективно организовывать информацию.
Один к одному (1:1)
Каждая запись в таблице A связана ровно с одной записью в таблице B, и наоборот.
CREATE TABLE users (
user_id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE passports (
passport_id INT PRIMARY KEY,
user_id INT UNIQUE,
number VARCHAR(20),
FOREIGN KEY (user_id) REFERENCES users(user_id)
);
Один ко многим (1:N)
Запись в таблице A может быть связана с несколькими записями в таблице B, но запись в таблице B — только с одной записью в таблице A.
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
Многие ко многим (M:N)
Записи в таблице A могут быть связаны с несколькими записями в таблице B, и наоборот. Для реализации такой связи используется промежуточная таблица (junction table).
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE courses (
course_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(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
ON DELETE CASCADE
или ON UPDATE SET NULL
.Каскадное удаление:
FOREIGN KEY (dept_id) REFERENCES departments(dept_id) ON DELETE CASCADE
При удалении записи в departments
автоматически удаляются связанные записи в employees
.
Ограничение уникальности:
FOREIGN KEY (user_id) REFERENCES users(user_id) UNIQUE
Гарантирует, что связь будет один-к-одному.
Резюмируем: связи в базах данных — это механизм, который позволяет таблицам "общаться" друг с другом, обеспечивая структурированность, целостность и эффективность хранения данных. Понимание связей критически важно для проектирования нормализованных и производительных баз данных.