Mysql
 sql >> Base de données >  >> RDS >> Mysql

Colonne dépendante d'une autre valeur de colonne

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