Wir haben eine interne Software, die auf einer SQL-Server DB mit einer Master-Tabelle und mehreren verbundenen Tabellen basiert. Die Art der Daten, die wir speichern, ist ziemlich schwer zu beschreiben, aber wir haben eine Kundentabelle mit einigen verknüpften Tabellen: Bestellungen, Sendungen, Telefonprotokolle, Reklamationen usw.SQL-Master-Detail-Tabellen - besser UPDATE oder DELETE + INSERT?
Wir müssen diese Software mit einer externen synchronisieren Diese hat eine eigene DB (mit der gleichen Struktur) und erzeugt eine XML-Datei mit aktualisierten Informationen über unsere "Kunden" (eine Datei pro Kunde). Updates können sich in der Master-Tabelle und/oder in 0 bis n verbundenen Tabellen befinden.
Um diese Dateien zu importieren, besteht eine Möglichkeit darin, alle beteiligten Tabellen abzufragen und sie mit der XML-Datei zu vergleichen, wobei möglicherweise Zeilen hinzugefügt, aktualisiert und gelöscht werden.
Dies würde eine Menge Codierung erfordern.
Eine weitere Möglichkeit besteht darin, alle Daten für den gegebenen Kunden (zumindest aus den verbundenen Tabellen) komplett zu löschen und neu einzufügen.
Dies wäre nicht so effizient.
Bitte beachten Sie, dass die Master-Tabelle 13 Felder und es gibt etwa 6 Tabellen mit 3 bis 15 Felder.
In dieser App verwenden wir hauptsächlich LINQ.
Wie würden Sie fortfahren?
PS: Ich habe ein paar Antworten zu diesem Thema hier auf StackOverflow bemerkt, aber fast alle betreffen (einzelne Zeilen in) einzelne Tabellen.
Vielen Dank Jean für Ihre Antwort. Daten werden niemals aus unserer Anwendung exportiert. Unsere App ist hauptsächlich schreibgeschützt und die Daten werden regelmäßig von der Drittanbieter-App aktualisiert (über xml). Und natürlich enthält jede XML-Datei alle Daten über einen einzelnen Kunden (sowohl Daten, die ich bereits in meiner Datenbank habe und Daten, die ich hinzufügen/bearbeiten/löschen muss). Also jedes Mal, wenn eine Datei kommt, kann ich nicht sagen, was ich aktualisieren sollte, es sei denn, ich vergleiche jede Zeile. Es ist mir nicht klar, wie kann ich das mit Flaggen umgehen? – Disti
Flags sind nur nützlich für Exporte (eine Schande, dass das andere System Ihnen nicht sagen kann, was aktualisiert, eingefügt, gelöscht wird) und für das logische Löschen. Nur für Importe können Sie die "externe ID" erstellen und wenn die Tabelle groß ist, verwenden Sie auch eine Hash-Spalte, um herauszufinden, ob es überhaupt ein Update gibt. Sie können die XML-Datei sogar mit einem Hash-Code versehen, um zu prüfen, ob sich die Datei im Vergleich zur vorherigen Version geändert hat – jean