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

时间:2015-10-03 22:58:32

标签: sql database entity relationship entity-relationship

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

” ...

电影院由标识符,姓名,地址(街道, 城市,省),以及剧院的屏幕总数。

...

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

...“

现在我知道特许摊位是一个弱势实体,它有两种关系:一种是产品实体,一种是影院实体。现在这两种关系都需要使用支架的类型+其他两个实体中的任何一个的主键:来自剧院的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我发现oit是一种食物当我使用TheatreID时,我发现有2个食物类型的食物因此达到了死胡同;我不知道他们中哪一个卖了那个项目?

P.S。我根本不能使用唯一的ID代表特许经营权,只需输入。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我建议您使用以下表格,假设您确实无法使用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