Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Coluna dependente de outro valor de coluna


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')