Effiziente Datenbankstruktur

Hallo,
ich möchte einen zentralen Datenbank Server anlegen, auf dem etwa 10 Mandanten Ihre eigenen Daten (Artikelstamm mit je 10000 Datensätzen, Lieferantenstamm etc.) hinterlegen und abfragen können.
Ich stehe nun vor der Frage, ob es sinnvoller ist jedem Mandanten eine eigene Datenbank einzurichten oder, da die Datenstrukturen identisch, alle Daten in einer Datenbank zu speichern, und die Daten über eine Where Klausel (z.Bsp. der Mandantennr) aus den jeweiligen Tabellen herauszufiltern.
Welche Lösung könnte bezgl. der Abfragegeschwindigkeit die effizientere sein?

Gruß
Werner

Wenn nur die Abfragegeschwindigkeit ein Kriterium ist, dann definitiv verschiedene DBs.

Andere Kriterien könnten sein:

  • brauchst du für Berichte oder ähnlichem mal alle Daten zusammen? Dann eine DB.
  • musst du Datenschutz gewährleisten, dass verschiedene Mandanten die anderen Daten nicht einsehen können? Dann verschiedene DBs.

Ist mal geplant, über alle Mandanten hinweg z.B. eine Auswertung zu fahren? Ist geplant, für bestimmte Aufgaben
Stored Procs zu schreiben?

Der vermeintliche Vorteil, für jeden Mandanten eine eigene DB zu stellen schmilzt schnell mit den Nachteilen dahin:

  • mehr Verwaltungsaufwand, mehr zu wartende Systemkataloge etc.
  • es skaliert nicht. Eine Änderung zieht die Änderung in N Datenbanken nach sich (ALTER TABLE oder sowas)
  • Stored Procs mußt Du in N Datenbanken anlegen und pflegen
  • Du kannst nicht mehr über alle Mandanten hinweg arbeiten



    Ein Kompromiss wäre, jeden Mandanten in ein eigenes Schema zu stecken. Aber auch dann hast Du N einzelne Schemas. Stored Procs könnte man dann allerdings in z.B. public lassen und allen einen search_path dahin geben.


    Also, ich tendiere, über Mandantennummer zu arbeiten. Man kann dann auch z.B. VIEWS machen, die in der Mandantennummer-Spalte nur die selektieren, die dem aktuellen Benutzer (Mandant) gehören und solche Dinge.

Ich würde auch ganz klar für eine DB mit entsprechender Zuordnung von Datensatz - Mandant arbeiten. Eine Trennung wäre nur bei besonderen Datenschutzrechtlichen Vorgaben nötig. Sinnvoll ist eine DB für alle.