![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: egal
Eine Tabelle in mehreren Datenbanken
Hi,
wir werden wohl demnächst ein Projekt mit einer Firebird DB starten. Das Projekt soll wahlweise auf unterschiedliche Datenbestände (Mandanten) zugreifen können, z.B.: Kunden Lieferanten Artikel ->Preise usw. Unser bisheriger Ansatz war, dass wir für jeden Mandanten eine eigene Datenbank anlegen. Jetzt soll es aber möglich sein, dass sich alle Mandanten z.B. die Tabelle "Kunden" teilen. (falls gewünscht) Das ganze soll möglichst flexibel gestaltet werden, damit man auf die entsprechenden Kundenwünsche schnell eingehen kann. Meine bisherigen Ideen: 1. Alle Daten in EINE Datenbank schreiben und für jede Tabelle ein Feld "MandantID" führen. Hat den Nachteil, dass wir bei jedem Query die MandatenID mit angeben müssen. 2. Alle Daten in EINE Datenbank schreiben, aber auf unterschiedliche Tabellen (mit Präfix) aufteilen. (z.B. Mandant1_Kunden, Mandant2_Kunden usw.) Hat den Nachteil, dass wir bei jedem Query die Tabelle ermitteln müssen. 3. Warten bis Firebird Cross-Table-Queries untersützt ;-) Punkt 1 + 2 brauchen dann zusätzlich noch eine Verknüpfungstabelle. Wie würdet ihr sowas machen? |
AW: Eine Tabelle in mehreren Datenbanken
Also ich würde die erste Methode wählen. Methode 2 finde ich unübersichtlich und auch nicht wirklich elegant, Methode 3 hängt ein bisschen vom geplanten Fertigstellungstermin ab.
Die MandantID permantent mitzuführen sollte im Zeitalter der Objektorientierung nicht wirklich ein Problem sein... Gruß Luggi |
AW: Eine Tabelle in mehreren Datenbanken
Zitat:
1) wäre für mich eine saubere Lösung Man kann die MandantenID ja als Parameter entsprechend vorbelegen oder als verbindungsspezifische Kontextvariable |
AW: Eine Tabelle in mehreren Datenbanken
Ich würde bei der Lösung mit einer Datenbank pro Mandant bleiben. Das halte ich für die sauberste Variante. Gemeinsam benötigte Tabellen würde ich mittels Replikation auf die Mandanten verteilen. Daten von Mandanten zu mixen ist allerdings nicht eben "Best Practice".
|
AW: Eine Tabelle in mehreren Datenbanken
Zitat:
Zitat:
|
AW: Eine Tabelle in mehreren Datenbanken
Würde es auch so machen wie mkinzler es vorgeschlagen hat.
Firebird (2.5) unterstützt mittlerweile ja datenbankübergreifende Queries. Und selbst mit Firebird 2.1 haben wir hier in unserem Programm 1 Datenbank pro Mandant. (Geht alles über Replikation). |
AW: Eine Tabelle in mehreren Datenbanken
Aus unserer Praxis kann ich sagen, dass man beide Wege gleichzeitig gehen kann.
Wir haben große Kunden (Konzerne mit mehreren Unterfirmen) die mit/als mehrere Mandanten auftreten. Die kriegen somit mit ihren mehreren Mandanten eine eigene DB. Dann gibt es aber Kunden, die sind nur ein Mandant und wollen aber aus Sicherheitsgründen eine eigene DB. Dann kriegen Sie sie auch. Da aber die DB-Struktur überall gleich ist, wird trotzdem die MandantID mitgeführt (auch wenn sie in dem Fall ja nicht nötig ist). Und es gibt Kunden die sind einer oder mehreren Mandanten und denen ist es egal, sich eine DB zu teilen (ist natürlich auch billiger) und da ist die mitgeführte MandantID und sehr sauberes Arbeiten natürlich sehr wichtig. |
AW: Eine Tabelle in mehreren Datenbanken
Zitat:
Man muss auch nicht zwangsweise in jeder Tabelle auch die Mandaten-ID speichern - reine Detailtabellen (Auftragspositionen zum Beispiel) enthalten einen Fremdschlüssel auf eine Mastertabelle (Auftragskopf), hier braucht man dann eine Mandanten-ID. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz