gpt4 book ai didi

mysql - 涉及多个子类项的关系

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

我目前正在设计“Bar Beer Drinkers”数据库的扩展(该数据库通常用于教授基本 SQL 查询)。

作为设计的一部分,我创建了遵循“ISA”模式的实体,具体来说:“啤酒”、“食品”和“其他元素”都是“元素”的“子类”。

涉及的另一个实体是 Bars 实体。

在条形图和项目之间,我有一个名为“销售”的关系实体。

这些表的架构如下:

Bar[ID(pk), Name, State, Address, Phone, Open, Close]
Beers[Name(pk), Manf]
Food[Name(pk), Manf]
OtherItems[Name(pk), Manf].

就目前情况而言,我没有名为“Items”的表。

对于 Sells 表,架构为:

Sells[barID(fk), item(fk), price]

我希望将三个表中的 PK 全部映射到销售中的“项目”列中。也就是说,我可以在其中放入啤酒名称、食物名称或其他项目名称。

这似乎在 MySQLWorkBench 中不起作用,因为它不允许我将多个外键引用到同一列。

我对这个问题的潜在解决方法是:

Sells[barID{fk), beerItem(fk), foodItem(fk), otherItem(fk), price]

然而,这将导致每个元组至少有两个空值。这是可以接受的吗?在 SQL 关系实体中包含“ISA”关系的首选方式是什么?

最佳答案

这个问题与 this one 非常相似。答案基本相同:不,不能有多个外键指向同一列。正如该问题的回答者 Guffa 所说:“你如何知道在哪里寻找 key ?”

您可以使用建议的解决方案来完成此操作,尽管正如您所指出的,这并不理想。它根本没有标准化。

问题是子类型有多个表。真正的答案是拥有您当前没有的“项目”表并添加一个“类型”字段。

项目{ItemID(pk), ItemName, ItemType}

这样您就可以使用 ItemID 作为您最初想要的外键。然而,您选择的方式取决于您的需求/目标等,但您不能将多个表作为外键链接到同一列。这样做存在一个不明确的问题,数据库无法解决。

关于mysql - 涉及多个子类项的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53027609/

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