Servus zusammen!
Ich schreibe derzeit an kleiner kleinen Webapplikation mit PHP und
PostgreSQL. Nachdem ich meine Arbeit schon fast fertig hatte, habe ich
gemerkt, dass ich mit meinem bisherigen Datenbank-Layout mein Problem
offenbar nicht lösen kann und habe nun, auch als Redundanz-Gründen, auf
n:m Beziehungen umgestellt.
Hier ein kleiner Auszug aus meinem Layout:
table: main
id_number (serial primary key)
......
table: sequence_help
id_number_main (integer)
id_number_sequence (integer)
table: sequence
absolute_id (serial primary key)
id_number (integer)
sequence (text)
Meine gewünschten Ergebnisse erhalte ich nun mit:
select * from main, sequence_help, sequence where main.id_number = sequence_help.id_number_main AND sequence_help.id_number_sequence = sequence.id_number;
Nun stehe ich vor folgendem Problem:
Ich möchte die Daten (einzelne Zeilen) auch löschen können. Prinzipiell funktioniert dies mit "references on delete cascade", jedoch stellt sich das Problem, dass Daten in der Tabelle "sequence" mehrfach referenziert werden können.
Folgendes hatte ich mir dazu überlegt: Wird ein Datensatz in main gelöscht, werden automatisch alle dazugehörigen Referenzen in "sequence_help" mitgelöscht (references on delete cascade), die Tabelle Sequence bleibt zuerst unangetastet. Dort muss ich nun allerdings regelmäßig überprüfen, ob noch Referenzen auf einen Eintrag X existieren und wenn nicht, sollte dieser gelöscht werden. Wie lässt sich das lösen? Evtl. mit einem Trigger? Ich habe diesbzgl. ein wenig rumprobiert, es jedoch leider vom Syntax (falls es überhaupt geht) her nicht hinbekommen.
Irgendwelche Vorschläge?
Danke im voraus.
Ich schreibe derzeit an kleiner kleinen Webapplikation mit PHP und
PostgreSQL. Nachdem ich meine Arbeit schon fast fertig hatte, habe ich
gemerkt, dass ich mit meinem bisherigen Datenbank-Layout mein Problem
offenbar nicht lösen kann und habe nun, auch als Redundanz-Gründen, auf
n:m Beziehungen umgestellt.
Hier ein kleiner Auszug aus meinem Layout:
table: main
id_number (serial primary key)
......
table: sequence_help
id_number_main (integer)
id_number_sequence (integer)
table: sequence
absolute_id (serial primary key)
id_number (integer)
sequence (text)
Meine gewünschten Ergebnisse erhalte ich nun mit:
select * from main, sequence_help, sequence where main.id_number = sequence_help.id_number_main AND sequence_help.id_number_sequence = sequence.id_number;
Nun stehe ich vor folgendem Problem:
Ich möchte die Daten (einzelne Zeilen) auch löschen können. Prinzipiell funktioniert dies mit "references on delete cascade", jedoch stellt sich das Problem, dass Daten in der Tabelle "sequence" mehrfach referenziert werden können.
Folgendes hatte ich mir dazu überlegt: Wird ein Datensatz in main gelöscht, werden automatisch alle dazugehörigen Referenzen in "sequence_help" mitgelöscht (references on delete cascade), die Tabelle Sequence bleibt zuerst unangetastet. Dort muss ich nun allerdings regelmäßig überprüfen, ob noch Referenzen auf einen Eintrag X existieren und wenn nicht, sollte dieser gelöscht werden. Wie lässt sich das lösen? Evtl. mit einem Trigger? Ich habe diesbzgl. ein wenig rumprobiert, es jedoch leider vom Syntax (falls es überhaupt geht) her nicht hinbekommen.
Irgendwelche Vorschläge?
Danke im voraus.
Kommentar