Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Synchronisation zwischen Datenbanken - Ideen?

  Alt 30. Mai 2011, 22:10
So als Idee zur Synchronisieren...
Eine Tabelle mit Adressdaten (Namen, Strasse, PLZ, Ort, Land, Tel, EMail) wird unabhängig voneinander
auf Notebooks im Aussendienst befüllt und soll auf die gemeinsame Tabelle auf'm Server synchronisiert werden.

Alle Felder werden zu einem String verkettet und darüber ein Hashwert (MD4, MD5, SHA-40) errechnet:
Delphi-Quellcode:
//
hashstring := Trim(name1)+'|'+Trim(name2)+'|'+Trim(strasse)+'|'+...'|'+Trim(EMail);
hashvalue := HexString(CalcMD4(hashstring));
Der Hashvalue wird zusätzlich zu den Adressdaten in einem eigenen, indizierten Feld gespeichert.
Der Hashvalue muss nicht zwingend der Primärschlüssel der Tabelle sein, sondern ist ggf. nur ein Surrogatschlüssel.
Die einzelnen Felder werden vor dem Zusammenbau mit Trim() bearbeitet, damit Leerzeichen am Anfang oder Ende keine Rolle spielen.
Es hängt vom Einzelfall ab, ob man zusätzlich auch noch UpperCase() anwenden sollte.
Das Trennzeichen (hier '|') ist wichtig, damit die Position der Felder fixiert wird.
Ausserdem wichtig: das Design der Tabelle muss von Anfang an passen; nachträgliches Hinzufügen von Felder
ist schwierig, da eine Kollision der Hashwerte droht.

Mit dem Hashvalue Feld gibt es ein eindeutiges Kriterium auf Grund dessen Synchronisiert werden kann.

Löschen von Datensätzen:
Die Datensätze werden nicht wirklich gelöscht, sondern nur mit dem Boolean-Feld "Deleted" markiert.
Alle Datensätze bleiben daher quasi für immer erhalten.
Diese können irgendwann mit DELETE FROM AdressTabelle WHERE Deleted<>0 endgültig gelöscht werden.

Die Tabelle sieht dann also so aus:
Code:
PKey      int
HashValue varchar(32)
LastChange DateTime
Created   DateTime
Deleted   Bool (oder TinyInt oder Byte)
Nutzdaten1 ....
Nutzdaten2 ....
  Mit Zitat antworten Zitat