サブタイプテーブルを追加することでこれを解決できます(柔軟性があり、後でタイプを追加したいので、列挙型よりもルックアップテーブルの方が好きです):
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)
他の選択肢のために別のデータを保存したい場合は、EventYI
を追加できます。 テーブル(Yes Immediate
の場合 )、EventNO
、など。
この設計の唯一の問題は、'Yes Later'
ではないイベントを妨げるものが何もないことです。 EventYL
に追加されます テーブルなので、これは別の方法で強制する必要があります。 MySQLのみにチェック制約がある場合、テーブルは次のように変更できます。
EventYL
------- --- YesLater version 2
EventId
Choice
EventDate
PRIMARY KEY(EventId, Choice)
FOREIGN KEY (EventId, Choice)
REFERENCES Event(EventId, Choice)
CHECK (Choice = 'YL')