我正在研究ER图,我仍然对它的某些方面感到困惑。
我正在做一个练习,我想出了两种解决方案,我认为可能有效,但我不确定哪一种是正确的,它们之间的区别是什么。
我试图建模的问题是一个在线拍卖系统,成员可以是买家和卖家(他们有共同的属性,如邮件地址、姓名和密码)。卖方还有一个属性银行账户,买方有一个属性发货地址。所以我把它画成一个不相交的概括。
卖方可以出售一件物品,买方可以出价购买一件物品。
一个项目有一个类别,它可以有一个子类别。
我现在面临的疑问是:在拍卖结束时,出价最高的投标人是胜利者,卖方和买方之间的交易可以继续进行。买方和卖方也可以记录对交易的反馈(评级+评论)。
我处理该交易的两种方法如下:
解决方案1

将交易作为买方、卖方和物品之间的三方关系,并将反馈属性添加到关系中。
解决方案2

在项目中直接插入反馈和获胜者ID。(一份清单不能卖出更多的商品)
提前感谢您的帮助
发布于 2018-09-17 03:29:00
您没有具体说明如何填充实体&关系集/表。你还没有给出真正的设计,直到你这样做。对此做出合理的假设&约束,这两种设计似乎都可以记录您的情况。要使2工作,需要(类似于) Winner_ID域是买方id的域,加上一些不能是买方id的值。SQL通常对该类型的前哨值使用NULL。
-- "I ids an item"
Item_1(I)
-- "buyer B makes a transaction with seller S for item I with feedback F"
MakesATransaction_1(B, S, I, F)
-- "item I has either winner B & feedback F or no winner & B is null & F is null"
Item_2(I, B, F)您可以看到,它们可以记录相同的情况,因为对于所有的B,I& F,对于某些S,“买方B与卖方S进行了一次带有反馈F的项目I的交易”,当且仅当“I有胜利者B&反馈F或没有胜利者&B是空&F是空的”&B是空&F在2。这也意味着一个设计中的每个实体/关系表都可以表示为另一个设计中的查询。这种等价性的关键是基数,比如交易与胜利者的项目是1:1。
PS在2,而不是存储胜利者id,你可以只是存储是否有一个赢家/事务。你明白为什么吗?(你可以查询胜利者。)
(确定关系/表的成员资格标准((特征)谓词)。探索如何查询和约束每个设计。此外,还探索哪些更改/扩展可能会对一个或另一个更有利。)
PS“拥有”没有任何意义。选择关系名称,描述参与实体是如何关联的。最好是,它是一个明确的语句模板的缩写,当给出实体/属性的is /值时,该模板会生成一个语句。“项目一是C类成员”。
为什么是箭?他们是多余的。
https://stackoverflow.com/questions/52356727
复制相似问题