MySQL: Zwei Spalten - mehrere Foreign-Keys

Tommy57

Erfahrenes Mitglied
Hallo Leute,

ich habe eine Tabelle mit einer Spalte, die auf verschiedene Tabellen verweist. Ich würde dieser Spalte gerne mehrere Foreign-Keys hinzufügen, die an eine zwei Spalte gebunden wären.

Zwei Beispiele:
- Wenn in der Tabelle desk id 12 gelöscht wird, sollen in der Tabelle cart alle Zeilen gelöscht werden, wo item_id 12 steht UND item_type = desk steht.
Code:
DELETE FROM desk WHERE id = 12;
DELETE FROM cart WHERE item_id = 12 AND item_type = 'desk';

- Wenn in der Tabelle shelf id 17 gelöscht wird, sollen in der Tabelle cart alle Zeilen gelöscht werden, wo item_id 17 UND item_type = shelf steht.
Code:
DELETE FROM shelf WHERE id = 17;
DELETE FROM cart WHERE item_id = 17 AND item_type = 'shelf';

Ich habe versucht das Ganze mal etwas vereinfacht darzustellen.

Hatte schon überlegt, dass vllt mit Views zu lösen, aber hab mich gefragt, ob es nicht noch einfacher geht.

Gruß, Tommy

EDIT:
Bei Views wäre das Problem, dass ich keine INSERT in die Views machen könnte, wo ich der item_type Spalte einen Default Wert je View geben könnte und ich könnte auch keine Foreign-Keys verwenden. Somit helfen mir Views gar nicht weiter.
 
Zuletzt bearbeitet:
Bei Views kannst du weder insert, update noch delete brauchen. Die haben einen anderen Einsatzzweck. Aber nicht hier für deine Frage.

Für diese Aufgabe könntest du hingegen Trigger verwenden. Hier ein gutes Beispiel (erster Code beschreibt genau deinen Fall): http://code.tutsplus.com/articles/introduction-to-mysql-triggers--net-12226

Allerdings muss ich auch sagen, dass ich selber trigger etwas gefährlich finde. Als Enduser setzt man ein SQL ab, hat dann aber keine Ahnung was man sonst noch alles im verborgenen angestossen hat. Wenn Trigger nur zur Einhaltung der Daten Integrität verwendet werden, ok. Aber man kann die auch für was ganz anderes verwenden.

Die eigentliche Frage lautet, wer löscht wie genau? Setzt du direkt SQL ab? Oder aus einer PHP Applikation?

Eine Variante wäre auch, dass du dir eine Prozedur erstellst, welche die Erforderlichen deletes startet. Wenn du dann was löschen willst, verwendest du einfach die und die ganze Logik steck dann darin. Diesen Ansatz finde ich persönlich übersichtlicher.
 
Danke für die schnelle Antwort BaseBallBatBoy.

Es ist nur für das Backend vorgesehen und kann dort im PHP Code perfekt in die Logik mit integriert werden.

Gruß, Tommy
 
Zurück