Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Spalte abhängig von anderem Spaltenwert

Sie könnten dies lösen, indem Sie eine Untertyptabelle hinzufügen (ich würde auch eine Nachschlagetabelle einer Aufzählung vorziehen, noch mehr, weil Sie flexibel sein und später weitere Typen hinzufügen möchten):

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)

Wenn Sie möchten, dass für die anderen Auswahlmöglichkeiten andere Daten gespeichert werden, können Sie ein EventYI hinzufügen Tabelle (für Yes Immediate ), ein EventNO usw.

Das einzige Problem bei diesem Design ist, dass nichts ein Ereignis verhindert, das nicht 'Yes Later' ist im EventYL hinzuzufügen Tabelle, daher sollte dies anderweitig erzwungen werden. Wenn nur MySQL Check Constraints hätte, könnte die Tabelle geändert werden in:

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