In meiner Datenbank für eine Kinoverwaltung muss bei Anlage einer neuen Vorführung in der Tabelle tblPlatzreservierung für jeden Platz des Saales ein Satensatz angelegt werden.
Wie würdet ihr diesen Trigger anlegen?
mein Quellcode sieht so aus:
create trigger Reservierungs_anlage on tblVorfuehrungen after insert as begin Declare @satzanzahl int Declare @i int = 0
select @satzanzahl = count(Sitzplatz_ide) from tblSitzplatz
while @i <= @satzanzahl - 1 begin set @i = @i + 1 insert into tblPlatzreservierung (Res_Vorfuehrung, Res_Sitzplatz) Values (Vorfuehrungsnummer, Sitzplatz_ide) end end
Problem hierbei ist, dass ich nicht jeden einzelnen Datensatz aus dem tblSitzplatz nacheinander übertragen kann. Kennt ihr eine Lösung?
Ich würde eine Tabelle mit den Kinosälen inklusive Sitzplätzen, eine für die Vorführungen und eine Belegungstabelle, die nur Verweise zwischen den Sitzplätzen und der Vorführung beinhaltet anlegen.
Die Sitzplatztabelle wird einmalig mit allen Kinosälen und Sitzplatznummern befüllt. Für neue Vorführungen wird in der Vorführungen-Tabelle ein Datensatz angelegt, der den Kinosaal enthält.
Damit hast du über einen Join alle Sitzplätze, für eine Vorführung. Per Definition ist ein Sitzplatz, der nicht belegt ist, frei. Belegte Sitzplätze trägst du als Verweis zwischen Vorführung und Sitzplatz in die Belegungstabelle.
So hast du beim Anlegen nicht die Notwendigkeit alle Sitzplätze irgendwie doppeln zu müssen. Und es fallen auch weniger Daten an, da nur noch die belegten Sitzplätze als Verweis gespeichert werden. Relationale Datenhaltung eben.