Ответ
Внешний ключ (Foreign Key, FK) — это ограничение целостности в реляционной базе данных, которое обеспечивает ссылочную целостность между данными в двух таблицах. Оно связывает столбец (или группу столбцов) в одной таблице (дочерней) с первичным ключом (Primary Key, PK) или уникальным ключом в другой таблице (родительской).
Основная роль: Гарантировать, что каждое значение в столбце с внешним ключом соответствует существующей записи в родительской таблице, предотвращая появление "висячих" ссылок.
Синтаксис создания (SQL):
-- Родительская таблица
CREATE TABLE Customers (
customer_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
-- Дочерняя таблица с внешним ключом
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
order_date DATE NOT NULL,
customer_id INT,
-- Определение внешнего ключа
CONSTRAINT fk_order_customer
FOREIGN KEY (customer_id)
REFERENCES Customers(customer_id)
ON DELETE CASCADE -- Действие при удалении в родительской таблице
ON UPDATE NO ACTION -- Действие при обновлении PK в родительской таблице
);
Ключевые аспекты внешнего ключа:
- Ссылочные действия (Referential Actions): Определяют поведение при изменении или удалении записи в родительской таблице.
CASCADE: Удалить/обновить связанные записи в дочерней таблице.SET NULL: УстановитьNULLв столбце внешнего ключа (если он допускаетNULL).RESTRICT/NO ACTION: Запретить операцию, если существуют зависимые записи.SET DEFAULT: Установить значение по умолчанию.
- Индексы: Во многих СУБД (MySQL, SQL Server) создание внешнего ключа автоматически создаёт индекс на столбцах дочерней таблицы, что ускоряет проверки целостности и операции
JOIN. В других (PostgreSQL) индекс нужно создавать явно. - Составные внешние ключи: Можно ссылаться на составной первичный ключ.
FOREIGN KEY (dept_id, project_id) REFERENCES Departments(id, project_id) - Проверка при операциях: Целостность проверяется при
INSERT,UPDATEв дочерней таблице и приUPDATE/DELETEв родительской.
Практическое значение: Внешние ключи — фундамент для построения связей "один-ко-многим" и "многие-ко-многим" (через таблицу связи), что является основой нормализованной структуры базы данных.