sql >> Base de Datos >  >> RDS >> Mysql

Columna dependiente de otro valor de columna

Puede resolver esto agregando una tabla de subtipos (también preferiría una tabla de búsqueda en lugar de una enumeración, incluso más porque desea ser flexible y agregar más tipos más adelante):

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 desea que se almacenen datos diferentes para las otras opciones, puede agregar un EventYI tabla (para Yes Immediate ), un EventNO , etc.

El único problema con este diseño es que nada impide un evento que no sea 'Yes Later' para ser agregado en el EventYL tabla, por lo que esto debe aplicarse de otra manera. Si solo MySQL tuviera restricciones de verificación, la tabla podría cambiarse a:

EventYL 
-------                --- YesLater version 2
EventId 
Choice
EventDate
PRIMARY KEY(EventId, Choice)
FOREIGN KEY (EventId, Choice)
  REFERENCES Event(EventId, Choice)
CHECK (Choice = 'YL')