Согласно «SQL-99 Complete, Really» Питера Гулутзана и Труди Пельцер, имена ограничений определяются по схеме , в которой они живут, и таблица, на которую влияет ограничение, должна находиться в одной и той же таблице. схемы. Но имя ограничения не определяется этим именем таблицы. Имя ограничения должно быть уникальным в пределах схемы, в которой оно находится.
- ДА:
myschema.some_primary_key
- NO:
myschema.mytable.some_primary_key
Что касается "почему", то это так, я предполагаю, что это связано с неким ограничением в SQL-99, которое называется ASSERTION
. Утверждение не «принадлежит» одной таблице, как верно для первичного ключа, внешнего ключа и проверочных ограничений. Утверждение объявляет условие, которое должно быть истинным для успешного выполнения любого INSERT/UPDATE/DELETE
, и утверждение может ссылаться на несколько таблиц. Не имеет смысла квалифицировать эти имена ограничений по какой-либо таблице.
Я не знаю, сколько брендов СУБД реализуют утверждения SQL (на самом деле я не знаю ни одного), но они могли бы также соответствовать стандартным правилам SQL для имен ограничений, поэтому в будущем они могут выбрать реализовать функцию утверждения в соответствии со стандартом.