E-R图表混乱

时间:2016-02-14 11:09:55

标签: entity-relationship

我正在为一家商店设计这个E-R图,我已经在下面展示了部分商品(其余部分不相关)。请看链接: E-R diagram

我遇到的问题是商店只卖两件衣服,袜子和鞋子。 我在图中是否正确详细说明了这一点?我不确定我的基数和/或我的设计是否正确。客户必须购买至少其中一个商品才能存在订单(但可以自由购买任何数量)。

Shoe和Sock实体将具有各自的ID属性,我打算转换为这样的关系模式:

(我忘了在我的图表中添加ORDER_CONTAINS关系以获得一个名为" Quantity"的属性。)

Table: Order_Contains
    ORDER_ID    | SHOEID            | SOCKID           | QTY
    primary key | FK, could be null |FK, could be null | INT

这显然不会起作用,因为数量将毫无意义。有没有办法可以将产品减少到两种产品并使所有这些工作成功?

2 个答案:

答案 0 :(得分:0)

将两个一对多关系组合成一个具有可空字段的关系是一种糟糕的设计。你如何记录包含鞋子和袜子的订单 - 每个鞋子的一排SOCKID设置为NULL,反之亦然,袜子,或者你会组合行?在前一种情况下,QTY的含义很明显,但它取决于SHOEID/SOCKID字段的内容,但QTY在后​​一种情况下意味着什么?如何处理SHOEIDSOCKID都为NULL且QTY为正的行?请记住墨菲的数据库定律 - 如果可以记录它将会是。更糟糕的是,您的主键(ORDER_ID)会阻止您记录多行,因此客户无法购买多个(一对)袜子或鞋子。

更好的设计是两个独立的关系:

Order_Socks (ORDER_ID PK/FK, SOCKID PK/FK, QTY)
Order_Shoes (ORDER_ID PK/FK, SHOEID PK/FK, QTY)

有了这个,只有一种方法来记录订单的内容,这是明确的。

答案 1 :(得分:0)

你在这里没有很好地解释上下文。我会尝试从我的理解中解释,并给你一些提示。

只做你的店铺并且永远(永远)卖2件产品吗?这些产品的细节(颜色,型号,重量,宽度等)是否需要在数据库中保留?如果是,那么我们在模型中有两个实体,SOCKS和SHOES。每个实体都有自己的属性。购买或订单通常被视为ERD上的事件。如果您的客户总是用鞋子购买(或订购)袜子,那么三个实体之间将始终存在链接:

客户---鞋子---袜子

此连接/关联/关系是一个事件,这将是购买(或订单)。

如果顾客可以购买单独的鞋子和袜子,那么袜子和鞋子是超级实体的子类型,称为PRODUCTS,购买是客户和产品之间的事件。在这种情况下,我们有一个分区关系。

但是,如果您的客户购买了单独的产品,并且您的商店不会永远只销售2种产品,并且产品的详细信息并不总是相同,并且不会在表格中保存为列,那么案例就是另一种。

鞋子和袜子被认为是产品,以及将来可以考虑的其他项目。因此,我们在PRODUCTS表中有记录/行。

当客户下订单(或购买)时,他(她)正在收购产品。这里的客户和产品之间存在着密切的联系,通常也是一个事件,即购买(或订单)。

我不知道你是否这样做,但在考虑开始图表之前,在纸张或文档中键入问题上下文。显示情况中的所有详细信息。

当实体具有属性时,可以看到它们。如果您需要保存客户的名称,客户的眼睛颜色,客户的电子邮件等,那么您肯定会有一个CUSTOMER实体。

如果你看到实体以某种方式相关,那么你就有了关系,你应该问问自己这些实体形成了什么样的关系。在您的产品和客户的情况下,我们之间有购买关系。已建立的关系是购买(或订单,您称之为)。一个客户可以购买各种产品,并且可以为多个客户购买一个产品(不在同一个货架上,类型,型号),因此,我们有多对多的关系。

创建的关系根据上下文而变化。无论如何,我们将在这里发明一些疯狂的例子作为例子。假设我们有客户和产品。假设您希望坚持客户舔产品的情况(一些非常疯狂的事情,只是为了让您了解上下文如何表达关系)。

客户和产品实体之间会有一种密切的联系(非常接近......我认为......)。在这种情况下,该关系表示客户舔产品的历史。这将产生一个EVENT。在这种情况下,您可以提供诸如日期,客户舔合适产品的次数,天气,时间,街道上交通灯颜色等属性,只根据您的具体情况需要保留的内容。 ,你的需求。

请记住,对于创建的N-N关系,我们需要查看是否会出现新的实体(不在关系中)。当您将概念模型分解为逻辑模型时,通常会发生这种情况。可能产品订单不会产生一个而是产生两个实体:订单和订单产品。您可以在订单产品中放置从每个客户订购的产品清单和数量。

我想提供各种材料来研究ERD,但不幸的是它们都是葡萄牙语。我希望我能以某种方式帮助过你。如果你想更具体地解决你的问题,我想我真的可以帮助你。什么,请问。