Ссылка внешнего ключа на таблицу в другой схеме - PullRequest
46 голосов
/ 19 января 2010

Я попытался создать внешний ключ для одной из моих таблиц, ссылаясь на столбец таблицы в другой схеме.

Примерно так:

ALTER TABLE my_schema.my_table ADD (
  CONSTRAINT my_fk
    FOREIGN KEY (my_id)
    REFERENCES other_schema.other_table(other_id)
)

Поскольку у меня были необходимые гранты, это работало нормально.

Теперь мне интересно, есть ли причины для того, чтобы не ссылаться на таблицы в другой схеме, или есть что-то, к чему следует быть осторожным?

Ответы [ 5 ]

43 голосов
/ 19 января 2010

Нет проблем с этим.Схемы действительно не влияют на установление отношений между внешними ключами между таблицами.Просто убедитесь, что соответствующие люди имеют разрешения, необходимые для схемы, которую вы собираетесь использовать.

5 голосов
/ 20 января 2010

Если вы находитесь в организации, где разные люди имеют полномочия над разными схемами, я думаю, что хорошей практикой будет дать другой схеме возможность отключить или даже удалить и воссоздать ваше ограничение.

Например, им может понадобиться удалить или обрезать свою таблицу, а затем перезагрузить ее, чтобы решить некоторые (очень странные) проблемы с поддержкой. Если вы не хотите, чтобы вам звонили посреди ночи, я рекомендую дать им возможность временно снять ваше ограничение. (Я также рекомендую настроить свои собственные предупреждения, чтобы вы знали, отключены ли какие-либо из ваших внешних ограничений). Когда вы пересекаете линии организации / схемы, вы хотите хорошо играть с другими. Индекс, который упоминал Винсент, является еще одной частью этого.

5 голосов
/ 19 января 2010

Это будет работать именно как внешний ключ, который ссылается на таблицу в своей собственной схеме.

Как и в случае с обычными внешними ключами, не забывайте индексировать my_id, если родительский ключ когда-либо обновляется или если вы удаляете записи из родительской таблицы (неиндексированные внешние ключи могут стать источником массовых конфликтов, а индекс обычно полезно в любом случае).

4 голосов
/ 19 января 2010

Единственное, с чем я столкнулся, это убедился, что разрешение существует для другой схемы. Обычные вещи - если эти разрешения исчезнут по какой-либо причине, вы услышите об этом.

1 голос
/ 19 января 2010

Одна из причин, по которой это может вызвать проблемы, заключается в том, что вы должны быть осторожны, чтобы удалять вещи в правильном порядке. Это может быть хорошо или плохо, в зависимости от того, как важно никогда не оставлять сирот в своих столах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...