Я пытался создать внешний ключ на одной из моих таблиц, ссылаясь на столбец таблицы в другой схеме.
Что-то как этот:
ALTER TABLE my_schema.my_table ADD (
CONSTRAINT my_fk
FOREIGN KEY (my_id)
REFERENCES other_schema.other_table(other_id)
)
Так как у меня были необходимые предоставления, это хорошо работало.
Теперь интересно, существуют ли причины того, что не были сосланы на таблицы в другой схеме или чем-нибудь, чтобы быть осторожными относительно?
Нет проблем. Схемы действительно не оказывают влияния при создании внешних ключевых отношений между таблицами. Просто убедитесь, что соответствующие у людей есть разрешения, необходимые для схем, которые вы намерены использовать.
Без проблем. Схемы действительно не влияют на установление связей внешних ключей между таблицами. Просто убедитесь, что соответствующие пользователи имеют необходимые разрешения для схем, которые вы собираетесь использовать.
-121--1105173-можно заключить зарезервированные слова в квадратные скобки, чтобы избежать таких ошибок:
dbo.TableName.[Date]
-121--635802- Это будет работать точно как внешний ключ, который ссылается на таблицу в собственной схеме.
Как и в случае обычных внешних ключей, не забудьте индексировать мой _ id
, если родительский ключ когда-либо обновлялся или если вы удаляете записи из родительской таблицы (неиндексированные внешние ключи могут быть источником массового конфликта, и индекс обычно в любом случае полезен).
Одной из причин это может вызвать проблемы, вы должны быть осторожны, чтобы удалить вещи в правильном порядке. Это может быть хорошо или плохо в зависимости от того, насколько важно никогда не иметь сирот в ваших таблицах.
Единственное, что я столкнулся с тем, что разрешение существовало на другой схеме. Обычные вещи - если эти разрешения (ы) исчезают по какой-либо причине, вы услышите об этом.
, если вы в организации, где разные люди имеют власть над разными схемами Я думаю, что это хорошая практика, чтобы дать другую схему возможность отключить или даже падать и воссоздать ваше ограничение.
Например, им может потребоваться отбросить или обрезать их стол, а затем перезагрузить его для обработки некоторой (очень странной) проблемы поддержки. Если вы не хотите вызвать в середине ночи, я рекомендую дать им возможность временно удалить ваше ограничение. (Я также рекомендую установить свои собственные оповещения, чтобы вы узнали, если какие-либо ваши внешние ограничения отключены или сброшены). Когда вы пересекаете организационные / схемы, вы хотите хорошо играть с другими. Индекс, который упоминал Винсент, является еще одной частью этого.