SQL Datenbank 3. Normalform und Löschen von Datensätzen

Ghost_Rider_R

Lieutenant
Registriert
Nov. 2009
Beiträge
759
Hallo miteinander,
für unser Technikerprojekt haben wir uns folgendes Datenbank model ausgedacht:

--> siehe Anhang.

1 Frage:

Ist das Datenbankmodel so in der 3. Normalform oder haben wir einen grundlegenden Denkfehler hierbei gemacht?

2. Frage:

Wie verhält es sich, wenn ein Datensatz aus der Datenbank gelöscht wird aber eine Abhängigkeit in einer Zwischentabelle besteht und der andere Datensatz in der Luft hängt, da es keine Zuordnung mehr gibt. Wie umgeht man entsprechende Probleme, oder ist das Löschen von Datensätzen nicht vorgesehen?

vielen Dank für eure Hilfe
grüße Ruff :)
 

Anhänge

  • datenbank-design.jpg
    datenbank-design.jpg
    35,4 KB · Aufrufe: 178
mit einem trigger oder einen constraint umgeht man das problem ganz einfach. oder direkt dafür sorgen das (welches programm auch immer die löschung vornimmt) stets alle abhänigkeiten beseitigt werden.

ich sage aber gleich das es sicher weder die univereselle noch die beste lösung ist.

wenn für einen datensatz ein teil fehlt ist es abhänig davon welche DB du nutzt und wie das programm mit solchen fehlenden datensätzen umgeht, ist aber auch unschän so viel datenmüll zu sammeln....

auch wenn ihr strikt die 3 NN haben wollt, ist die letzer verknüpfung irgendwie überflüssig, zumindest im Moment, wenn gerne nur einen string zurück gibt. da kann man auch enum felder o.ä. nutzen,
 
Zuletzt bearbeitet:
...also noch eine Zusatzinformation:

Wir schreiben auch das Programm, dass nacher die Datenbank verwaltet.
 
DB Schema ok, bis auf die "albumtitel" Tabelle, die brauchts meiner Meinung nicht, weil du kein Track an mehreren Alben hinzufügen kannst. In der Theorie ja möglich, da ein Lied auf mehreren CD's vorkommen könnte, aber dann müsste die Spielzeit, TrackNr und etc. stimmen.

Lösschen, wenn du Constraints richtig gessetzt hast, kannst gar nicht falsch löschen. Du musst dann sozusagen den Datensatz von Tabelle zu Tabelle eingenständig löschen oder du hast wie schon oben erwähnt einen Trigger defniert oder definierst es bei den Constraints
http://en.wikipedia.org/wiki/Foreign_key

Wenn du keine Constraints zwischen den Tabellen defniert hast, kannst normalerweise löschen, so wie du willst, nur wirst du dann Datenmüll machen.

Denke, wenn du ein wenig dich einarbeiten willst, würde ich von Tabelle zu Tabelle zuerst versuchen, dann lernst du auch ein wenig, wie sich die Datensätze zueinander verhalten.
Löschen via Contraints, kann je nach DB ein wenig anderst sein.
 
Zurück
Oben