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 ça:
ALTER TABLE my_schema.my_table ADD (
CONSTRAINT my_fk
FOREIGN KEY (my_id)
REFERENCES other_schema.other_table(other_id)
)
Puisque 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?
5 réponses
Aucun problème à faire cela. Les schémas n'ont vraiment aucun impact lors de l'établissement de relations de clés étrangères entre les tables. Juste s'assurer que les personnes appropriées ont les autorisations nécessaires pour le schéma que vous souhaitez utiliser.
Cela fonctionnera exactement comme une clé étrangère qui Référence une table dans son propre schéma.
Comme avec les clés étrangères ordinaires, n'oubliez pas d'indexer my_id
si la clé parent est jamais 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).
La seule chose que j'ai rencontrée était de m'assurer que la permission existait sur l'autre schéma. Les choses habituelles-si ces autorisations disparaissent pour une raison quelconque, vous en entendrez parler.
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, ou même 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). Sauf si vous voulez être appelé au milieu de la nuit, je recommande de leur donner la possibilité de supprimer temporairement votre contrainte. (J'ai aussi recommandez 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/schéma, vous voulez bien jouer avec les autres. L'indice que Vincent a mentionné est une autre partie de cela.
Une raison pour laquelle cela peut causer des problèmes est que vous devez faire attention à supprimer les choses dans le bon ordre. Cela peut être bon ou mauvais selon l'importance de ne jamais avoir d'orphelins dans vos tables.