SQL
Иностранные ключи
Поиск…
Создание таблицы с внешним ключом
В этом примере у нас есть существующая таблица SuperHeros
.
В этой таблице содержится ID
первичного ключа.
Мы добавим новую таблицу, чтобы сохранить полномочия каждого супергероя:
CREATE TABLE HeroPowers
(
ID int NOT NULL PRIMARY KEY,
Name nvarchar(MAX) NOT NULL,
HeroId int REFERENCES SuperHeros(ID)
)
Столбец HeroId
является внешним ключом к таблице SuperHeros
.
Внешние ключи
Ограничения внешних ключей обеспечивают целостность данных, применяя эти значения в одной таблице, чтобы соответствовать значениям в другой таблице.
Примером того, где требуется внешний ключ, является: В университете курс должен принадлежать отделу. Код для этого сценария:
CREATE TABLE Department (
Dept_Code CHAR (5) PRIMARY KEY,
Dept_Name VARCHAR (20) UNIQUE
);
Вставьте значения со следующим утверждением:
INSERT INTO Department VALUES ('CS205', 'Computer Science');
Следующая таблица будет содержать информацию о предметах, предлагаемых отраслью информатики:
CREATE TABLE Programming_Courses (
Dept_Code CHAR(5),
Prg_Code CHAR(9) PRIMARY KEY,
Prg_Name VARCHAR (50) UNIQUE,
FOREIGN KEY (Dept_Code) References Department(Dept_Code)
);
(Тип данных внешнего ключа должен соответствовать типу данных ссылочного ключа.)
Ограничение внешнего ключа в столбце Dept_Code
допускает значения только в том случае, если они уже существуют в ссылочной таблице, Department
. Это означает, что если вы попытаетесь вставить следующие значения:
INSERT INTO Programming_Courses Values ('CS300', 'FDB-DB001', 'Database Systems');
база данных вызовет ошибку нарушения внешнего ключа, потому что CS300
не существует в таблице Department
. Но когда вы пробуете ключевое значение, которое существует:
INSERT INTO Programming_Courses VALUES ('CS205', 'FDB-DB001', 'Database Systems');
INSERT INTO Programming_Courses VALUES ('CS205', 'DB2-DB002', 'Database Systems II');
то база данных допускает эти значения.
Несколько советов по использованию внешних ключей
- Внешний ключ должен ссылаться на UNIQUE (или PRIMARY) ключ в родительской таблице.
- Ввод значения NULL в столбце «Внешний ключ» не вызывает ошибки.
- Ограничения внешнего ключа могут ссылаться на таблицы в одной базе данных.
- Ограничения внешнего ключа могут ссылаться на другой столбец в той же таблице (самореклама).