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