Я полагаю, вы спрашиваете об обязательном участии в ссылочной целостности.В принципе СУБД может поддерживать ограничения ссылочной целостности, которые являются обязательными «с обеих сторон» ограничения, а некоторые допускают это.
Использование синтаксиса Tutorial D:
CONSTRAINT non_empty_order (ORD{ordnum} = ORDITEM{ordnum});
Это ограничение целостноститребует, чтобы в каждом заказе была хотя бы одна строка в таблице ORDITEM и одна строка в таблице ORD.Таким образом, наличие любого заданного порядкового номера обязательно для обеих таблиц.
В СУБД SQL эквивалентное ограничение целостности будет следующим:
CREATE ASSERTION non_empty_order CHECK
(NOT EXISTS (SELECT ordnum FROM ORD EXCEPT SELECT ordnum FROM ORDITEM) AND
NOT EXISTS (SELECT ordnum FROM ORDITEM EXCEPT SELECT ordnum FROM ORD));
К сожалению, большинство СУБД SQL неНЕ ПОДДЕРЖИВАЮ.Даже если бы они это сделали, у SQL есть еще одно ограничение, которое мешает использовать такие ограничения.Большинство СУБД SQL, как правило, не позволяют обновлять несколько таблиц одновременно (функция, называемая множественное назначение ), поэтому, когда несколько таблиц ограничены таким образом, они обычно не могут быть обновлены без отключения ограничения на времяобновления.
Из-за этих ограничений большинство разработчиков баз данных SQL будут придерживаться синтаксиса ограничений FOREIGN KEY SQL для ссылочных ограничений.В SQL ограничение FOREIGN KEY не требует обязательного участия на стороне ссылки:
ALTER TABLE ORDITEM ADD CONSTRAINT fk_order FOREIGN KEY (ordnum) REFERENCES ORD (ordnum);
Это ограничение требует, чтобы каждый орднум в ORDITEM имел соответствующий порядок, но он не будет препятствовать созданию пустого порядка (имеется в виду порядковый номер в ORD, но не соответствующий порядковый номер в ORDITEM).
Поддержка СУБД SQL для ограничений целостности существенно не улучшалась за последние 20 лет или около того.Его ограничения стали второй натурой для многих разработчиков баз данных, которые привыкли оставлять бизнес-правила, которые не вписываются в модель SQL.Более сложные правила, как правило, реализуются в приложениях, механизмах правил или процедурах базы данных, поэтому у поставщиков СУБД не было особых оснований для улучшения поддержки ссылочной целостности на уровне механизма.