涉及多个子类项目的关系
Relationship Involving Multiple Subclass Items
我目前正在设计 "Bar Beer Drinkers" 数据库的扩展(通常用于教授基本 SQL 查询)。
作为设计的一部分,我创建了遵循 "ISA" 模式的实体,具体而言:
"Beers," "Food," 和 "OtherItems" 都是 "subclasses" 的 "Item."
涉及的另一个实体是 Bars 实体。
在条和项目之间,我有一个名为 "Sells" 的关系实体。
这些 table 的架构如下:
Bar[ID(pk), Name, State, Address, Phone, Open, Close]
Beers[Name(pk), Manf]
Food[Name(pk), Manf]
OtherItems[Name(pk), Manf].
目前我没有一个名为 "Items."
的 table
对于销售 table,架构是:
Sells[barID(fk), item(fk), price]
我希望将三个 table 的 PK 全部映射到销售的 "item" 列中。也就是说,我可以在其中输入啤酒名称、食物名称或其他项目名称。
这在 MySQLWorkBench 中似乎不起作用,因为它不允许我将多个外键引用到同一列。
我可能解决这个问题的方法是:
Sells[barID{fk), beerItem(fk), foodItem(fk), otherItem(fk), price]
然而,这将导致每个元组至少有两个空值。这是acceptable吗?在 SQL 的关系实体中包含 "ISA" 关系的首选方法是什么?
这个问题与this one非常相似。答案基本相同:不,不能有多个外键指向同一列。作为 Guffa,该问题的回答者指出,"How would you tell where to look for the key?"
您可以使用您提出的解决方案来完成,但正如您所指出的,这并不理想。它根本没有标准化。
问题是子类型有多个 table。真正的答案是拥有您目前没有的 "items" table 并添加一个 "type" 字段。
物品{ItemID(pk), ItemName, ItemType}
这样您就可以使用 ItemID 作为您最初打算使用的外键。无论您选择如何处理它取决于您的 needs/goals 等,但您不能 link 多个 table 作为外键到同一列。这样做存在歧义问题,数据库无法解决。
我目前正在设计 "Bar Beer Drinkers" 数据库的扩展(通常用于教授基本 SQL 查询)。
作为设计的一部分,我创建了遵循 "ISA" 模式的实体,具体而言: "Beers," "Food," 和 "OtherItems" 都是 "subclasses" 的 "Item."
涉及的另一个实体是 Bars 实体。
在条和项目之间,我有一个名为 "Sells" 的关系实体。
这些 table 的架构如下:
Bar[ID(pk), Name, State, Address, Phone, Open, Close]
Beers[Name(pk), Manf]
Food[Name(pk), Manf]
OtherItems[Name(pk), Manf].
目前我没有一个名为 "Items."
的 table对于销售 table,架构是:
Sells[barID(fk), item(fk), price]
我希望将三个 table 的 PK 全部映射到销售的 "item" 列中。也就是说,我可以在其中输入啤酒名称、食物名称或其他项目名称。
这在 MySQLWorkBench 中似乎不起作用,因为它不允许我将多个外键引用到同一列。
我可能解决这个问题的方法是:
Sells[barID{fk), beerItem(fk), foodItem(fk), otherItem(fk), price]
然而,这将导致每个元组至少有两个空值。这是acceptable吗?在 SQL 的关系实体中包含 "ISA" 关系的首选方法是什么?
这个问题与this one非常相似。答案基本相同:不,不能有多个外键指向同一列。作为 Guffa,该问题的回答者指出,"How would you tell where to look for the key?"
您可以使用您提出的解决方案来完成,但正如您所指出的,这并不理想。它根本没有标准化。
问题是子类型有多个 table。真正的答案是拥有您目前没有的 "items" table 并添加一个 "type" 字段。
物品{ItemID(pk), ItemName, ItemType}
这样您就可以使用 ItemID 作为您最初打算使用的外键。无论您选择如何处理它取决于您的 needs/goals 等,但您不能 link 多个 table 作为外键到同一列。这样做存在歧义问题,数据库无法解决。