AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Eine Tabelle in mehreren Datenbanken
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Tabelle in mehreren Datenbanken

Ein Thema von Morphie · begonnen am 1. Sep 2011 · letzter Beitrag vom 1. Sep 2011
Antwort Antwort
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#1

Eine Tabelle in mehreren Datenbanken

  Alt 1. Sep 2011, 12:57
Datenbank: Firebird • Version: 2.5 • Zugriff über: egal
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?
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Eine Tabelle in mehreren Datenbanken

  Alt 1. Sep 2011, 13:05
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Eine Tabelle in mehreren Datenbanken

  Alt 1. Sep 2011, 13:06
Zitat:
3. Warten bis Firebird Cross-Table-Queries untersützt
Seit Version 2.5 kann man ja in PL ja schon auf andere datenbanken zugreifen.

1) wäre für mich eine saubere Lösung
Man kann die MandantenID ja als Parameter entsprechend vorbelegen oder als verbindungsspezifische Kontextvariable
Markus Kinzler
  Mit Zitat antworten Zitat
exilant

Registriert seit: 28. Jul 2006
134 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Eine Tabelle in mehreren Datenbanken

  Alt 1. Sep 2011, 13:27
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".
Anything, carried to the extreme, becomes insanity. (Exilant)
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#5

AW: Eine Tabelle in mehreren Datenbanken

  Alt 1. Sep 2011, 13:38
...
Man kann die MandantenID ja als Parameter entsprechend vorbelegen oder als verbindungsspezifische Kontextvariable
Sowas habe ich noch nie gemacht. Hast du da vielleicht ein kleines Beispiel für? (IBDAC)

...
Die MandantID permantent mitzuführen sollte im Zeitalter der Objektorientierung nicht wirklich ein Problem sein...
Gruß
Luggi
Stimmt, das sollte kein Problem sein.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Eine Tabelle in mehreren Datenbanken

  Alt 1. Sep 2011, 13:56
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).
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Eine Tabelle in mehreren Datenbanken

  Alt 1. Sep 2011, 14:00
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.
Ralph
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Eine Tabelle in mehreren Datenbanken

  Alt 1. Sep 2011, 18:28
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.
Bei Konzernen oder sonstwie verbundenen Unternehmen ist das auch günstig, z.B. für Ad-Hoc-Abfragen über mehrere Mandanten.

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.
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz