Mam pełną bazę danych dla wielu dzierżawców z TenantID na wszystkich dzierżawionych bazach danych. Wszystko działa dobrze, z wyjątkiem tego, że teraz mamy obowiązek zezwalać najemowanym bazom danych na "łączenie się" z udostępnionymi danymi. Tak więc, na przykład, użytkownicy mogą tworzyć własne zapisy "Bank" i łączyć je z kontami, ale mogą również łączyć konta z "globalnymi" zapisami bankowymi, które są wspólne dla wszystkich najemców.Baza danych wielu lokatorów z niektórymi udostępnionymi danymi
muszę eleganckie rozwiązanie, które zachowuje integralność referencyjna
sposobów I mają pochodzić z tak daleko:
- Kopiowanie: wszystkie udostępniane dane są kopiowane do każdego lokatora, być może z " Flaga systemu. Zmiany w udostępnianych danych wiążą się z ogromnymi aktualizacjami dla wszystkich najemców. Prawdopodobnie najprostsze rozwiązanie, ale nie podoba mi się powielenie danych:
- Identyfikator specjalny: wszystkie łącza do udostępnionych danych używają specjalnych identyfikatorów (np. Negatywnych numerów identyfikacyjnych). Wskazują one, że TenantID nie ma być używany w relacji. Nie możesz użyć FK, aby wymusić to poprawnie, a na pewno nie możesz ponownie użyć identyfikatora najemców, jeśli masz DOWOLNE FK. Do integralności można użyć tylko wyzwalaczy.
- Oddzielne ID: wszystkie tabele, które mogą prowadzić do udostępnionych danych mają DWIE FK; jeden używa TenantID i łączy się z lokalnymi danymi, drugi nie używa TenantID i łączy do udostępnionych danych. Ograniczenie wskazuje, że jeden lub drugi ma być użyty, a nie oba. To chyba najbardziej "czyste" podejście, ale wydaje się po prostu ... brzydkie, ale może nie tak brzydkie jak inne.
Więc moje pytanie jest w dwóch częściach:
- Czy są jakieś opcje Nie rozważane?
- Czy ktoś miał doświadczenie z tymi opcjami i ma jakieś opinie na temat zalet/wad?