Mysql 涉及多个子类项的关系
我目前正在设计“酒吧啤酒饮用者”数据库的扩展(该数据库通常用于教授基本的SQL查询) 作为设计的一部分,我创建了遵循“ISA”模式的实体,特别是: “啤酒”、“食品”和“其他物品”都是“物品”的“子类” 涉及的另一个实体是Bars实体 在酒吧和商品之间,我有一个叫做“销售”的关系实体 这些表的架构如下所示:Mysql 涉及多个子类项的关系,mysql,sql,database-design,mysql-workbench,database-schema,Mysql,Sql,Database Design,Mysql Workbench,Database Schema,我目前正在设计“酒吧啤酒饮用者”数据库的扩展(该数据库通常用于教授基本的SQL查询) 作为设计的一部分,我创建了遵循“ISA”模式的实体,特别是: “啤酒”、“食品”和“其他物品”都是“物品”的“子类” 涉及的另一个实体是Bars实体 在酒吧和商品之间,我有一个叫做“销售”的关系实体 这些表的架构如下所示: Bar[ID(pk), Name, State, Address, Phone, Open, Close] Beers[Name(pk), Manf] Food[Name(pk), Manf
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全部映射到seals中的“item”列中。也就是说,我可以在里面放一个啤酒的名字,一个食物的名字,或者一个其他物品的名字
这在MySQLWorkBench中似乎不起作用,因为它不允许我将多个外键引用到同一列 我对这个问题的潜在解决方案是:
Sells[barID{fk), beerItem(fk), foodItem(fk), otherItem(fk), price]
然而,这将导致每个元组至少有两个空值。这可以接受吗?在SQL的关系实体中包含“ISA”关系的首选方式是什么?这个问题非常类似于。答案基本相同:不,不能有多个外键指向同一列。正如Guffa所说,回答这个问题的人说,“你怎么知道在哪里找钥匙?” 您可以使用建议的解决方案来实现这一点,尽管正如您所指出的,这并不理想。它根本没有标准化 问题是子类型有多个表。真正的答案是拥有当前没有的“items”表,并添加一个“type”字段 项目{ItemID(pk)、ItemName、ItemType}
这样,您就可以使用ItemID作为您打算首先使用的外键。但是,您可以根据需要/目标等进行选择,但不能将多个表与外键链接到同一列。这样做有一个db无法解决的模糊性问题。“它不允许我将多个外键引用到同一列”这很奇怪,您到底尝试了什么?给出您希望生成的DDL。当你们谈论FK时,给出什么表和列列表引用什么表和列列表。(另外,你的句子没有什么意义,所以你能重新措辞吗?FKs参考,你不知道。)另外: