Du kan lösa detta genom att lägga till en undertypstabell (jag skulle också föredra en uppslagstabell framför enum, ännu mer eftersom du vill vara flexibel och lägga till fler typer senare):
ChoiceType
---------- --- the lookup table
Choice
Desciption
PRIMARY KEY(Choice)
Event
----- --- your table
EventId
Choice
... other stuff for all events
PRIMARY KEY(EventId)
FOREIGN KEY (Choice)
REFERENCES ChoiceType(Choice)
EventYL
------- --- the YesLater table
EventId
EventDate
... other stuff for YesLater events only
PRIMARY KEY(EventId)
FOREIGN KEY (EventId)
REFERENCES Event(EventId)
Om du vill ha annan data lagrad för de andra valen kan du lägga till en EventYI
tabell (för Yes Immediate
), ett EventNO
, etc.
Det enda problemet med den här designen är att ingenting hindrar en händelse som inte är 'Yes Later'
som ska läggas till i EventYL
tabell, så detta bör tillämpas på annat sätt. Om bara MySQL hade kontrollbegränsningar, kunde tabellen ändras till:
EventYL
------- --- YesLater version 2
EventId
Choice
EventDate
PRIMARY KEY(EventId, Choice)
FOREIGN KEY (EventId, Choice)
REFERENCES Event(EventId, Choice)
CHECK (Choice = 'YL')