Rolf b: Datenbanken

Beitrag lesen

Hallo Uri,

du hast natürlich irgendwie eine m:n Beziehung zwischen Gebäude und Ausgabentyp, aber das ist eigentlich überhaupt kein Problem. Du kannst problemlos einen dreifachen Join über alle Tabellen machen, zwischen Gebäude und Ausgabe per Gebäude-ID, zwischen Ausgabe und Ausgabentyp über die Ausgabentyp-ID.

SELECT G.Gebäude-ID, AT.Bezeichnung, A.Jahr, A.Kosten
FROM Gebäude G 
     LEFT JOIN Ausgaben A ON G.ID=A.Gebäude-ID
     JOIN Ausgabentypen AT ON A.Ausgabentyp-ID=AT.ID

und natürlich kannst Du das gruppieren und summieren wie Du es brauchst. LEFT JOIN für Gebäude->Ausgaben deshalb, damit Du für Gebäude ohne Ausgaben eine "Fehlanzeige" hast.

Aber Ausgabentyp-ID und Gebäude-ID in Ausgaben einzigartig - das wäre nicht Sinn der Sache, nicht wahr? Wenn überhaupt, muss die Kombination (Gebäude-ID, Ausgabentyp-ID, Jahr) einzigartig sein. WENN das so ist, kannst Du das über einen unique index sicherstellen; der hilft Dir ohnehin, wenn Du für ein Gebäude alle Ausgaben sammeln willst.

Die ID in der Ausgaben-Spalte brauchst Du eigentlich nur für CRUD-Operationen, um den Satz schnell wiederzufinden. Du könntest auch drauf verzichten und statt dessen Gebäude-ID, Ausgabentyp-ID und Jahr als Primärschlüssel der Ausgaben verwenden, das hängt davon ab, ob diese Kombination in deinen Daten tatsächlich eindeutig ist. Wenn nicht - nagut, dann doch die eigene ID Spalte und ein non-unique Index.

Rolf