拍卖交易的 ER 图建模
ER diagram modeling of a auction transaction
我正在研究 ER 图,但我仍然对它的某些方面感到困惑。
我正在做一个练习,我想出了两个我认为可能有用的解决方案,但我不确定哪一个是正确的,以及它们之间产生的差异是什么。
我试图建模的问题是一个在线拍卖系统,其成员可以是买家和卖家(他们具有共同的属性,如邮件地址、姓名和密码)。卖家也有属性银行账户,买家有属性送货地址。所以我把它画成一个不相交的概括。
卖家可以出售物品,买家可以出价购买物品。
一个项目有一个类别,可以有一个子类别。
我现在面临的疑问是:
拍卖结束时,出价最高的投标人获胜,买卖双方可以进行交易。买家和卖家也可以记录对交易的反馈(评级+评论)。
我的两种交易方式如下:
解决方案 1
将交易作为买家、卖家和商品之间的三向关系,并将反馈属性添加到关系中
解决方案 2
直接在项目中插入反馈和获胜者 ID。 (无法通过单个 listing 销售更多商品)
提前感谢您的帮助
您没有具体说明如何填充实体和关系 sets/tables。在你这样做之前,你实际上还没有给出设计。对that & constraints做出合理的假设,看来这两种设计都可以记录你的情况。要使 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,"buyer B makes a transaction with seller S for item I with feedback F"] 在 1 中当且仅当 ["item I has either winner B & feedback F or no winner & B is null & F is null" & B 为空时& F is null] in 2. 这也意味着一个设计中的每个 entity/relationship table 都可以表示为另一个设计中的查询。这种等价性的关键是基数,例如交易 1:1 带有赢家的项目。
PS 在 2 中,您可以只存储是否有 winner/transaction 而不是存储获胜者 ID。你知道为什么吗? (A:您可以查询中奖者。)
(确定 relationships/tables 的成员条件((特征)谓词)。探索如何查询和约束每个设计。还探索如何 changes/extensions 可能更喜欢其中之一。)
PS "Has" 没有任何意义。选择描述参与实体如何相关的关系名称。最好的是,shorthand 是一个清晰的语句模板,当 is/values 对应 entities/attributes 时,它会生成一个语句。 "item I is a member of category C".
PS 为什么是箭头?它们是多余的。
我正在研究 ER 图,但我仍然对它的某些方面感到困惑。
我正在做一个练习,我想出了两个我认为可能有用的解决方案,但我不确定哪一个是正确的,以及它们之间产生的差异是什么。
我试图建模的问题是一个在线拍卖系统,其成员可以是买家和卖家(他们具有共同的属性,如邮件地址、姓名和密码)。卖家也有属性银行账户,买家有属性送货地址。所以我把它画成一个不相交的概括。
卖家可以出售物品,买家可以出价购买物品。
一个项目有一个类别,可以有一个子类别。
我现在面临的疑问是: 拍卖结束时,出价最高的投标人获胜,买卖双方可以进行交易。买家和卖家也可以记录对交易的反馈(评级+评论)。
我的两种交易方式如下:
解决方案 1
将交易作为买家、卖家和商品之间的三向关系,并将反馈属性添加到关系中
解决方案 2
直接在项目中插入反馈和获胜者 ID。 (无法通过单个 listing 销售更多商品)
提前感谢您的帮助
您没有具体说明如何填充实体和关系 sets/tables。在你这样做之前,你实际上还没有给出设计。对that & constraints做出合理的假设,看来这两种设计都可以记录你的情况。要使 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,"buyer B makes a transaction with seller S for item I with feedback F"] 在 1 中当且仅当 ["item I has either winner B & feedback F or no winner & B is null & F is null" & B 为空时& F is null] in 2. 这也意味着一个设计中的每个 entity/relationship table 都可以表示为另一个设计中的查询。这种等价性的关键是基数,例如交易 1:1 带有赢家的项目。
PS 在 2 中,您可以只存储是否有 winner/transaction 而不是存储获胜者 ID。你知道为什么吗? (A:您可以查询中奖者。)
(确定 relationships/tables 的成员条件((特征)谓词)。探索如何查询和约束每个设计。还探索如何 changes/extensions 可能更喜欢其中之一。)
PS "Has" 没有任何意义。选择描述参与实体如何相关的关系名称。最好的是,shorthand 是一个清晰的语句模板,当 is/values 对应 entities/attributes 时,它会生成一个语句。 "item I is a member of category C".
PS 为什么是箭头?它们是多余的。