sql - 2 tabellen abgleichen

Post Reply
Message
Author
mrvim

sql - 2 tabellen abgleichen

#1 Post by mrvim »

folgende Situation:

es existieren 2 rechner (ein server ein mobiler client).
Es laufen auf beiden eine Datenbank. Der Client wird zunächst
offline benutzt, um daten entgegenzunehmen und in der lokalen
datenbank zu speichern (es existieren mehrere clients).

auf dem server können auch daten eingegeben werden. beide
datenbanken haben die gleiche struktur. einige tabellen sind
untereinander verknüpft und haben automatisch generierte primary
keys.

problem:

wenn ich auf dem client die daten mittels select auslese und via
insert in den server einfüge bekommen die zeilen dort einen anderen
primary key, als sie zunächst auf dem client hatten, somit passen
die verweise nicht mehr von den anderen tabellen, sie zeigen auf
eine falsche zeile oder auf eine nicht existierende.

gibt es einen ansatz für dieses problem, den ich weiterverfolgen
sollte?

User avatar
heinrich
Posts: 219
Joined: 22. Sep 1999 11:22
Location: N49.137 E8.544

#2 Post by heinrich »

Stichwort: Replikation

Um was für eine Datenbanksoftware handelt es sich denn? MySQL, PostgreSQL, Oracle, ...? Zumindest für letztere beiden existieren Replikationslösungen; Bei MySQL bin ich mir nicht ganz sicher.
It just works.

kanonenfutter

#3 Post by kanonenfutter »

> wenn ich auf dem client die daten mittels select auslese und via insert in den server einfüge
> bekommen die zeilen dort einen anderen primary key, als sie zunächst auf dem client hatten.

hmm, vielleicht klingt das selbstverständlich oder banal, aber:
du musst die zu "kopierenden" daten auf dem server auf die gleiche weise einfügen wie es bei ganz neuen daten der fall ist, die du direkt einfügst (ohne umweg über den client).
bei ganz neuen daten hast du ja auch noch keine keys, sie werden erst beim insert erzeugt. genau so eben auch für die kopierten daten (diese funktionalität hast du ja ohnehin schon implementiert). dabei darfst du die keys aus der client-db nicht verwenden (logisch), sondern sie werden neu angelegt.
hintergrund: die keys sind nur ein hilfsmittel, um die struktur der daten in der db nachzubilden. nach aussen hin dürfen die keys keine "bedeutung" haben, sie sind völlig willkürlich (nur innerhalb der db müssen sie konsistent sein).
daher ist es unsinnig, sie von einer db in eine andere zu übertragen.

mrvim

keys

#4 Post by mrvim »

hallol leute,

danke für euer interesse.
meine lösung ist ein "primary key pool". das heisst jeder beteiligte client bekommt einen pool von primary keys. das "auto-increment" für die primary keys wird ausgeschaltet und von mir selbst verwaltet. weiterhin bekommt jede tabelle einen timestamp, den ich als orientierung nehme ob tabellen synchronisiert werden müssen oder nicht.


gruss mrvim

Post Reply