J'ai une base de données multi-locataires complète avec TenantID sur toutes les bases de données hébergées. Tout ceci fonctionne bien, sauf que nous devons maintenant permettre aux bases de données hébergées de «lier» les données partagées. Ainsi, par exemple, les utilisateurs peuvent créer leurs propres enregistrements «Banque» et leur associer des comptes, mais ils peuvent également lier des comptes à des enregistrements bancaires «globaux» partagés entre tous les locataires.Base de données multi-locataires avec certaines données partagées
je besoin d'une solution élégante qui maintient l'intégrité référentielle
Les façons dont je suis venu avec jusqu'à présent:
- Copie: toutes les données partagées sont copiées à chaque locataire, peut-être avec un " Système ". Les modifications apportées aux données partagées impliquent d'importantes mises à jour pour tous les locataires. probablement la solution la plus simple, mais je n'aime pas la duplication des données
- ID de spécial: tous les liens vers des données partagées utilisent spécial ID (par exemple les numéros d'identification négatifs). Ceux-ci indiquent que le TenantID ne doit pas être utilisé dans la relation. Vous ne pouvez pas utiliser un FK pour l'appliquer correctement, et vous ne pouvez certainement pas réutiliser les ID dans les locataires si vous avez un FK. Seuls les déclencheurs peuvent être utilisés pour l'intégrité.
- ID séparés: toutes les tables pouvant être liées à des données partagées ont deux FK; l'un utilise le TenantID et les liens vers des données locales, l'autre n'utilise pas TenantID et des liens vers des données partagées. Une contrainte indique que l'un ou l'autre doit être utilisé, pas les deux. C'est probablement l'approche la plus "pure", mais elle semble juste ... moche, mais peut-être pas aussi laide que les autres.
Alors, ma question est en deux parties:
- Y a-t-il des options que je ne l'ai pas pris en compte?
- Est-ce que quelqu'un a eu l'expérience avec ces options et a des commentaires sur les avantages/inconvénients?