Ist eine mandantenfähige Datenbank:
- Ein DB-Server, der für jeden Kunden / Mandanten eine andere (identische) Datenbank / ein anderes Schema hat ?; oder
- Ein DB-Server mit einer Datenbank / einem Schema, auf dem Kunden / Mandanten Datensätze in denselben Tabellen gemeinsam nutzen?
Zum Beispiel könnte ich unter Option # 1 oben einen MySQL-Server an haben mydb01.example.com
, und es könnte sich eine customer1
Datenbank darin befinden. Diese customer1
Datenbank kann beispielsweise 10 Tabellen enthalten, die meine Anwendung für diesen bestimmten Kunden (Kunde Nr. 1) unterstützen. Möglicherweise enthält es auch eine customer2
Datenbank mit genau den gleichen 10 Tabellen, die jedoch nur Daten für Kunde 2 enthält. Möglicherweise gibt es eine customer3
Datenbank, eine customer4
Datenbank usw.
In der obigen Option 2 würde es beispielsweise nur eine einzige Datenbank / ein einziges einziges einziges Schema geben, myapp_db
in dem sich wiederum 10 Tabellen befinden (die gleichen wie oben). Aber hier sind die Daten für alle Kunden in diesen 10 Tabellen vorhanden, und sie "teilen" daher die Tabellen. Und auf der Anwendungsebene wird durch Logik und Sicherheit gesteuert, welche Kunden auf welche Datensätze in diesen 10 Tabellen zugreifen können, und es wird sorgfältig darauf geachtet, dass sich Kunde Nr. 1 niemals in der App anmeldet und die Daten von Kunde Nr. 3 usw. sieht.
Welches dieser Paradigmen stellt eine traditionelle "mandantenfähige" DB dar? Und wenn nicht, kann mir dann jemand anhand der oben beschriebenen Szenarien ein Beispiel für eine mandantenfähige Datenbank geben?
Antworten:
Beide Konzepte werden als mandantenfähig bezeichnet, da es sich lediglich um ein logisches Konzept handelt, "bei dem eine einzelne Instanz von Software auf einem Server ausgeführt wird und mehrere Mandanten bedient" (aus Wikipedia ). Aber wie Sie dieses Konzept "physisch" umsetzen, liegt bei Ihnen.
Natürlich benötigt die Anwendung ein Datenbankkonzept, mit dem die Daten verschiedener Mandanten getrennt werden können, und die Idee der Mandantenfähigkeit besteht darin, einige Serverressourcen (zumindest die Hardware) gemeinsam zu nutzen, um die Ressourcennutzung zu verbessern und die Verwaltung zu vereinfachen. Eine "mandantenfähige DB" unterstützt dies also direkt , wenn Teile des Datenbankmodells oder Tabellen gemeinsam genutzt werden.
Um genau zu sein, ist es möglich, eine mandantenfähige Anwendung mit einer mandantenfreien Datenbank zu erstellen, die eine einzelne DB-Instanz pro Client bereitstellt. Dies schließt jedoch die direkte gemeinsame Nutzung von Datenbankressourcen zwischen Mandanten aus, und die Anwendungsschicht muss sicherstellen, dass der richtige Mandant mit der richtigen Datenbank verbunden ist.
quelle
Laut Microsoft hat der Begriff drei mögliche Bedeutungen (eine Datenbank für alle Mandanten oder einen Datenlaser pro Mandant).
Um Ihr Beispiel zu verwenden, wäre jeder Kunde sein eigener Mieter.
Eine Datenbank pro Mieter (Kunde)
Eine gemeinsam genutzte Datenbank, separates Schema.
Eine gemeinsam genutzte Datenbank, ein gemeinsam genutztes Schema.
In diesem Artikel werden die Vor- und Nachteile erläutert: https://msdn.microsoft.com/en-us/library/aa479086.aspx
Bonus: Sie können sich das als Wohnviertel vorstellen (grob vereinfacht).
Jeder Mieter hat sein eigenes Haus. Sie können tun, was sie wollen, und wenn es niederbrennt, betrifft es niemanden wirklich.
Jeder Mieter ist im selben Gebäude, hat aber eine eigene Wohnung.
Jeder wohnt in der gleichen Wohnung und alle Sachen sind mit einem Haftnotiz versehen, um zu zeigen, wem sie gehören.
quelle