Você pode resolver isso adicionando uma tabela de subtipos (eu também preferiria uma tabela de pesquisa em vez de enum, ainda mais porque você deseja ser flexível e adicionar mais tipos posteriormente):
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)
Se você quiser que dados diferentes sejam armazenados para as outras opções, você pode adicionar um
EventYI
tabela (para Yes Immediate
), um EventNO
, etc O único problema com este design é que nada impede um evento que não seja
'Yes Later'
a ser adicionado no EventYL
tabela, portanto, isso deve ser aplicado de outra forma. Se apenas o MySQL tivesse restrições de verificação, a tabela poderia ser alterada para:EventYL
------- --- YesLater version 2
EventId
Choice
EventDate
PRIMARY KEY(EventId, Choice)
FOREIGN KEY (EventId, Choice)
REFERENCES Event(EventId, Choice)
CHECK (Choice = 'YL')