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?
sql - 2 tabellen abgleichen
> 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.
> 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.
keys
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
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