Możesz rozwiązać ten problem, dodając tabelę podtypów (wolałbym również tabelę przeglądową niż enum, nawet bardziej, ponieważ chcesz być elastyczny i dodać więcej typów później):
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)
Jeśli chcesz przechowywać inne dane dla innych opcji, możesz dodać EventYI
tabela (dla Yes Immediate
), EventNO
itp.
Jedynym problemem związanym z tym projektem jest to, że nic nie stoi na przeszkodzie zdarzeniu, które nie jest 'Yes Later'
do dodania w EventYL
tabeli, więc powinno to być egzekwowane w przeciwnym razie. Gdyby tylko MySQL miał ograniczenia sprawdzające, tabela mogłaby zostać zmieniona na:
EventYL
------- --- YesLater version 2
EventId
Choice
EventDate
PRIMARY KEY(EventId, Choice)
FOREIGN KEY (EventId, Choice)
REFERENCES Event(EventId, Choice)
CHECK (Choice = 'YL')