web-dev-qa-db-fra.com

Référence de clé étrangère à la table dans un autre schéma

J'ai essayé de créer une clé étrangère sur l'une de mes tables, en référençant une colonne d'une table dans un schéma différent.

Quelque chose comme ca:

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

Étant donné que j'avais les subventions nécessaires, cela a bien fonctionné.

Maintenant, je me demande s'il y a des raisons de ne pas référencer les tables dans un schéma différent, ou quoi que ce soit à faire attention?

46
Peter Lang

Aucun problème pour cela. Les schémas n'ont vraiment aucun impact lors de l'établissement de relations de clé étrangère entre les tables. Assurez-vous simplement que les personnes appropriées disposent des autorisations nécessaires pour les schémas que vous souhaitez utiliser.

43
Randy Minder

Cela fonctionnera exactement comme une clé étrangère qui référence une table dans son propre schéma.

Comme pour les clés étrangères normales, n'oubliez pas d'indexer my_id si la clé parent est mise à jour ou si vous supprimez des entrées de la table parent (les clés étrangères non indexées peuvent être une source de conflit massif et l'index est généralement utile de toute façon).

5
Vincent Malgrat

Si vous êtes dans une organisation où différentes personnes ont autorité sur différents schémas, je pense que c'est une bonne pratique de donner à l'autre schéma la possibilité de désactiver, voire de supprimer et de recréer, votre contrainte.

Par exemple, ils pourraient avoir besoin de supprimer ou de tronquer leur table, puis de la recharger pour gérer un problème de support (très étrange). À moins que vous ne vouliez être appelé au milieu de la nuit, je vous recommande de leur donner la possibilité de supprimer temporairement votre contrainte. (Je recommande également de définir vos propres alertes afin que vous sachiez si l'une de vos contraintes externes est désactivée ou supprimée). Lorsque vous traversez des lignes d'organisation/de schéma, vous voulez bien jouer avec les autres. L'indice que Vincent a mentionné en est un autre élément.

5
Jim Hudson

La seule chose que j'ai rencontrée était de m'assurer que l'autorisation existait sur l'autre schéma. Les choses habituelles - si ces autorisations disparaissent pour une raison quelconque, vous en entendrez parler.

4
OMG Ponies

L'une des raisons pour lesquelles cela peut causer des problèmes est que vous devez faire attention à supprimer les éléments dans le bon ordre. Cela peut être bon ou mauvais selon l'importance de ne jamais avoir d'orphelins dans vos tables.

1
David Oneill