sql - ER 关系数据库编码包含弱实体

标签 sql database entity relationship entity-relationship

所以我正在设计一个涉及电影、剧院、销售产品/纪念品的摊位的关系数据库。这是让我感到困惑的问题的一部分:

“...

电影院由标识符、名称、地址(街道、 市、省),以及影院的银幕总数。

...

特许摊位是在剧院销售产品的亭子。数据库记录了特许摊位的类型:食品或纪念品(但不能同时是两者)。产品由唯一的“库存单位”(SKU) 标识符、产品名称、类别(例如糖果、纪念品、爆米花、饮料、玩具)和产品价格(加元)组成。每个特许摊位必须至少包含一种产品。特许摊位仅位于剧院内,一个剧院内可以有许多特许摊位。

..."

现在我知道小卖部是一个弱实体,它有两种关系:一种与产品实体,一种与剧院实体。现在,这两种关系都需要使用展台类型 + 其他两个实体之一的主键:来自剧院的 IS 和来自产品的 SKUID。

create table HasStand(
    TheatreID integer not null,
    type varchar(20) not null check (type = 'food' or type = 'souvenir'), 
    primary key (TheatreID, type),
    foreign key (TheatreID) references Theatre (ID) on delete cascade
);

create table StandSells(
    ProductID integer not null,
    type varchar(20) not null check (type = 'food' or type = 'souvenir'),  
    primary key (ProductID, type),
    foreign key (ProductID) references Products (SKUID) on delete cascade
);

它说一个剧院可以有很多特许摊位,即多个食品摊位和/或多个纪念品摊位。

我的问题是:我怎样才能找到某种产品的销售地点?在哪个剧院?我知道我可以使用产品 SKUID 找出摊位的类型并使用 theatreID 找到该类型的摊位,但我遇到的情况是剧院可能有 2 个食品摊位,所以使用 SKUID 我发现它是一种食物类型展台,当我使用 TheatreID 时,我发现有 2 个展台是食物类型的,因此进入了死胡同;我不知道他们中的哪一个卖了那个东西?

附注我根本无法为小卖部使用唯一 ID,只能输入。

有什么想法吗?

最佳答案

假设您真的不能使用 ConcessionStand 唯一实体,我建议使用下表。该解决方案使用销售收据回溯到剧院和 ConcessionStandType,但仍然不够完美。换句话说,一旦完成销售,ReceiptId 就会关联到使用唯一 ProductSKUId 从中提取的相应位置。

注意:我还假设每个展台都有独特的产品 SKU

Theater
   TheaterId - PrimaryKey
   ...other attributes as appropriate
Product
   ProductSKUId - PrimaryKey
   ...other attributes as appropriate
ConcessionStandInventory
   TheaterID - ForeignKey
   ProductSKUId - ForeignKey
   ConcessionTypeID - ForeignKey
   ReceiptId nullable
Receipt
   ReceiptId - PK
   TheaterID
   ProductSKUId 
   ConcessionTypeID
ConcessionType
   ConcessionTypeID
   ConcessionTypeDesc

关于sql - ER 关系数据库编码包含弱实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32928354/

相关文章:

java - 没有创建 liquibase.change.core.RawSQLChange 的逆

java - 插入触发器导致 EntityNotFoundException

mysql - 如果其中一行包含空列,则合并两行

mysql - 查询说明

python - 如何将列表中的元组转换为普通列表?

sql - Azure Data Studio 架构图?

mysql - 显示学生人数最多的院系名称

sql - varchar2(n BYTE | CHAR)默认-> CHAR或BYTE

database - DBAL 从 Symfony2 中的实体连接到数据库

.net - 如何使用 Linq 将实体表与交叉引用表连接起来