0

我为购物车创建了一个简单的数据库模型,现在让我们考虑订单、产品和购物车

我的问题是购物车与产品有 M:N 关系吗?如果是,是否需要创建第三个表。我已经创建了第三个表,但这对我来说没有意义。我可以很好地拥有 T_SHOPPING_CART 表并将 id 、product_id、quantity 作为复合主键并将产品值存储在其中,而不是创建另一个表来存储这些详细信息。哪个更好地接近第三个表或复合主键。

在此处输入图像描述

4

1 回答 1

-1

我认为答案在于基本面。你已经说过了,T_SHOPPING_CART并且T_PRODUCT有一个 m:n 的关系。因此,当您分解任何多对多关系时,它总是会创建一个关联表(或动名词)。

让我们看看为什么你的方法行不通。您只想在 T_SHOPPING_CART 表中使用复合 id

T_SHOPPING_CART_ID(ID, Product_Id, quantity)
  1. 如果主键中包含数量,则每次用户更改数量时,您的主键都会更改。这不是一个好的设计方法。

  2. 您可能需要的其他属性呢?您是否每次都将它们添加为主键?例如。您需要设计与每个购物车关联的折扣。你将如何存储它?你能和一个表建立一个简单的 m:1 关系Discount吗?由于您有一个复合键,因此效率将非常低。或者如果您将折扣作为属性存储在 T_SHOPPING_CART 表中,则会导致更严重的缺陷,冗余。数据冗余会导致各种异常。

T_SHOPPING_CART

ID   PRODUCT_ID    QUANTITY         DISCOUNT

1        101           33             2.3

1        102           20             2.3

在这里,id=1 的购物车的折扣是 2.3。它是多余的,即出现在 2 个地方,这会导致更新、删除、异常。

  1. 如果您删除了一个产品,您将如何处理它?如果是级联删除,您将丢失所有包含该产品的购物车。如果您不级联,您将存储什么来代替已删除的项目?空,默认值?非常糟糕的设计。

我的基本论点是,如果您阅读多对多关系的基础知识,您会找到所有答案。多对多应始终与第三张表链接。

希望能帮助到你。

于 2014-09-15T14:02:46.767 回答