Laden...

Ideen für Multi-Mandanten-Konzept

Erstellt von MorphieX vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.772 Views
M
MorphieX Themenstarter:in
184 Beiträge seit 2012
vor 11 Jahren
Ideen für Multi-Mandanten-Konzept

verwendetes Datenbanksystem: Firebird

Hi,

ich stehe vor einer Neuentwicklung einer ERP-Software und befinde mich noch in der Planungsphase.
Sicher ist aber, dass die Software mit mehreren Mandanten arbeiten soll. (z.B. ein Mandant = eine Firma)
Auch soll es auf jeden Fall möglich sein, dass man Daten der Mandanten mixen kann. Mandant A soll z.B. den selben Artikelstamm verwenden wie Mandant B.
Allerdings soll der Benutzer (Administrator) selbst entscheiden, welche Daten er mit welchem Mandanten teilt. Es soll also bei allen Tabellen möglichst identisch funktionieren.

Mein bisheriger Ansatz sieht folgendermaßen aus:
Ich habe eine Tabelle "Mandanten", mit den Spalten "ID" und "Name". Jeder Mandant taucht hier mit einer unique ID auf.
Desweiteren führe ich für jede weitere Tabelle eine Spalte "MandantID" mit, die angibt, welche Daten zu welchem Mandanten gehören.

Doch wie würdet ihr jetzt das Problem mit den mandantenübergreifenden Daten lösen?
Meine Idee:
Ich führe eine weitere Tabelle "CommonData" mit den Feldern "MandantID", "SourceMandantID", "Tablename" ein.
Jedes Mal, wenn ich die Daten aus der Datenbank abfrage, schaue ich zuerst in dieser Tabelle nach, ob zu einer bestimmten Tabelle ein Verweis auf einen anderen Mandanten existiert.
Dann muss ich meine Abfrage entsprechend anpassen, um z.B. nicht die Daten von MandantID 1 zu bekommen, sondern die von MandantID 2.

Ich stelle mir das in der Umsetzung bei vielen Abfragen allerdings ziemlich aufwändig vor.
Ich müsste so also bei jeder Abfrage zuerst nach einem string (Tabellennamen) suchen und anschließend für jede Tabelle in der Abfrage eine ID mit angeben (gut, das müsste ich wohl sowieso).

Habt ihr da vielleicht eine andere Idee oder vielleicht sogar ein komplett anderes Konzept?

Zu erwähnen wäre vielleicht noch, dass wir mit dem Entity Framework arbeiten wollen. Vielleicht lässt sich hier ja etwas "automatisieren"?

Ich bin für jeden Vorschlag dankbar.

16.842 Beiträge seit 2008
vor 11 Jahren

Wenn es Daten sind, die nur ein Mandant haben darf, dann machst Du eben eine (Mandant) 1*n (Artikel) Relation.
Sind es Daten, die mehrere Mandanten haben dürfen, dann machst Du eben eine (Mandant) n*n (Artikel) Relation.

Willst Du noch eine Nachverfolgung um feststellen zu können, wer welche Daten zugewiesen hat (zB welcher Admin), dann brauchst Du hier noch eine Zwischentabelle.

Sowas ähnliches hab ich auch in einem Projekt; funktioniert problemlos.

Meine Schnittstellen im Repository heißen dann einfach GetArtikelByMandant(), wobei mir dann ein Query nur die Artikel zurück gibt, die dem einen Mandanten zugewiesen sind.