gpt4 book ai didi

mysql - 带外键问题的数据库设计

转载 作者:行者123 更新时间:2023-11-29 01:48:00 25 4
gpt4 key购买 nike

我正在尝试正确使用外键来维护数据完整性。我不是真正的数据库专家,所以我想知道是否有一些我不知道的通用设计原则。这是我正在尝试做的一个例子:

假设您要构建一个包含类型(汽车、卡车等)、品牌和型号的车辆数据库。用户必须至少输入 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_id FK 并从中逆向计算。

我完全不受数据库设计的束缚,所以我对必须更改表设置方式的可能性持开放态度。有什么想法吗?

附言- 如果有人感兴趣,我正在使用 mysql,但这更像是关于数据库的一般问题。

编辑(澄清):

车辆表中需要 type_id 和 make_id,除非在 model_id 为空的情况下有某种方法可以计算出它们;

-需要维护type_id、make_id和model_id之间的关系。

最佳答案

您正在寻找的是 CHECK 约束。不幸的是,MySQL 目前不支持这个。您可以使用触发器模拟此类功能,但您需要创建一个 INSERT 和一个 UPDATE 触发器才能使其工作。

但是,正如其他答案所表明的那样,您真正应该存储的只是车辆模型。在您的应用程序中,您应该深入了解类型(如果可用)。

关于mysql - 带外键问题的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1732549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com