Mysql
 sql >> Database >  >> RDS >> Mysql

Colonna dipendente da un altro valore di colonna

Potresti risolverlo aggiungendo una tabella di sottotipi (preferirei anche una tabella di ricerca su enum, anche di più perché vuoi essere flessibile e aggiungere più tipi in seguito):

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 desideri memorizzare dati diversi per le altre scelte, puoi aggiungere un EventYI tabella (per Yes Immediate ), un EventNO , ecc.

L'unico problema con questo design è che nulla impedisce un evento che non sia 'Yes Later' da aggiungere in EventYL tabella, quindi questo dovrebbe essere applicato in caso contrario. Se solo MySQL avesse vincoli di controllo, la tabella potrebbe essere modificata in:

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