Můžete to vyřešit přidáním tabulky podtypů (také bych preferoval vyhledávací tabulku před enum, ještě více, protože chcete být flexibilní a přidat další typy později):
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)
Chcete-li pro ostatní možnosti uložit jiná data, můžete přidat EventYI
tabulka (pro Yes Immediate
), EventNO
, atd.
Jediný problém s tímto návrhem je, že nic nebrání události, která není 'Yes Later'
přidat do EventYL
tabulky, takže by to mělo být vynuceno jinak. Pokud by pouze MySQL mělo kontrolní omezení, mohla by být tabulka změněna na:
EventYL
------- --- YesLater version 2
EventId
Choice
EventDate
PRIMARY KEY(EventId, Choice)
FOREIGN KEY (EventId, Choice)
REFERENCES Event(EventId, Choice)
CHECK (Choice = 'YL')