我正在尝试正确使用外键来维护数据完整性。我不是一个真正的数据库专家,所以我想知道是否有一些我不知道的一般设计原则。这是我正在尝试做的一个例子:
假设您要构建具有类型(汽车、卡车等)、品牌和型号的车辆数据库。用户必须至少输入 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 并从它向后工作。
我完全不依赖于数据库设计,所以我愿意改变表的设置方式。有任何想法吗?
PS - 如果有人感兴趣,我正在使用 mysql,但这更多是关于数据库的一般问题。
编辑(澄清):
车辆表中需要 -type_id 和 make_id ,除非在 model_id 为空的情况下有某种方法可以找出它们;
- 需要维护 type_id、make_id 和 model_id 之间的关系。