118 votes

Ajouter une relation de clé étrangère entre deux bases de données

J'ai deux tables dans deux bases de données différentes. Dans la table 1 (dans la base de données 1), il y a une colonne appelée colonne 1 et c'est une clé primaire. Maintenant, dans la table 2 (dans la base de données 2), il y a une colonne appelée colonne 2 et je veux l'ajouter en tant que clé étrangère.

J'ai essayé de l'ajouter et j'ai obtenu l'erreur suivante :

Msg 1763, Level 16, State 0, Line 1
Les références à des clés étrangères entre bases de données ne sont pas prises en charge. Clé étrangère Database2.table2.

Msg 1750, Level 16, State 0, Line 1
Impossible de créer une contrainte. Voir les erreurs précédentes.

Comment faire puisque les tables sont dans des bases de données différentes.

3voto

ManuelAtWork Points 873

La réalisation de l'intégrité référentielle entre les bases de données est une tâche difficile .

Voici une liste de mécanismes fréquemment utilisés :

  • Clonage et synchronisation : Les données référencées est régulièrement cloné/fusionné dans le base de données de référencement . Cette méthode peut convenir si les données référencées changent rarement. Vous vous retrouvez avec deux copies physiques des mêmes données et vous avez besoin d'un processus fiable pour les synchroniser (par exemple, avec un pipeline ETL).
  • Déclencheurs : Changements apportés à la le référencement des données et le données référencées sont prises en compte par les déclencheurs SQL, qui garantissent l'intégrité référentielle. Cependant, les déclencheurs peuvent être lents et ne pas se déclencher lors d'une restauration de la base de données. Il n'est pas inutile d'exécuter des contrôles de cohérence programmés dans le cadre de la surveillance des opérations. L'accès en écriture à la base de données référencée est nécessaire pour l'installation et la maintenance du déclencheur.
  • Contrôler les contraintes : SQL-Server propose des contraintes définies par l'utilisateur, qui garantissent que chaque ligne satisfait à une condition donnée. On peut exploiter cette fonctionnalité en écrivant une fonction définie par l'utilisateur qui vérifie l'existence d'une ligne dans la base de données données référencées puis utiliser cette fonction comme prédicat de CHECK dans le tableau de référence . Cela ne permet pas de prendre en compte les changements dans les données référencées. Il s'agit d'une solution spécifique au SGBDR, mais qui fonctionne au-delà des limites du serveur (par exemple, en utilisant des serveurs liés). C'est un bon choix pour référencer des identifiants uniques au niveau mondial, tels que les codes d'article dans le système ERP d'une entreprise, qui ne sont jamais supprimés ou réattribués.
  • Repenser l'architecture de la base de données : Lorsque tous les mécanismes ci-dessus ne sont pas satisfaisants, plusieurs bases de données peuvent être fusionnées en une seule base de données. Les noms des bases de données d'origine peuvent devenir des noms de schémas, ce qui permet de regrouper efficacement les objets des bases de données.

0voto

Jan Points 10374

Comme l'indique le message d'erreur, cette méthode n'est pas prise en charge par le serveur SQL. La seule façon de garantir l'intégrité référentielle est d'utiliser des déclencheurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X