涉及多个子类项的关系

j8ag8udp  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(328)

我目前正在设计一个对“bar beer drinkers”数据库的扩展(一个经常用于教授基本sql查询的数据库)。
作为设计的一部分,我创建了遵循“isa”模式的实体,特别是:“啤酒”、“食品”和“其他物品”都是“物品”的“子类”
涉及的另一个实体是bars实体。
在吧台和商品之间,我有一个叫做“sells”的关系实体。
这些表的架构如下:

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]

我希望将三个表中的pks全部Map到seals中的“item”列中。也就是说,我可以在里面写上啤酒的名字,食物的名字,或者其他物品的名字。
这在mysqlworkbench中似乎不起作用,因为它不允许我将多个外键引用到同一列。
我对这个问题的潜在解决办法是:

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

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

wixjitnu

wixjitnu1#

这个问题和这个很相似。答案基本相同:不,不能有多个外键指向同一列。正如guffa所说,回答这个问题的人说:“你怎么知道在哪里找钥匙?”
你可以用你提出的解决方案来做,尽管,正如你所说的,这并不理想。一点都不正常。
问题是子类型有多个表。真正的答案是拥有当前没有的“items”表,并添加一个“type”字段。
项目{itemid(pk),itemname,itemtype}
这样,您就可以使用itemid作为您最初想要使用的外键。但是,您的选择取决于您的需求/目标等,但不能将多个表链接到外键所在的同一列。有一个模棱两可的问题,db无法解决。

相关问题