Die Gestaltung einer robusten Datenbank-Schema für eine mehrinstanzfähige Umgebung erfordert eine grundlegende Veränderung des Denkens im Vergleich zu Einzelinstanz-Architekturen. Wenn mehrere Kunden, oder Instanzen, die gleiche zugrundeliegende Infrastruktur teilen, wird das Entitäts-Beziehungs-Diagramm (ERD) zum Bauplan für die Datenabgrenzung, Sicherheit und Leistungsfähigkeit. 🏗️ Ein schlecht gestaltetes ERD kann zu Datenlecks, Leistungsabfall und komplexen Migrationen führen. Dieser Leitfaden untersucht die strukturellen Feinheiten der Modellierung mehrinstanzfähiger Systeme, ohne sich auf spezifische Softwarewerkzeuge zu stützen, und konzentriert sich stattdessen auf architektonische Prinzipien.

Verständnis der zentralen Herausforderung bei gemeinsam genutzten Daten 🏢
Bei einer traditionellen Einzelinstanz-Architektur verfügt jeder Kunde über eine eigene isolierte Datenbank. Die Beziehung zwischen der Anwendung und den Daten ist ein-zu-eins. In einem mehrinstanzfähigen System ist die Beziehung jedoch ein-zu-viele. Die Anwendung versorgt mehrere Instanzen aus einem gemeinsam genutzten Ressourcenpool. Das ERD muss den Kontext der Instanz explizit in jede Abfrage und Transaktion einbetten.
Das primäre Ziel ist sicherzustellen, dass Instanz A niemals Daten von Instanz B sieht, selbst wenn sie die exakt gleiche Tabelle abfragen. Dies wird oft als logische Isolation bezeichnet. Das ERD muss diese Isolation durch die Schema-Design-Prinzipien nativ unterstützen, anstatt sich ausschließlich auf Anwendungslogik zu verlassen. 🔒
Isolationsmodelle und ihre Auswirkungen auf das Schema-Design 🏗️
Es gibt drei Hauptmodelle zur Isolation von Instanz-Daten. Jedes Modell bestimmt einen deutlich anderen Ansatz für das Entitäts-Beziehungs-Diagramm. Die falsche Wahl eines Modells in der frühen Entwurfsphase kann später eine kostspielige Neugestaltung erzwingen.
1. Datenbank pro Instanz (physische Isolation)
Bei diesem Modell erhält jede Instanz ihre eigene physische Datenbank-Instanz. Das ERD bleibt identisch mit der Einzelinstanz-Architektur. Jede Tabelle existiert unabhängig in ihrem eigenen Datenbankcontainer.
- Vorteile:Maximale Sicherheit und Isolation. Datenlecks sind zwischen Instanzen physisch unmöglich.
- Nachteile:Hohe Betriebskosten. Die Verwaltung von Hunderten oder Tausenden von Datenbanken ist komplex.
- Auswirkungen auf das Schema:Das ERD muss keine Spalte für einen Instanz-Identifikator enthalten, da die Datenbank selbst als Identifikator fungiert.
2. Schema pro Instanz (logische Isolation)
Mehrere Instanzen teilen sich eine einzige Datenbank, aber jede Instanz verfügt über ihr eigenes Schema (Namensraum) innerhalb dieser Datenbank. Das ERD bleibt im Wesentlichen identisch mit der Einzelinstanz-Version, wobei jedoch der Schema-Name je nach Instanz variiert.
- Vorteile:Bessere Isolation als bei gemeinsam genutzten Tabellen. Einfacher zu verwalten als einzelne Datenbanken.
- Nachteile:Die Abfragekomplexität steigt, da die Anwendung die Schemas dynamisch wechseln muss.
- Auswirkungen auf das Schema:Das ERD benötigt keine Spalte für eine Instanz-ID in jeder Tabelle. Stattdessen übernimmt der Kontext der Datenbankverbindung die Trennung.
3. Gemeinsames Schema, gemeinsame Tabellen (logische Isolation)
Dies ist das häufigste Modell für SaaS-Anwendungen. Alle Instanzen teilen sich exakt die gleichen Tabellen. Das ERD muss so modifiziert werden, dass in jeder relevanten Zeile ein eindeutiger Identifikator für jede Instanz enthalten ist.
- Vorteile:Niedrigste Kosten und Betriebsaufwand. Einfacher, globale Analysen durchzuführen.
- Nachteile:Höchstes Risiko für Datenlecks, falls die Logik versagt. Die Leistung kann leiden, wenn die Tabellen groß werden.
- Auswirkungen auf das Schema: Jede Tabelle muss eine Spalte enthalten
tenant_idSpalte. Fremdschlüssel müssen auf diese Spalte verweisen, um die Integrität zu gewährleisten.
Entwerfen des Shared Schema ERD 🔑
Beim Übernehmen des Shared Schema-Modells erfordert das ERD spezifische Änderungen, um die Datenintegrität und Sicherheit zu gewährleisten. Dieser Abschnitt beschreibt die kritischen Komponenten, die in Ihren Diagrammen enthalten sein müssen.
Die Spalte für die Mandantenkennung
Jede Tabelle, die datenspezifische Benutzerdaten enthält, muss eine Spalte enthalten, um den Besitzer dieser Daten zu identifizieren. Diese Spalte wird typischerweise alstenant_id oderorganization_id.
- Datentyp: Sollte eine Ganzzahl oder eine UUID sein. Ganzzahlen sind im Allgemeinen schneller für Joins.
- Nicht-Null-Beschränkung: Diese Spalte sollte niemals NULL sein. Ein NULL-Wert impliziert, dass die Daten niemandem gehören, was gegen den Multitenant-Vertrag verstößt.
- Standardwert: In einigen Anwendungen könnte der Standardwert auf Anwendungsebene festgelegt werden, aber das Datenbankschema sollte die Anwesenheit dieses Werts durchsetzen.
Fremdschlüsselbeziehungen
Wenn Tabellen miteinander verknüpft sind, muss die Beziehung die Mandantengrenzen respektieren. Ein häufiger Fehler ist die Erstellung einer Beziehung zwischen einer globalen Tabelle (z. B. einem Produktkatalog) und einer mandantenbezogenen Tabelle (z. B. einer Bestellung).
- Globale Tabellen: Tabellen wie
ProdukteoderKategorienkönnten gemeinsam genutzt werden. Sie benötigen keinetenant_id. - Mandantentabellen: Tabellen wie
BestellungenoderBenutzermuss eine habentenant_id. - Verknüpfungslogik: Beim Verknüpfen einer globalen Tabelle mit einer Mandantentabelle muss die Verknüpfungsbedingung die
tenant_idÜbereinstimmung enthalten, um eine Datenexposition über Mandanten hinweg zu verhindern.
Vergleich von Isolationsstrategien 📊
Das Verständnis der Kompromisse ist entscheidend für die Auswahl der richtigen ERD-Struktur. Die folgende Tabelle zeigt die wesentlichen Unterschiede zwischen den primären Isolationsstrategien auf.
| Strategie | Isolierungsstufe | Kosten | Verwaltungskomplexität | Schema-Anforderung |
|---|---|---|---|---|
| Datenbank pro Mandant | Physisch | Hoch | Hoch | Standard (keine Mandanten-ID) |
| Schema pro Mandant | Logisch | Mittel | Mittel | Standard (Schema-Name) |
| Geteiltes Schema | Zeilenbasiert | Niedrig | Niedrig | Erfordert Spalte für Mandanten-ID |
Leistungsaspekte bei der ERD-Design 🚀
Wenn sich Daten ansammeln, kann die Leistung einer gemeinsam genutzten Schema abnehmen. Das ERD muss Indexstrategien unterstützen, die auf tenant-spezifische Abfragen optimiert sind.
Indexstrategien
Ohne eine geeignete Indizierung könnte eine Abfrage zur Abrufung von Daten für einen Mandanten die gesamte Tabelle durchsuchen, die Millionen von Zeilen von anderen Mandanten enthält.
- Komposite Indizes:Erstellen Sie Indizes, die mit dem
tenant_id. Zum Beispiel ein Index auf (tenant_id,created_at) ermöglicht es der Datenbank, die Datensätze des spezifischen Mandanten schnell zu finden und zu sortieren. - Abdeckende Indizes: Wenn Sie bestimmte Spalten häufig abfragen, schließen Sie sie in den Index ein, um Tabellen-Abfragen zu vermeiden.
- Partitionierung:Große Tabellen können nach
tenant_id. Dies trennt die Daten physisch auf der Festplatte, was die Abfragegeschwindigkeit und die Backup-Verwaltung verbessert.
Abfrageoptimierung
Die Anwendungsschicht muss sicherstellen, dass jede Abfrage die tenant_id in der WHEREKlausel enthält. Das ERD-Design sollte sich nicht auf die Anwendung zur Datenfilterung verlassen; die Datenbank sollte die Quelle der Wahrheit sein.
- Zeilenbasierte Sicherheit: Einige Datenbanksysteme unterstützen zeilenbasierte Sicherheit (RLS). Das ERD kann diese Funktion nutzen, um Zeilen automatisch basierend auf dem Kontext des authentifizierten Benutzers zu filtern.
- Abfragepläne:Überprüfen Sie regelmäßig die Abfrageausführungspläne. Stellen Sie sicher, dass die Datenbank die
tenant_idIndex und keine vollständige Tabellen-Suche.
Sicherheits- und Compliance-Auswirkungen 🛡️
Datenschutzvorschriften wie die DSGVO und das CCPA legen strenge Anforderungen an die Speicherung und den Zugriff auf Daten fest. Das ERD spielt eine entscheidende Rolle bei der Einhaltung der Vorschriften.
Daten-Segregation
Die Einhaltung von Vorschriften erfordert oft, dass Daten leicht voneinander getrennt werden können. Wenn ein Mieter die Löschung seiner Daten anfordert, muss das System in der Lage sein, alle Datensätze, die mit ihrem tenant_id.
- Weiche Löschungen: Anstatt Zeilen dauerhaft zu löschen, markieren Sie sie als gelöscht. Dies ist oft sicherer für die Auditierung. Die Spalte
deleted_atsollte ebenfalls durchtenant_id. - Verschlüsselung:Sensible Felder innerhalb des Mieterbereichs sollten verschlüsselt werden. Die Schlüsselverwaltungsstrategie muss mit dem Modell der Mieter-Isolation übereinstimmen.
Auditierung und Protokollierung
Audit-Verläufe sind für die Sicherheit unverzichtbar. Jede Aktion, die an Mieterdaten durchgeführt wird, sollte protokolliert werden.
- Audit-Tabelle: Erstellen Sie eine spezielle Tabelle für Protokolle, die die
tenant_iddes betroffenen Entitäten enthält. - Zugriffssteuerung: Stellen Sie sicher, dass das Audit-Protokoll selbst geschützt ist. Administratoren sollten keine Audit-Protokolle von Mietern einsehen können, die sie nicht verwalten.
Schema-Evolution und Migration 🔄
Anwendungen entwickeln sich weiter. Funktionen werden hinzugefügt und Datenstrukturen ändern sich. In einer Mehr-Mieter-Umgebung sind Schema-Migrationen komplexer, da Änderungen bei allen Mietern ohne Ausfallzeiten oder Datenverlust angewendet werden müssen.
Rückwärtskompatibilität
Stellen Sie sicher, dass bei der Änderung des ERD die Rückwärtskompatibilität gewahrt bleibt.
- Additive Änderungen:Das Hinzufügen einer neuen Spalte zu einer Tabelle ist in der Regel sicher, wenn sie NULL-Werte zulässt.
- Entfernung von Spalten: Dies ist riskant. Eine Spalte sollte erst dann entfernt werden, wenn sichergestellt ist, dass kein Mandant sie mehr verwendet, und eine Ablaufzeit für die Abwicklung eingerichtet wurde.
- Spalten umbenennen: Dies kann Abfragen stören. Es ist besser, eine neue Spalte hinzuzufügen, die Daten zu migrieren und dann die Verweise zu wechseln, anstatt die Spalte umzubenennen.
Störungsfreie Migrationen
Für große Mandanten ist das Sperren von Tabellen während einer Migration keine Option. Das ERD-Design sollte Online-Änderungen der Datenbankstruktur unterstützen.
- Geister-Tabellen: Erstellen Sie eine neue Tabelle mit der aktualisierten Struktur, kopieren Sie die Daten und tauschen Sie anschließend die Tabellen aus.
- Versionsverwaltung: Einige Systeme unterstützen gleichzeitig mehrere Versionen einer Schema-Struktur, um eine schrittweise Einführung zu ermöglichen.
Häufige Fehler, die vermieden werden sollten ⚠️
Die Gestaltung eines mehrmandantenfähigen ERD beinhaltet viele komplexere Elemente. Hier sind häufige Fehler, die das System gefährden.
- Ignorieren der Mandanten-ID: Die Vergesslichkeit, die
tenant_idzu einer neuen Tabelle hinzuzufügen, die während der Entwicklung erstellt wurde. Dies führt zu sofortigen Risiken von Datenlecks. - Harte Codierung von IDs: Codieren Sie niemals eine Mandanten-ID im Anwendungscode. Sie muss dynamisch zur Laufzeit übergeben werden.
- Globale Zähler: Vermeiden Sie globale Auto-Inkrement-Zähler, wenn sie in der URL oder in API-Antworten sichtbar sind, da dies die Anzahl der Mandanten oder Benutzer preisgeben könnte.
- Geteilte Dateien: Das ERD konzentriert sich auf die Datenbank, aber die Dateispeicherung wird oft übersehen. Stellen Sie sicher, dass Dateipfade den Mandanten-Identifikator enthalten, um Zugriffsprobleme zu vermeiden.
Erweiterte Muster für komplexe Szenarien 🔍
Nicht alle mehrmandantenfähigen Systeme sind gleich. Einige erfordern eine feinere Kontrolle über die Datenstruktur.
Unterstützung mehrerer Organisationen
Ein Mandant könnte mehreren Organisationen angehören oder umgekehrt. Das ERD muss viele-zu-viele-Beziehungen unterstützen.
- Verknüpfungstabellen: Verwenden Sie eine Verknüpfungstabelle, um Benutzer, Mandanten und Organisationen zu verbinden.
- Berechtigungsmodelle: Das ERD sollte rollenbasierten Zugriffsschutz (RBAC) auf Mandantenebene unterstützen.
Globale vs. mandantenbezogene Einstellungen
Einige Konfigurationsdaten sind global (anwendungsweit), während andere Daten spezifisch für einen Mandanten sind.
- Einstellungstabelle:Gestalten Sie das ERD so, dass zwischen globaler Konfiguration und mandantenbezogenen Überschreibungen unterschieden wird.
- Vererbung:Eine Mandanteneinstellung könnte von einem globalen Standard erben. Das Schema sollte diese Hierarchie klar widerspiegeln.
Zusammenfassung der Best Practices ✅
Der Aufbau eines sicheren und skalierbaren Mehrmandantensystems beruht stark auf der Grundlage, die durch das Entity-Relationship-Diagramm gelegt wird. Durch Einhaltung der folgenden Prinzipien können Sie langfristige Stabilität gewährleisten.
- Konsistenz:Stellen Sie sicher, dass jede Tabelle, die Benutzerdaten enthält, den Mandanten-Bezeichner enthält.
- Isolation:Wählen Sie ein Isolationsmodell, das Ihren Sicherheits- und Kostenanforderungen entspricht.
- Leistung:Entwerfen Sie Indizes, die den Mandanten-Bezeichner priorisieren.
- Sicherheit:Implementieren Sie Sicherheit auf Zeilenebene und Verschlüsselung, wo angebracht.
- Wartbarkeit:Planen Sie Schemaänderungen, die den Dienst nicht stören.
Die Gestaltung Ihres Datenbank-Schemas ist eine strategische Entscheidung, die das gesamte Lebenszyklus der Anwendung beeinflusst. Ein gut strukturiertes ERD verhindert Datenlecks, gewährleistet Compliance und unterstützt das Wachstum. Indem Sie die Feinheiten der Mehrmandantigkeit während der Entwurfsphase sorgfältig berücksichtigen, schaffen Sie eine Grundlage, die widerstandsfähig und sicher ist. 🏛️
Ein kontinuierlicher Überblick über das ERD ist notwendig, während die Anwendung wächst. Neue Funktionen führen oft zu neuen Datenbeziehungen, die gegen die Regeln der Mandantenisolation bewertet werden müssen. Bleiben Sie wachsam, dokumentieren Sie Ihre Gestaltungsentscheidungen und stellen Sie die Datenintegrität über alles andere. Dieser Ansatz stellt sicher, dass Ihre Architektur auch bei Skalierung stabil bleibt.











