Hallo!
Auf zwei unterschiedlichen Rechner läuft ein Programm, das zur Verwaltung seiner Daten eine eigene, lokale SQLite Datenbank verwendet. Die beiden Datenbanken von den Rechner A und B haben also die gleiche Struktur, jedoch (teilweise) unterschiedliche Daten.
Ich suche nun nach einer Möglichkeit die beiden Datenbanken zu synchronisieren. Es genügt zunächst einmal der einfacherer Fall der Synchronisation in eine Richtung, es sollen also die Daten von Datenbank B in A eingefügt werden.
Natürlich ist es kein Problem die alle Einträge einer Tabelle in DB A zu durchlaufen und mit allen Einträgen in der gleichen Tabelle in DB zu vergleichen. Das Ganze sollte aber etwas effizienter ablaufen.
All Tabellen sind nach dem gleichen Muster aufgebaut und haben neben einer ID als Primärschlüssel auch eine GUID die einen Eintrag eindeutig identifiziert. Zudem hat jeder Eintrag eine "Version". Das ist einfach eine zufällige Zeichenfolge, die beim Erstellen eines Eintrags und bei jeder Änderung verändert wird.
Beispiel:
Nun sollen die Daten von B nach A übertragen werden. Hierbei gilt:
Soviel zur Theorie. In der Praxis fehlt mir etwas Know-How um möglichst viel Arbeit von SQL erledigen zu lassen.
Beide Datenbank Dateien werden auf den gleichen Rechner kopiert, eine Verbindung zu DB A aufgebaut und die Datenbank B per ATTACH an diese Verbindung angehängt.
Fragen:
1. Mit welchem SQL Befehl wähle ich alle Einträge in Tabelle "datenbankB.Person" aus, die nicht in Tabelle "Person" enthalten sind? Kann das Ergebnis dieser Abfrage direkt per SQL in "Person" eingefügt werden oder muss das Ergebis Eintrag für Eintrag durchlaufen werden um diese dann einzeln per INSERT einzufügen?
2. Mit welchem SQL Befehl wähle ich alle Einträge in Tabele "datenbankB.Person" aus, die auch in Tabelle "Person" enthalten sind aber dort eine andere Version haben? Kann das Ergebnis dieser Abfrage direkt per SQL in "Person" eingefügt werden oder muss das Ergebis Eintrag für Eintrag durchlaufen werden um diese dann einzeln per INSERT einzufügen?
Vielen Dank!
Agenor
Auf zwei unterschiedlichen Rechner läuft ein Programm, das zur Verwaltung seiner Daten eine eigene, lokale SQLite Datenbank verwendet. Die beiden Datenbanken von den Rechner A und B haben also die gleiche Struktur, jedoch (teilweise) unterschiedliche Daten.
Ich suche nun nach einer Möglichkeit die beiden Datenbanken zu synchronisieren. Es genügt zunächst einmal der einfacherer Fall der Synchronisation in eine Richtung, es sollen also die Daten von Datenbank B in A eingefügt werden.
Natürlich ist es kein Problem die alle Einträge einer Tabelle in DB A zu durchlaufen und mit allen Einträgen in der gleichen Tabelle in DB zu vergleichen. Das Ganze sollte aber etwas effizienter ablaufen.
All Tabellen sind nach dem gleichen Muster aufgebaut und haben neben einer ID als Primärschlüssel auch eine GUID die einen Eintrag eindeutig identifiziert. Zudem hat jeder Eintrag eine "Version". Das ist einfach eine zufällige Zeichenfolge, die beim Erstellen eines Eintrags und bei jeder Änderung verändert wird.
Beispiel:
Code:
Tabelle "Person"
ID
GUID
Name
Adresse
GruppenGUID
Version
Tabelle "Gruppe"
ID
GUID
Name
Version
Code:
Datenbank A
Tabelle "Person"
1 AAA Meyer G1 xyz
2 BBB Müller G1 abc
Tabelle "Gruppe"
1 G1 Gruppe1 def
2 G1 Gruppe2 dge
Datenbank B
Tabelle "Person"
1 HHH Hinz G1 ghu
2 BBB Müller G2 vfh
3 AAA Meyer G1 xyz
Tabelle "Gruppe"
1 G1 Gruppe1 def
2 G1 Gruppe2 dge
2 G3 Gruppe3 ttz
Nun sollen die Daten von B nach A übertragen werden. Hierbei gilt:
- Die ID hat hierfür keine Bedeutung. In B gibt es die gleichen Personen wie in A, aber mit anderen IDs. Gleiche Einträge werden über die GUID identifiziert.
- Alle Einträge einer Tabelle aus DB B mit einer GUID die es in der gleichen Tabelle in DB A nicht gibt müssen 1:1 in A eingefügt werden.
- Das Feld Version ist ein Optimierung für den Sync. Von den Einträgen die es sowohl in A als auch in B gibt müssen nur solche mit unterschiedlicher Version berücksichtigt werden. Für die Tabelle "Person" muss also "BBB Müller" von B nach A kopiert werden (geänderte Gruppe und damit geänderte Version), Person "AAA Meyer" aber nicht (keine Änderung, gleiche Version).
Soviel zur Theorie. In der Praxis fehlt mir etwas Know-How um möglichst viel Arbeit von SQL erledigen zu lassen.
Beide Datenbank Dateien werden auf den gleichen Rechner kopiert, eine Verbindung zu DB A aufgebaut und die Datenbank B per ATTACH an diese Verbindung angehängt.
Fragen:
1. Mit welchem SQL Befehl wähle ich alle Einträge in Tabelle "datenbankB.Person" aus, die nicht in Tabelle "Person" enthalten sind? Kann das Ergebnis dieser Abfrage direkt per SQL in "Person" eingefügt werden oder muss das Ergebis Eintrag für Eintrag durchlaufen werden um diese dann einzeln per INSERT einzufügen?
2. Mit welchem SQL Befehl wähle ich alle Einträge in Tabele "datenbankB.Person" aus, die auch in Tabelle "Person" enthalten sind aber dort eine andere Version haben? Kann das Ergebnis dieser Abfrage direkt per SQL in "Person" eingefügt werden oder muss das Ergebis Eintrag für Eintrag durchlaufen werden um diese dann einzeln per INSERT einzufügen?
Vielen Dank!
Agenor