PDA

Vollständige Version anzeigen : Datenaustausch zwischen mehreren Datenbanken


asphalt
21.04.2011, 10:28
Hallo Experten

Ich versuche mir gerade ein Konzept (Access2007) zu erarbeiten, wie ich Daten aus verschiedenen Datenbanken (Slave) in eine Datenbank (Master) zusammenfasse. Hat jemand vielleicht eine Beipspieldatenbank in der im Prinzip eine mögliche Vorgehensweise (Exportieren, Importieren) ersichtlich ist?

Ich habe mir gedacht, dass ich ein Änderungsdatum einfüge über dieses ich die zu exportierenden Daten bestimme. Und über eine Aktualisierungs- und Anfügeabfrage die Datensätze in die Master DB einfüge. Was mache ich, wenn Datensätze in den zu importierenden DB (Slave) gelöscht werden, nachdem sie in die DB (Master) importiert worden sind?

Kann ich die zu importierenden Datensätze über einen VBA Code gleichzeitig aktualisieren und neue Datensätze anfügen und wie gehe ich dabei am besten vor?

Der Primärschlüssel wird aus 2 Attributen bestehen, wobei das 1. Feld die ID (Autowert) und das 2. Feld den Namen der zu importierenden Datenbank enthält. Muss der Tabellenaufbau in der Master DB um ein zusätzliches ID (Autowert) Feld erweitert werden, bzw. muss der ID Feldtyp (Autowert) in der Master DB geändert werden?

Vielleicht kann mir jemand ein paar Tipps geben. Danke und schöne Ostern!!

Gruss
Asphalt

Atrus2711
21.04.2011, 10:32
Hi,

wozu sollen denn Master und Slave dienen? Was ist das Ziel des ganzen?

asphalt
21.04.2011, 10:46
Hallo

Vielleicht ist die Bezeichnung Master und Slave ungünstig gewählt.

Die einzelnen Datenbanken (Slave) sind bei verschiedenen Kollegen vor Ort abgespeichert. Hierin werden Ihre Projekte mit zahlreichen Informationen abgesperichert. Die Master DB wird alle paar Monate mit den Datensätzen der Kollegen aktualisiert, damit wir alle Informationen zentral verwalten können.

Ich hoffe, dass es jetzt ein bisschen klarer wird.

Josef P.
21.04.2011, 10:52
Hallo!

Kann ich die zu importierenden Datensätze über einen VBA Code gleichzeitig aktualisieren und neue Datensätze anfügen und wie gehe ich dabei am besten vor?

Diesen Vorgang wirst du in 2 Schritten durchführen müssen.
1. Update (der bestehenden Datensätze)
2. Insert (der noch fehlenden)

Problem beim Update: Wer "gewinnt", wenn mehrere Kollegen den gleichen Datensatz (eines Kunden usw.) geändert haben - und wie geht man vor, wenn zwar mehrere Kollegen den gleichen Datensatz aber unterschiedliche Felder bearbeitet haben?

Der Primärschlüssel wird aus 2 Attributen bestehen, wobei das 1. Feld die ID (Autowert) und das 2. Feld den Namen der zu importierenden Datenbank enthält. Muss der Tabellenaufbau in der Master DB um ein zusätzliches ID (Autowert) Feld erweitert werden, bzw. muss der ID Feldtyp (Autowert) in der Master DB geändert werden?

Du könntest als Autowert keine Long-Zahl sondern eine GUID (Replikations-ID) verwenden. Diese ist mit sehr hoher Wahrscheinlichkeit auch über mehrere "lokalen Backends" eindeutig.
Bezüglich Autowert: du könntest die Tabellen auch so gestalten, dass sie gar keinen Autowert haben und du im Code für das Befüllen des Primärschlüsselfelds (bzw. der Primärschlüsselfelder) sorgst.

Anm.: ich gehe davon aus, dass die Kollegen nicht auf ein gemeinsames Backend in einem Netzlaufwerk zugreifen können - damit wäre nämlich die Kopieraktion nicht notwendig. ;)

mfg
Josef

ebs17
21.04.2011, 11:47
Der Einweg-Datenaustausch (ein Slave zum Master) funktioniert einfach über Abfragen.
Aber:
- Wenn mehrere den gleichen Datensatz bearbeiten, bekommt man wie genannt ein Problem zu entscheiden, wessen Änderung Priorität hat.
- Wenn mehrere zum gleichen Sachverhalt neue Datensätze anlegen, erzeugen sie mit höchster Wahrscheinlichkeit Duplikate (gleicher Datensatz, aber unterschiedliche ID). Das gilt dann auch für Detail- und Detaildetaildatensätze. Damit fliegt die Integrität der Daten auseinander.

Atrus2711
21.04.2011, 12:01
Hi,

Die Master DB wird alle paar Monate mit den Datensätzen der Kollegen aktualisiert, damit wir alle Informationen zentral verwalten können.

wenn damit gemeint ist, dass der Master einfach nur "die Summe der Slaves" sein soll, dass kann man das einfach über Abfragen zusammenschieben. Durch "Filialnummern" o.ä. Angaben in den Keys sollte sich dabei eine Kollision von Daten aus mehreren Filialen vermeiden lassen: jede Filiale hat "ihre" Daten, jede Filiale ändert auch nur ihre, und der Master ist nur eine Union des ganzen.

Sobald aber Konkurrenz eintritt - A ändert Daten von B - wirst du Probleme bekommen. Denn wer hat da Recht?

Nebenbei: wenn das ganze nicht gerade am Nordpol spielt, sollte es möglich sein, über mobiles Internet eine zentrale Datenhaltung aufzubauen. Bei Internetflats für Festnetz und Mobil sollte sich auch im fahrenden Zug und in Mittelfischbach-Nord eine Datenverbindung aufbauen lassen. Wäre das nicth einen Gedanken wert?

asphalt
21.04.2011, 12:41
Hallo miteinander

Vielen Dank für Eure Postings.
Es ist ein Einweg-Datenaustausch, somit sollte ich eigentlich keine Probleme erhalten.
Wahrscheinlich werde ich immer alle Datensätze exportieren lassen, denn nur so würde ich die gelöschten Datensätze in der Slave DB berücksichtigen können.

Was würdet ihr mir für die Slave DB empfehlen, ein ID Feld mit Autowert oder selbst einen Wert für den Primärschlüssel eintragen? Oder wäre ein Autowert für das Importieren auch kein Problem. Hier müsste ich wahrscheinlich den Datentyp in der Master DB ändern.

Gruss
Asphalt

Atrus2711
21.04.2011, 12:58
Hi,

wenn wirklich nur DAten vereint werden sollen, kannst du den Autowert ja im Ziel neu erzeugen.

Wenn aber die Quelldatenbanken mehrere Tabellen enthalten und du Beziehungen "nachziehen" willst, wirst du mit neuen IDs die Beziehungen "kaputtmachen". Da wäre es einfacher, aus Filialen und Autowerten einen "Master-Key" zu bauen.

ebs17
21.04.2011, 13:07
Ein Autowert (Increment) verbietet sich für die Master-DB von selbst - wie will man Datensätze aus den Slave-DB´s zusammenführen. Für die Indexierung muss man Gleiches beachten.

Atrus2711
21.04.2011, 13:12
Naja: wenn der Autowert im Master vergeben wird und nicht aus den Slaves übernommen... dann gehts. Aber wie erwähnt, geht das nur bei einfachen Datenbanken ohne Beziehungen.

ebs17
21.04.2011, 13:26
Naja: Wenn ID`s im Master neu vergeben werden, bleibt von einem Datenaustausch nicht mehr viel übrig, da schon eine einfache Rückfrage von Zentrale an Filiale, bezogen auf eine Datensatz-ID, scheitern wird.

asphalt
21.04.2011, 13:28
Jetzt habe ich schon ein gutes Gefühl für die Umsetzung.

Danke für Eure Hilfe

Atrus2711
21.04.2011, 13:30
Es ist ein Einweg-Datenaustausch
Mithin also eher kein Austausch. Die Daten fließen nur in einer Richtung.

Auswendig lernen wird die ID keiner; man wird immer anhand "realer" Felder (Namen, Preise, Datumswerte etc) suchen. Der einzige "Partner", den die ID-Werte wirklich interessieren, sind die Partnersätze in verwandten Tabellen. Aber die habe ich ja ausgenommen. Die müssten entweder mitübersetzt oder durch Filiale+Altnummer identifiziert werden.

Es ist z.B. völlig egal, ob "mein" Datensatz die ID 43 oder 23746237 hat. Niemand wird mich als 43 suchen.

Vorausgesetzt wird dabei natürlich immer ein kompletter Ersatz aller Daten in der vereinigten Datenbank durch die Daten der Filialen.