XOR abbilden?
-
Hi,
ich möchte ein Ticketsystem aufstellen, also für unterschiedliche Arten von Meldungen. Eine Meldung kann z.B. ein Supportticket sein, aber auch ein Crashreport oder eine Kaufbenachrichtigung. Es gibt jetzt aber verschiedene Arten von Tickets, wobei viele einiges gemeinsam haben. Meine Idee war jetzt, dass ich eine Tabelle für ein Ticket mit den gewöhnlichen Eigenschaften habe und dann noch Tabellen, welche die Spezialtickets abhandeln. So was wie:
create table ticketA ( id int, # irgendwelche spezifischen Eigenschaften primary key(id)); create table ticketB ( id int, # irgendwelche anderen spezifischen Eigenschaften primary key(id)); create table ticket ( id int, # gemeinsame Eigenschaften ticketA_id int default null, ticketB_id int default null, primary key(id), foreign key... );
Streng genommen sind ticketA_id/ticketB_id jetzt xor, d.h. es sollte nicht beide gleichzeitig geben.
Kann man das irgendwie abbilden? Oder wie würdet ihr verschiedene Ticketarten lösen?
Edit: Falls wichtig nutze ich MySQL. Und als Engine bevorzuge ich zurzeit InnoDB, weil die Fremdschlüsselbeziehungen sonst irgendwie nicht bindend zu sein scheinen.
-
Eisflamme schrieb:
Streng genommen sind ticketA_id/ticketB_id jetzt xor, d.h. es sollte nicht beide gleichzeitig geben.
So wie ich dich verstanden habe, dürfen auch ticketA_id und ticketB_id null sein.
Eisflamme schrieb:
Kann man das irgendwie abbilden? Oder wie würdet ihr verschiedene Ticketarten lösen?
Man kann da wahrscheinlich was mit Constraints machen. Davon rate ich in dem Szenario aber ab.
Viel einfacher und eleganter wäre, wenn die speziellen Tickets auf das generelle Ticket verweisen. Dann sparst du dir mindestens eine unnötige Variable.
Also einfach die "Zeiger" umdrehen, dann hast du die xor-Problematik nicht
edit: Zeiger gehochkommat
-
Hi,
stimmt, das wäre die sauberste Variante. Wie mache ich dann geschickt einen SELECT über alle Tickets, wenn ich die ticketA-spezifischen Informationen ebenfalls mit drin habe möchte? Quasi ein
SELECT * FROM ticket
mit JOINs zu allen spezifischen Tabellen? Ist vermutlich das einfachste.Dankeschön!
Beste Grüße