Du kan løse dette ved at tilføje en undertypetabel (jeg ville også foretrække en opslagstabel frem for enum, endnu mere, fordi du vil være fleksibel og tilføje flere typer senere):
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)
Hvis du vil have andre data gemt for de andre valg, så kan du tilføje en EventYI
tabel (for Yes Immediate
), en EventNO
osv.
Det eneste problem med dette design er, at intet forhindrer en begivenhed, der ikke er 'Yes Later'
skal tilføjes i EventYL
tabel, så dette bør håndhæves ellers. Hvis kun MySQL havde check-begrænsninger, kunne tabellen ændres til:
EventYL
------- --- YesLater version 2
EventId
Choice
EventDate
PRIMARY KEY(EventId, Choice)
FOREIGN KEY (EventId, Choice)
REFERENCES Event(EventId, Choice)
CHECK (Choice = 'YL')