gpt4 book ai didi

mysql - 外键可以多次使用吗?

转载 作者:行者123 更新时间:2023-11-29 19:11:24 27 4
gpt4 key购买 nike

对新手问题表示歉意。

表(例如 Holiday)的主键类似于 Holiday_ID。假期引用您可以根据您购买的机票购买去度假类型的度假机票。

假设我在具有 Customer_ID 的复合实体中使用 Holiday_ID 来标识与客户关联的 Holiday 实例,无论出于何种目的。

但是,假设我还想跟踪与此实例相关的其他信息:客户为机票支付了多少钱,客户尚未为机票支付多少钱

我有两个选择:

a) 我可以创建另一个复合实体。但是,我不确定是否可以这样做,因为我不确定是否可以多次使用特定的外键

b) 我可以创建一个复合/关联实体,但是,我不确定是否可以创建一个具有两个以上外键的复合实体?

最佳答案

为了回答您问题的技术部分,一旦您创建了复合唯一键或主键,表中只有一条记录可以在该键中定义的一组字段中具有相同的值。所以,不,您不能对同一客户重复使用 HolidayId 键。如果您愿意,您可以将其与其他不同的客户一起使用。
其次,唯一键或主键中可以包含的属性数量没有限制。如果需要,并且如果适当且符合规范化规则,则键可以包含表的所有属性。

第三,回答下面的问题,表中的任何列或列集都可以定义为外键,只要它也是数据库中某个表的主键或唯一键。一个表中可以定义任意数量的 FK,它们甚至可以重叠。 (您可以将 HolidayId 作为 FK,也可以将 HolidayIDCustomerId 作为复合 FK)唯一的限制是 FK 必须引用数据库中某个表的主键或唯一键。(它也可以是 FK 所在的同一个表,就像您将 supervisorId 添加到 employee 时一样是同一个 employee 表的 EMployeeId 的 FK 的表)

此示例说明了使用代理键而不同时使用自然键的问题之一。也就是说,“假期”到底是什么? 2016 年圣诞节与 2015 年圣诞节是同一个“假期”吗?阿鲁巴岛的圣诞节和夏威夷的圣诞节是同一个假期吗?

然后,关于识别客户与假期关联的复合表,如果客户明年圣诞节去阿鲁巴,是相同的关联还是不同的实例?如果客户想要 5 张票,表中的行代表什么?

数据库设计中应该做的第一件事是逻辑设计,它以业务术语尽可能清晰、明确地定义数据库中每个表的实体的含义。

关于mysql - 外键可以多次使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43049986/

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