sql >> Databáze >  >> RDS >> Mysql

Sloupec závisí na hodnotě jiného sloupce

Můžete to vyřešit přidáním tabulky podtypů (také bych preferoval vyhledávací tabulku před enum, ještě více, protože chcete být flexibilní a přidat další typy později):

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)

Chcete-li pro ostatní možnosti uložit jiná data, můžete přidat EventYI tabulka (pro Yes Immediate ), EventNO , atd.

Jediný problém s tímto návrhem je, že nic nebrání události, která není 'Yes Later' přidat do EventYL tabulky, takže by to mělo být vynuceno jinak. Pokud by pouze MySQL mělo kontrolní omezení, mohla by být tabulka změněna na:

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



  1. Jak používat připravené příkazy v dotazech s klauzulí IN v PHP

  2. v mých kódech se stále objevuje chyba (připojení je již otevřeno)

  3. MySQL – vyberte, chcete-li načíst poslední datum a čas

  4. Smazat SQLite