Можете да разрешите това, като добавите таблица на подтипове (аз също бих предпочел таблица за справка пред enum, още повече, защото искате да сте гъвкави и да добавите още типове по-късно):
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)
Ако искате да се съхраняват различни данни за другите опции, тогава можете да добавите EventYI
таблица (за Yes Immediate
), EventNO
и др.
Единственият проблем с този дизайн е, че нищо не пречи на събитие, което не е 'Yes Later'
за добавяне в EventYL
таблица, така че това трябва да бъде наложено в противен случай. Ако само MySQL имаше ограничения за проверка, таблицата можеше да се промени в:
EventYL
------- --- YesLater version 2
EventId
Choice
EventDate
PRIMARY KEY(EventId, Choice)
FOREIGN KEY (EventId, Choice)
REFERENCES Event(EventId, Choice)
CHECK (Choice = 'YL')