我为购物车创建了一个简单的数据库模型,现在让我们考虑订单、产品和购物车
我的问题是购物车与产品有 M:N 关系吗?如果是,是否需要创建第三个表。我已经创建了第三个表,但这对我来说没有意义。我可以很好地拥有 T_SHOPPING_CART 表并将 id 、product_id、quantity 作为复合主键并将产品值存储在其中,而不是创建另一个表来存储这些详细信息。哪个更好地接近第三个表或复合主键。
我为购物车创建了一个简单的数据库模型,现在让我们考虑订单、产品和购物车
我的问题是购物车与产品有 M:N 关系吗?如果是,是否需要创建第三个表。我已经创建了第三个表,但这对我来说没有意义。我可以很好地拥有 T_SHOPPING_CART 表并将 id 、product_id、quantity 作为复合主键并将产品值存储在其中,而不是创建另一个表来存储这些详细信息。哪个更好地接近第三个表或复合主键。
我认为答案在于基本面。你已经说过了,T_SHOPPING_CART
并且T_PRODUCT
有一个 m:n 的关系。因此,当您分解任何多对多关系时,它总是会创建一个关联表(或动名词)。
让我们看看为什么你的方法行不通。您只想在 T_SHOPPING_CART 表中使用复合 id
T_SHOPPING_CART_ID(ID, Product_Id, quantity)
如果主键中包含数量,则每次用户更改数量时,您的主键都会更改。这不是一个好的设计方法。
您可能需要的其他属性呢?您是否每次都将它们添加为主键?例如。您需要设计与每个购物车关联的折扣。你将如何存储它?你能和一个表建立一个简单的 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 个地方,这会导致更新、删除、异常。
我的基本论点是,如果您阅读多对多关系的基础知识,您会找到所有答案。多对多应始终与第三张表链接。
希望能帮助到你。