Назад к вопросам
Junior
68
questionbank
В чем заключается идея внешнего ключа?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Внешний ключ (Foreign Key) — это столбец (или набор столбцов) в одной таблице, который ссылается на первичный ключ (или уникальный ключ) в другой таблице. Он устанавливает связь между двумя таблицами, обеспечивая ссылочную целостность данных.
Идея заключается в следующем:
- Связывание таблиц: Позволяет связать строки из одной таблицы с соответствующими строками в другой таблице на основе общего значения.
- Поддержание целостности: Гарантирует, что ссылка во внешней таблице указывает на существующую строку в родительской таблице (таблице, на которую ссылается внешний ключ). Например, нельзя удалить пользователя, на которого ссылаются записи заказов, без предварительного удаления или обновления этих заказов.
- Ограничение операций: Определяет, что происходит с данными во вторичной таблице при изменении или удалении данных в родительской таблице. Возможны следующие действия (constraints):
ON DELETE CASCADE: Автоматическое удаление зависимых строк во вторичной таблице.ON UPDATE CASCADE: Автоматическое обновление зависимых строк во вторичной таблице.ON DELETE SET NULL: Установка значения внешней ключа в NULL при удалении родительской строки (если столбец допускает NULL).ON UPDATE SET NULL: Установка значения внешней ключа в NULL при обновлении родительской строки.ON DELETE RESTRICT: Предотвращение удаления родительской строки, если на нее ссылаются зависимые строки.ON UPDATE RESTRICT: Предотвращение обновления родительской строки.NO ACTION(по умолчанию в некоторых СУБД): Схоже с RESTRICT, но проверка откладывается до конца транзакции.
- Моделирование отношений: Позволяет моделировать различные типы отношений между сущностями в базе данных, например, "один-ко-многим" или "многие-ко-многим" (через промежуточную таблицу).
Пример создания внешнего ключа в SQL:
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);
CREATE TABLE Customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(255)
);