Bạn có thể giải quyết vấn đề này bằng cách thêm một bảng kiểu con (tôi cũng thích một bảng tra cứu hơn enum, thậm chí nhiều hơn vì bạn muốn linh hoạt và thêm nhiều loại sau này):
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)
Nếu bạn muốn dữ liệu khác được lưu trữ cho các lựa chọn khác, thì bạn có thể thêm EventYI
bảng (cho Yes Immediate
), một EventNO
, v.v.
Vấn đề duy nhất với thiết kế này, là không có gì ngăn cản sự kiện không phải là 'Yes Later'
được thêm vào EventYL
bảng, vì vậy điều này nên được thực thi nếu không. Nếu chỉ MySQL có các ràng buộc kiểm tra, bảng có thể được thay đổi thành:
EventYL
------- --- YesLater version 2
EventId
Choice
EventDate
PRIMARY KEY(EventId, Choice)
FOREIGN KEY (EventId, Choice)
REFERENCES Event(EventId, Choice)
CHECK (Choice = 'YL')