Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datenstruktur in Datenbank eintragen. Schnellste Möglichkeit gesucht.
slide
myCSharp.de - Member



Dabei seit:
Beiträge: 49

Themenstarter:

Datenstruktur in Datenbank eintragen. Schnellste Möglichkeit gesucht.

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
slide
myCSharp.de - Member



Dabei seit:
Beiträge: 49

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers