Функция
Задает ограничения на ссылки.
Формат
<определение ограничения на ссылки> : : = | ||||||||||
FOREIGN KEY (<обращающиеся столбцы>) | ||||||||||
<спецификация ссылок> | ||||||||||
<спецификация ссылок> : : = | ||||||||||
REFERENCES <таблица и столбцы, к которым обращаются> | ||||||||||
<обращающиеся столбцы> : : = | ||||||||||
<перечень столбцов ссылок> | ||||||||||
<таблица и столбцы, к которым обращаются> : : = | ||||||||||
<имя таблицы> [(<перечень столбцов ссылок>)] | ||||||||||
<перечень столбцов ссылок> : : = | ||||||||||
<имя столбца> [{, <имя столбца>} ...] |
Правила синтаксиса
1) Пусть "обращающаяся таблица" означает содержательную таблицу. Пусть "таблица, к которой обращаются", означает таблицу, идентифицированную <именем таблицы> в <таблице и столбцах, к которым обращаются>. Пусть "обращающиеся столбцы" означают столбцы, идентифицированные <перечнем столбцов ссылок> в <обращающихся столбцах>.
2) Возможны следующие варианты:
а) Если <таблица и столбцы, к которым обращаются> задает <имя столбца> или <перечень столбцов ссылок>, то это <имя столбца> или <перечень столбцов ссылок> должны быть идентичными <списку уникальных столбцов> в <определении ограничения уникальности> таблицы, к которой обращаются. Пусть "столбцы, к которым обращаются", обозначают столбцы, идентифицированные этим <именем столбца> или <перечнем столбца ссылок>.
b) Если <таблица и столбец, к которым обращаются> не задают <имя столбца> или <перечень столбцов ссылок>, то <определение таблицы> для таблицы, к которой обращаются, будет содержать <определение ограничения уникальности>, которое задает PRIMARY KEY. Пусть "столбцы, к которым обращаются" обозначают столбцы, идентифицированные <перечнем уникальных столбцов> в этом <определении ограничения уникальности>.
3) Применимые <привилегии> для <имени таблицы> должны включать REFERENCES для каждого столбца, к которому обращаются.
Примечание - "Применимые <привилегии>" для <имени таблицы> определены в 6.10 "<определение привилегий>".
4) Таблица, к которой обращаются, должна быть базовой.
5) Каждый обращающийся столбец должен идентифицировать столбец обращающейся таблицы, и одно и то же имя столбца не должно идентифицироваться более одного раза. Каждый столбец, к которому обращаются, должен идентифицировать столбец таблицы, к которой обращаются, и одно и то же имя столбца не должно идентифицироваться более одного раза.
6) <Обращающиеся столбцы> должны содержать то же самое количество имен столбцов, что и <таблица и столбцы, к которым обращаются>. -й столбец, идентифицированный в <обращающихся столбцах>, соответствует -му столбцу, идентифицированному в <таблице и столбцах, к которым обращаются>. Тип данных каждого обращающегося столбца должен быть таким же, как и тип данных соответствующего столбца, к которому обращаются.
Общие правила
1) Обращающаяся таблица и таблица, к которой обращаются, удовлетворяют <определению ограничения на ссылки>, если и только если для каждой строки в обращающейся таблице либо:
a) все обращающиеся столбцы в строке содержат ненулевые значения, и в таблице, к которой обращаются, существует строка такая, что для каждого обращающегося столбца значение обращающегося столбца равно значению соответствующего столбца, к которому обращаются;
или
b) какой-то обращающийся столбец в строке содержит нулевое значение.