Wir haben eine Reihe von Kunden, deren Systeme einige Funktionen gemeinsam haben, aber auch ein gewisses Maß an Vielfalt aufweisen. Die Zahl der Kunden wächst - immer eine gesunde Sache! - und auch die Vielfalt zwischen ihren Unternehmen nimmt zu.
Derzeit gibt es eine einzige ASP.Net-Website (Web Forms) (im Gegensatz zu einem Webprojekt), die Unterordner für jeden Mandanten enthält und die nicht standardmäßigen Seiten dieses Mandanten enthält. Es gibt ein separates Modellprojekt, das sich mit dem Datenbankzugriff und der Geschäftslogik befasst.
Was ist vorzuziehen - und am wichtigsten, warum - zwischen (a) 1 Datenbank pro Client mit nur den Funktionen, die mit diesem Client verbunden sind; oder (b) eine einzelne Datenbank, die von allen Clients gemeinsam genutzt wird, wobei nur eine Teilmenge von Tabellen von einem Client verwendet wird.
Die Hauptanliegen innerhalb des Geschäfts sind erledigt:
- Wartung mehrerer Assets - Backups, Versionskontrolle und dergleichen
- Förderung der Wiederverwendung so weit wie möglich
Wie würden Sie sicherstellen, dass diese Bedenken ausgeräumt werden, welche Lösung ist vorzuziehen und warum? (Ich habe auch Antworten auf ähnliche Fragen zusammengestellt.)
quelle
Antworten:
Hier sind die Highlights aus Untersuchungen aus anderen Quellen (ursprünglich aus Revision 2 der Frage ):
Soll ich eine Datenbank pro Anwendung verwenden oder eine einzelne Datenbank für mehrere Anwendungen freigeben?
Unterstützung für Mandantenfähigkeit
Mandantenfähige MSDN -Datenarchitektur
SO Wie erstelle ich eine mandantenfähige Datenbank mit gemeinsam genutzten Tabellenstrukturen?
CloudExpo SaaS - Entwurfsoptionen für mandantenfähige Datenbanken
MSDN-Blogs Der Umstieg auf ein mandantenfähiges Datenbankmodell ist mit SQL Azure-Verbänden ganz einfach
Fragen Sie SQL Server Central Eine Datenbank oder mehrere?
SQL Server Central Mischen von Tabellen aus verschiedenen Datenbanken / Anwendungen in eine Datenbank
Ayende @ Rahien blog Mandantenfähigkeit - Das physikalische Datenmodell
Datenbankarchitektur mit mehreren Mandanten für Code-Projekte
Joel über Software -Datenbankdesign mit mehreren Mandanten
SO Mehrfachanwendung mit einer Datenbank?
SO Einzelne oder mehrere Datenbanken
Code Rant - Mandantenfähigkeit Teil 1, Strategie und Teil 2, Komponenten und Kontext
quelle
Wenn Sie SQL Server verwenden, verwenden Sie eine Datenbank, aber Schemas. Verwenden Sie dbo für Dinge, die für alle Clients allgemein sind, und erstellen Sie ein Schema für jeden Client, und legen Sie dieses als Standardschema für Benutzer dieses Clients fest. Jetzt können Sie ein allgemeines Objekt (z. B. einen getBudget-Prozess) im dbo-Schema und ein benutzerdefiniertes Objekt für den Client in seinem Schema mit demselben Namen haben.
quelle
Da die Datenbanken und Funktionen der Clients unterschiedlich sind, bedeutet dies, dass sie zu einem bestimmten Zeitpunkt unterschiedliche Systeme darstellen. In diesem Fall würde ich separate Systeme empfehlen, da die Kosten für die Pflege der Anpassungen für jeden Client die Vorteile eines einzelnen Systems überwiegen Datenbanksystem.
Einzelne Datenbanksysteme eignen sich am besten, wenn die Änderungen zwischen verschiedenen Kunden lediglich Konfigurationen sind, jedoch keine zusätzlichen Funktionen für jeden Client.
quelle
Sie vermissen einige Bedenken. Probleme werden mit dem Wachstum kommen. Wenn Sie davon ausgehen können, dass Sie eines Tages größer werden als ein DB-Server, bereitet Ihnen eine komplexe Datenbank definitiv Kopfzerbrechen. Es sei denn, Sie investieren im Voraus in Architektur. Aber es ist auch teuer Schritt)
Vergessen Sie also nicht, dass es um ein Vielfaches billiger und einfacher ist, nur wenige Datenbanken zu skalieren als riesige.
quelle
Ein Bereich, den ich in den Antworten nicht gesehen habe, sind die Probleme beim korrekten Sichern einer mandantenfähigen DB-Anwendung. Multi-Tenant-Apps müssen sehr sorgfältig entwickelt werden, um Sicherheitsprobleme zu vermeiden. Die meisten Datenbanken und Apps bieten eine gewisse, aber keine vollständige Isolation. In der Regel gibt es Möglichkeiten, Daten direkt oder indirekt über die DB-Schemata abzuleiten. Und eine ganze Reihe von freigegebenen Ressourcen (Protokolle und andere Dateien, DBA-Tabellen, Cursor ...), die zumindest zu leichten Denial-of-Service-Angriffen auf andere Mandanten und in der Regel zu vielem mehr führen können.
quelle