Поиск…


Создание таблицы с внешним ключом

В этом примере у нас есть существующая таблица 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 в столбце «Внешний ключ» не вызывает ошибки.
  • Ограничения внешнего ключа могут ссылаться на таблицы в одной базе данных.
  • Ограничения внешнего ключа могут ссылаться на другой столбец в той же таблице (самореклама).


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow