Vous pouvez résoudre ce problème en ajoutant une table de sous-types (je préférerais également une table de recherche plutôt qu'une énumération, encore plus parce que vous voulez être flexible et ajouter plus de types plus tard) :
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)
Si vous souhaitez stocker des données différentes pour les autres choix, vous pouvez ajouter un EventYI
tableau (pour Yes Immediate
), un EventNO
, etc.
Le seul problème avec cette conception, c'est que rien n'empêche un événement qui n'est pas 'Yes Later'
à ajouter dans le EventYL
table, cela devrait donc être appliqué autrement. Si seulement MySQL avait des contraintes de vérification, la table pourrait être changée en :
EventYL
------- --- YesLater version 2
EventId
Choice
EventDate
PRIMARY KEY(EventId, Choice)
FOREIGN KEY (EventId, Choice)
REFERENCES Event(EventId, Choice)
CHECK (Choice = 'YL')