【发布时间】:2009-11-13 23:28:38
【问题描述】:
我正在尝试正确使用外键来维护数据完整性。我不是一个真正的数据库专家,所以我想知道是否有一些我不知道的一般设计原则。这是我正在尝试做的一个示例:
假设您要建立一个包含类型(汽车、卡车等)、品牌和型号的车辆数据库。用户必须至少输入 Type,但 Make 和 Model 是可选的(如果给出了 Model,那么 Make 是必需的)。我的第一个想法是这样设置数据库:
Type:
-id (PK)
-description
Make:
-id (PK)
-type_id (FK references Type:id)
-description
Model:
-id (PK)
-make_id (FK references Make:id)
-description
Vechicle:
-id (PK)
-type_id (FK references Type:id)
-make_id (FK references Make:id)
-model_id (FK references Model:id)
您将如何设置车辆的 FK 以确保类型、品牌和型号都匹配?例如,您将如何防止车辆出现(类型:摩托车、制造商:福特、型号:思域)?其中每一个都是有效的 FK,但它们不维护通过其他表的 FK 显示的关系。
另外,由于不需要 Model,我不能只存储 model_id FK 并从它向后工作。
我完全不受数据库设计的束缚,因此我愿意改变表的设置方式。有什么想法吗?
附: - 如果有人感兴趣,我正在使用 mysql,但这更多是关于数据库的一般问题。
编辑(澄清):
-type_id 和 make_id 在车辆表中是必需的,除非在 model_id 为 null 的情况下有办法找出它们;
——需要维护type_id、make_id和model_id之间的关系。
【问题讨论】:
-
您的 Vehicle 表中不需要列 make_id 和 type_id。
标签: mysql database-design foreign-keys foreign-key-relationship