2009-06-06 6 views
12

Quelles sont les meilleures pratiques pour conserver l'intégrité référentielle sur plusieurs bases de données? car il n'y a pas de fonctions intégréesConservation de l'intégrité référentielle sur plusieurs bases de données

Ou est-il préférable de partitionner une seule base de données?

Mise à jour Voir l'exemple de Kevin ci-dessous. c'est ma situation. Ma base de données d'inventaire contient des tables qui référencent le employeeId dans la base de données des employés.

Ces bases de données sont actuellement maintenues à différents endroits (différents serveurs)

Répondre

5

Avec 2k05/2k08, il est préférable de partitionner une seule base de données. Vous avez tous les avantages de stocker des données comme dans plusieurs bases de données tout en étant capable d'utiliser les fonctions d'une base de données unique, comme les clés étrangères. Ceci étant dit, vous ne devriez pas tout conserver dans une seule base de données. Logiquement, lorsque les tables de groupes ne s'emboîtent pas, je les sépare normalement dans leurs propres bases de données. Par exemple, je ne combinerais pas nécessairement la base de données du système de commandes et la base de données de gestion des employés. Je suppose qu'il pourrait y avoir des raisons de le faire, mais je suis sûr que vous avez raison de séparer logiquement les magasins de données, le cas échéant.

Ce que vous devriez regarder est de savoir combien les deux bases de données interagissent. S'il y a beaucoup de champs qui rejoindraient les bases de données, alors je dirais que c'est probablement une bonne idée. Si c'est peut-être un ou deux champs liés à la table des employés, alors cela ne vaudra peut-être pas la peine de le faire. Votre autre option est, si le nombre de jointures est petit, de dupliquer les tables nécessaires dans la base de données d'inventaire, en particulier s'il s'agit d'une table et que les deux bases de données existantes sont volumineuses et plutôt complexes.

+0

qui est ma situation. Ma base de données d'inventaire contient des tables qui référencent le employeeId dans la base de données des employés. Ces bases de données sont actuellement gérées à différents emplacements (Différents serveurs) –

0

Je suppose que cela dépend de vos besoins, mais je serais probablement pencher vers une seule base de données. Pour le faire à travers les bases de données multiplbe, vous avez besoin d'un support de transactions distribuées.

1

Certainement mieux de partitition à un seul DB. Si vous aviez besoin de le faire, les déclencheurs aideraient (beurk). Ne pouvez-vous pas simplement partitionner la base de données en utilisant des schémas à la place (l'exemple de base de données AdventureWorks)?

0

Vous pouvez utiliser des déclencheurs pour faire le travail mais ....
Je crains que vous ne passiez énormément de temps à vous assurer que tout fonctionne correctement. Une base de données unique avec des tables partitionnées peut être meilleure. Avez-vous réellement besoin de plusieurs bases de données ou d'une seule base de données avec plusieurs groupes de fichiers répartis sur des périphériques physiques? Vous pouvez considérer cette option aussi. Matej

Questions connexes