Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cột phụ thuộc vào giá trị cột khác

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trình điều khiển jdbc org.gjt.mm.mysql.Driver để làm gì?

  2. Kết nối với mysql trên một máy chủ khác

  3. Cách triển khai Percona XtraDB Cluster 8 để có tính khả dụng cao

  4. Ví dụ về móc bộ lọc để cập nhật mục có trường liên quan

  5. chọn cột là true / false nếu id tồn tại trong bảng khác