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?

39
demandé sur Peter Lang 2010-01-19 19:59:56

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.

36
répondu Randy Minder 2010-01-19 17:03:51

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).

4
répondu Vincent Malgrat 2010-01-19 17:04:41

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.

4
répondu OMG Ponies 2010-01-19 17:12:05

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.

2
répondu Jim Hudson 2010-01-20 14:27:27

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.

0
répondu David Oneill 2010-01-19 17:03:48