Laden...

Datenstruktur in Datenbank eintragen. Schnellste Möglichkeit gesucht.

Erstellt von slide vor 14 Jahren Letzter Beitrag vor 14 Jahren 991 Views
S
slide Themenstarter:in
49 Beiträge seit 2008
vor 14 Jahren
Datenstruktur in Datenbank eintragen. Schnellste Möglichkeit gesucht.

verwendetes Datenbanksystem: MS SQL Server 2008
verwendete Entwicklungsumgebung: Visual Studio 2010 RC

Hallo.
Ich suche die schnellste Möglichkeit einen Datensatz einer speziellen Struktur in die Datenbank einzupflegen.
Ich habe in einem .NET Programm einen Objektbaum mit ungefähr folgender Struktur(Bsp.):


Bericht
--Ersteller
  --Name
  --Abteilung
  --XYZ
--Datum
--Unterbericht1
  --Ersteller
  --Daten
    --XYZ
    --ZJY
    --???
      ...
--Unterbericht2
  --Ersteller
  --Daten
    --XYZ
    --ZJY

Nun möchte ich diesen möglichst performant in die Datenbank eintragen.
Aufgrund Tatsache, dass die Elemente aufeinander referenzieren müssen, wären normal sehr viele einzelne Anfragen nötig.

Satz "Ersteller" eintragen, Personen-ID bekommen,
Satz "Bericht" eintragen mit Referenz auf Personen-ID, dadurch Bericht-ID bekommen,
Sätze "Daten" eintragen, IDs bekommen,
Sätze "Unterbericht" erstellen mit Referenz auf die Sätze "Daten" und den übergeordneten "Bericht".
...
Bei entsprechend vielen Ebenen sind dass sehr viele Roundtrips an den Server.
Nur frage ich mich, geht es besser?
Ich habe bereits die Idee, bei einzelnen Unterknoten, die Daten für diesen direkt mit an die stored procedure zu übergeben.
Diese erstellt dann die eigentliche Entität, sowie die Untergeordnete mit einem Aufruf.
z.B. dbo.CreateReport(Datum, Erstellername, ErstellerAbteilung,...)
Dadurch kann ich ein paar Roundtrips verhindern. Gibt es eine noch bessere Möglichkeit?

Vielen Dank,
slide

L
770 Beiträge seit 2006
vor 14 Jahren

Gibt es nicht so etwas in der Art, dass der MS SQL 2008 unterstützt?
(Ich verwende keinen, daher kann ich das nicht genau sagen)

Vielleicht hilft dir das hier:
http://msdn.microsoft.com/en-us/magazine/cc794278.aspx

Besonders der untere Teil wo es ob HierarchyID geht.

lg Lion

S
slide Themenstarter:in
49 Beiträge seit 2008
vor 14 Jahren

Leider hilft mir die HierarchyID nicht weiter. Sie wird nur verwendet um eine Hirarchie innerhalb einer Tabelle herzustellen.
Ich möchte die Daten schon in getrennten Tabellen haben. Alleine schon aus Performance-Gründen beim späteren Auslesen, sowie auch zur Übersichtlichkeit.
Das darüber geht eher in die Richtung dessen, was ich machen will.

Wobei mich dabei wundert, dass sie nicht wie ich:

INSERT INTO XYZ VALUES (Wert1,Wert2)
SET @ID = SCOPE_IDENTITY();

machen, sondern:

SELECT @ID = MAX(ID)+10 FROM XYZ;
INSERT INTO XYZ VALUES (@ID,Wert1,Wert2);

Das ist doch sehr gefährlich, wenn evtl. mehrere Einträge parallel eingefügt werden sollen. Oder verstehe ich da etwas nicht richtig? Oder sehen die es als so unwahrscheinlich an, dass da etwas dazwischen kommt, dass sie es ignorieren?