1:n richtiger Umgang (Anfänger)

shaun1981

Benutzer
Beiträge
8
Hallo zusammen,

bei meinem letzten Post habt ihr mich hier auf die richtige Spur gebracht - also will ich hier nochmal eine Frage stellen.

Via App (WPF) die ich momentan entwickle schreibe ich Leistungsdaten in eine Datenbank und bin mir
nicht sicher ob mein Vorgehen so richtig ist.

Die Datenbank enthält folgende Tabellen:

1 Table Basisdaten (Parent | Ist - Identity = true)
2 Table Zusatzdaten1 (Aufträge)
3 Table Zusatzdaten2 (Verlusteinträge)


Momentan schreibe ich die Basisdaten in die Tabelle 1 und ermittle anschließend den höchsten ID Wert via
"SELECT MAX(ID) FROM [Parent]".

Die ID die ich so erhalte hinterlege ich anschließend als Fremdschlüssel beim schreiben der Zusatzdaten.

Meine Frage ist:

Wenn ich in Zukunft einen Datensatz lösche - kann es passieren das ein neu geschriebener Datensatz irgendeinen "freien" Platz in der Tabelle einnimmt und so evtl. nicht die höchste ID in der Tabelle zugewiesen bekommt ?

Ist das Vorgehen grundsätzlich richtig - oder was gibt es sonst besser o. sicherer zu machen ?

Danke im voraus.
 
Werbung:
Momentan schreibe ich die Basisdaten in die Tabelle 1 und ermittle anschließend den höchsten ID Wert via
"SELECT MAX(ID) FROM [Parent]".

Die ID die ich so erhalte hinterlege ich anschließend als Fremdschlüssel beim schreiben der Zusatzdaten.

Ist das Vorgehen grundsätzlich richtig ?

Nein. Es ist grundsätzlich falsch. Nutze die Möglichkeiten, die die DB bietet, um die letzte vergebene ID zu ermitteln. Das ist dann sicher, auch in Hinblick auf Multi-User-Umgebungen und auch im Hinblick auf gelöschte ID's.
 
Alternativ kannst du mit SELECT newid() in MSSQL einen Uniqueidentifer holen und dann als primary key verwenden. Das ist nicht so optimal aber immernoch besser als dein Ausgangszustand.
 
Werbung:
Zurück
Oben