Was ist das beste Tempo. Verknüpfungsmethode von datasätzen, die an einen server zur Einfügung in DB gesendet werden sollen

[SCENARIO] Das Szenario ist, dass es erforderlich ist, mehrere datasätze über XML-file an den server zu senden, zum Einfügen in die database. Diese datasätze bestehen aus mehreren Master- und Detailtabellen, die über Primär- und Fremdschlüssel miteinander verknüpft sind.

Jetzt kann der Client den Primärschlüssel und Fremdschlüsselspalten / data in diesen datasätzen nicht vor der Hand füllen, dies muss vom server erfolgen, wenn dort XML-data ankommen.

{Client} —————> {Unser server} -> {SQL server}

[FRAGE] Was ist der beste path, um Master- und Detaildatensätze zeitweilig miteinander zu verknüpfen, damit der server verknüpfte datasätze verstehen und temporäre primäre / Fremdschlüssel mit GUIDs oder einem beliebigen Auto-Nummer / eindeutigen Schlüssel nach dem databaseschema replace kann. ?

Soll ich einfache sequentielle Integer-buttonn oder GUID verwenden? Gibt es irgendwelche Industriestandards?

Ich habe noch nie von einer üblichen Art und Weise gehört, dies zu tun, Industrie oder anders. Wann immer möglich, möchten Sie die Primärschlüssel bestimmen oder generieren, bevor Sie der database Zeilen hinzufügen. Natürliche Schlüssel sind dafür ideal, und Guides funktionieren auch. Ein kurzes Beispiel:

-- Start with Parent row and several Children rows to insert SET @GuidPK = newid() INSERT parent row using @GuidPK INSERT children rows using @GuidPK 

Wenn Sie dies nicht tun können (was passiert, wenn Sie eine Identitätsspalte als Primärschlüssel des Elternteils verwenden) und ein einzelnes Elternteil (+ 0 oder mehr Kinder) insert, ist es immer noch einfach:

 -- Start with Parent row and several Children rows to insert INSERT Parent -- Presums one at a time! SET @NewPK = scope_identity() INSERT Children using @NewPK 

Allerdings, wenn Sie mehrere Eltern und ihre Kinder auf einmal insert (und es klingt wie das ist, was Sie vor), wird es schwierig. Ich habe mit den Varianten der folgenden Methodik einen vernünftigen Erfolg gehabt.

Zuerst füge jedes "neue" Elternteil der übergeordneten Tabelle hinzu. Sobald dies geschehen ist, fragen Sie die übergeordnete Tabelle ab und extrahieren Sie die neue ID, die jedem übergeordneten Element zugewiesen ist, und ordnen Sie es den entsprechenden untergeordneten Zeilen zu, wenn sie geladen werden. Psuedo-Code:

 INSERT ParentSet SELECT NewIds of ParentSet just loaded INSERT ChildSet using these NewIds 

Der Trick besteht darin, die neuen Eltern, die wir gerade eingegeben haben, zu identifizieren und zu extrahieren. Wenn du einen natrual Schlüssel hast (einzigartiger Produktname, OrderId, vielleicht etwas, das auf datetime data basiert), verwenden Sie das. Wenn nicht, müssen Sie fälschen. Ich habe Tricks gemacht, wo ich anfangs eine Guid für jedes Elternteil erstellt habe, um hinzugefügt zu werden, eine beliebige Spalte zu diesem Elternteil während des Intialeinsatzes zu setzen, zog die neuen IDs, indem ich nur für diese Guides las und dann die Guids durch die richtige Spalte ersetzte Wert. Mehr psuedo code:

Fügen Sie eine Colum zu dem übergeordneten Satz hinzu, konfigurieren Sie mit einer eindeutigen Guid in jeder INSERT-übergeordneten … Spalte XYZ = neue Guid SELECT NewId from Parent, wobei XYZ in (list der erzeugten Guides) UPDATE parent set XYZ = richtiger Wert wo (Filter oder Join) basierend auf NewId) INSERT Kinder (mit dem abgerufenen NewId)

Ich hoffe das hilft, es ist schwer zu erklären, ohne spezifische Strukturen und Beispieldaten.