2016-12-18 2 views
-4

Ich muss eine Datenbankstruktur in SQL Server für mein Projekt entwerfen, ein Management Information System.Eine Datenbank pro Client oder alle Clients in einer Datenbank?

Ich habe eine Master-Datenbank und jedes Mal, wenn eine neue Organisation unsere webbasierte Anwendung abonniert, erstellt mein System eine neue Kopie der Master-Datenbank für diesen Client. Mit der Zeit nimmt die Anzahl der Clients zu, so dass auch die Anzahl der Kundendatenbanken steigt.

Ist das ein guter Ansatz, den ich verwende, oder muss ich eine einzige Datenbank für alle Clients verwenden?

+0

Warum ändern Sie meine Frage, wenn Sie meine Frage nicht verstehen. –

+1

Ich verstehe Ihre Frage und habe meine Antwort bearbeitet. Ihre erste "wann immer ein neuer Kunde kommt" war unklar. – CodeCaster

+1

Dies ist eine ** schrecklich schlechte ** Ansatz - SQL Server kann ** leicht ** eine "Master" -Tabelle mit 30 Unternehmen darin behandeln - es gibt absolut ** keine Notwendigkeit ** (und keinen Vorteil), um eine separate Datenbank zu erstellen für jeden Kunden .... –

Antwort

1

Nein, eine Datenbank pro Client zu erstellen, vorausgesetzt, ein Client ist nur eine Entität in Ihrer Datenbank, im Gegensatz zu einem separaten Benutzer einer mandantenfähigen Anwendung, ist keine gute Idee.

Wenn Sie andere Entitäten wie Hardware, Projekte oder andere Ressourcen unter einem Client registrieren möchten, dann speichern Sie entweder in einer separaten Tabelle und erstellen einen Fremdschlüssel von der Ressource zum Client, der ein "has-a" anzeigt. Beziehung.

, die wie folgt aussehen:

Clients:

Id Name 
1 Foo 
2 Bar 

Ressourcen:

Id ClientId Name 
1 1  Resource of Foo 
2 1  Resource of Foo 
3 2  Resource of Bar 

Sie auch den oben beschriebenen Ansatz mit einem Multi-Tenant-System übernehmen könnte, wo alle Benutzer Ihrer Anwendung in derselben Datenbank und Anwendung ausgeführt werden.

Mit diesem Ansatz werden Sie jedoch unterschiedliche Anliegen haben. Zum Beispiel könnte die einzelne Datenbank überproportional wachsen und die Leistung sowie die Einfachheit der Sicherung und Wiederherstellung beeinträchtigen. Sie müssen in der gesamten Anwendung Prüfungen hinzufügen, bei denen jeder Datenbankzugriff auf Zeilen erfolgt, für die der aktuelle Benutzer Berechtigungen besitzt. Es kann schwieriger sein, eine Aktion eines Benutzers rückgängig zu machen, sowie neue Funktionen für bestimmte Benutzer einzuführen (da sie alle mit demselben Software- und Datenbankschema ausgeführt werden).

Lesen Sie mehr über den Begriff "Multi-Tenancy", das ist das, was Sie suchen:

Answering wie zu implementieren Multitenancy wäre zu breit, siehe zum Beispiel die MSDN-Blog-Serie darüber in den Links oben. Wie für die Performance-Frage: nur Sie wissen. Alles hängt von Ihrem Code, Ihren Daten, Ihrem Schema, Ihrer Hardware und so weiter ab. Benchmark es.

+0

Ich habe eine Master-Datenbank, wenn jemals eine Organisation unsere Anwendung abonnieren (Web-Basis) erstellen wir eine separate Datenbank für diese Organisation zu speichern Ihre Daten und diese separate Datenbank ist eine Kopie der Master-Datenbank. wenn 30 Firmen oder Organisationen unser System benutzen, haben wir 30 Kundendatenbanken in unserem Server. –

+0

@TheComputerScientist und wenn Sie 30.000 Clients haben, haben Sie 30.000 Datenbanken. Wenn Sie eine größere Änderung an Ihrem System vornehmen, die Änderungen am Datenbankschema erfordert, wie lange dauert es, bis diese Schemaänderung für alle 30 KB-Datenbanken übernommen wurde? Oder sogar 30 Datenbanken? Wie wäre es mit der Migration auf eine neue SQL Server-Instanz (Upgrades usw.)? Sie werden einige sehr anspruchsvolle Skalierungsprobleme haben. – alroc

Verwandte Themen