оператор RESTRICT (WHERE) не имеет никакого отношения к ссылочным ограничениям!
цитата из C.J. Date's Словарь реляционных баз данных
внешний ключ Пусть R1 и R2 будут relvars, не обязательно различающимися, и пусть K будет ключом для R1 . Пусть FK будет подмножеством заголовка R2 таким, что существует возможно пустая последовательность переименований атрибутов, которая отображает K в K ' (скажем), где K ' и FK содержат точно такие же атрибуты. Тогда FK - это внешний ключ
ссылочная целостность В общем, правило, что ссылочный кортеж не может существовать, если соответствующий ссылочный кортеж не существует. Точнее, пусть FK будет некоторым внешним ключом в некоторой ссылке relvar R2 ; пусть K будет соответствующим ключом в соответствующем ссылочном relvar R1 , и пусть K ' будет получено из K , как описано в внешний ключ . Тогда правило ссылочной целостности требует, чтобы никогда не было времени, в которое существует значение FK в R2 , которое для некоторых не является значением K ' ( обязательно уникальный) кортеж в R1 в данный момент. R1 и R2 здесь указаны relvar и ссылочный relvar, соответственно, и ограничение между ними является ссылочным ограничением.
Примеры : в relvar SP {S#}
и {P#}
- внешние ключи, соответствующие ключам {S#}
и {P#}
в relvars S и P соответственно. Обратите внимание, что ключ в указанном relvar, который соответствует данному внешнему ключу, не обязательно должен быть первичным ключом.