Le seul problème est qu'il n'y a pas vraiment de moyen pratique de faire respecter ces relations. Vous pouvez utiliser une cargaison de déclencheurs, ou stocker la table principale dans chaque base de données d'instance et les exposer simplement en tant que métadonnées au maître, en utilisant peut-être une vue.
Le plus gros inconvénient, je pense, a à voir avec le maintien de la précision et de la synchronisation des données, dans au moins trois scénarios au dessus de ma tête (qui peuvent toujours être un problème même si vous utilisez des déclencheurs):
- transactions inter-bases de données mal coordonnées - par exemple, une transaction ajoute une nouvelle ligne à maîtriser, transfère l'identité à une autre transaction, puis la première transaction est annulée.
- récupération après une seule défaillance de la base de données - une base de données se bloque, vous devez la restaurer à un moment donné, peut-être avant la fin des autres transactions réussies dans d'autres bases de données. Cela peut signifier que si une base de données d'instance doit revenir à une date antérieure, il manque des lignes attendues par le maître; si le maître doit revenir, il est possible que toutes les bases de données d'instance aient des valeurs qui n'existent pas dans le maître.
- cohérence de la sauvegarde en général - si vous avez besoin d'une reprise après sinistre, vous aurez du mal à conserver toutes vos sauvegardes complètes et de journaux transactionnellement cohérentes à un moment donné. Les instantanés du système de fichiers n'y contribuent pas, et même les groupes de disponibilité ne garantissent pas la cohérence transactionnelle entre les bases de données pour les bases de données d'un même groupe de disponibilité. Si vous avez un sinistre et devez restaurer vos bases de données sur un nouveau système, il n'y a aucun moyen d'être sûr qu'elles seront cohérentes sur le plan des transactions.
Cela dit, j'ai toujours été et serai toujours un fan de la séparation des locataires dans leurs propres bases de données, et je reconnais qu'il y a un risque associé à la base de données centrale - mais c'est nécessaire.
(En passant, vous devez utiliser des noms pour vos bases de données autres que master / instance. master
Dans SQL Server a certainement une signification explicite, et même en lisant mes propres mots ci-dessus, ils pourraient être ambigus. Idem pour instance
. Dans une vie antérieure, j'ai exécuté un multi et nous avons appelé la base de données centrale Control
et les bases de données des locataires, eh bien ,. Tenants
)