Frank (no reg): Tabellen Verknüpfen oder anderer DB aufbau ?

Beitrag lesen

Hallo,

dein Datenbankaufbau ist falsch oder einfach nur schlecht, wenn du die Anforderungen damit nicht oder nur mit viel Umweg erfüllen kannst. Deine Anforderungen sind in Einzelfall solche Abfragen, wie:

wenn ich z.B. alle Projekte bei denen der student herbert(ID=1) gearbeitet hat ausgeben will ...
und was selectiere und joine ich wenn ich alle projekte eines studenten mit allen anderen verknüpften angaben wie jahr, TAGs, semester usw. haben will.

Wie du erwähnt hast, hast du bereits Tabellen, welche die einzelnen Entitäten miteinander in Beziehung setzen:

dazu hab ich 5 tabellen: projekt_dozent, projekt_jahr, projekt_semester, projekt_student, projekt_TAG

wenn ich z.B. alle Projekte bei denen der student herbert(ID=1) gearbeitet hat ausgeben will ...

Dafür würde schon grundsätzlich mal einfach die Abfrage
SELECT projekt, student FROM projekt_student WHERE student = 1 ausreichen.

Da du aber vielleicht den Projektnamen und den Studentennamen mit dazunehmen willst, solltest du auch auf die beiden Entitätstabellen projekt und student joinen:

  
SELECT projekt, student, p.Value AS ProjektName, s.Value as StudentName  
  FROM projekt_student ps  
  INNER JOIN projekt p  
    ON p.Id = ps.projekt  
  INNER JOIN student s  
    ON s.Id = ps.student  
  WHERE s.Id = 1  

Nach dem selben Schema, einfach INNER JOINs oder LEFT JOINs, verfährst du für die weiteren Tabellen. Für die Verknüpfungstabellen würde ich dir LEFT JOINs empfehlen, da dort vielleicht keine Einträge vorhanden sind. Für die Entitäten solltest du vorrangig (meine Empfehlung) mit INNER JOINs arbeiten, da Ids in den Verknüpfungstabellen eigentlich auch in den Entitätstabellen enthalten sein sollten. Es ist vielleicht auch ganz nützlich, die Abfrage immer bei einer Verknüpfungstabelle zu beginnen und dann _sternförmig_ zu den anderen Tabellen zu gehen. ;)

Auf den ersten Blick halte ich dein Modell nicht für zu kompliziert. Allerdings solltest du statt VALUE vielleicht sinntrefferendere Spaltennamen vergeben. Evt möchtest du ja mehrere Infos zu einem Dozenten speichern als nur einen VALUE. ;)

HTH, Ciao, Frank