Database design 如何在数据库中的字段中存储信息?

Database design 如何在数据库中的字段中存储信息?,database-design,shopping-cart,Database Design,Shopping Cart,好的,所以我目前正在为我的网站建立一个简单的购物车,并研究了这个问题,但没有找到答案 到目前为止,我有以下表格: Item ------ id categoryID brandID name price Categories ----------- id name Brands ------- id name Shopping Carts -------------- id userID itemIDs itemPrices itemQuantities 根据其他答案,我发现

好的,所以我目前正在为我的网站建立一个简单的购物车,并研究了这个问题,但没有找到答案

到目前为止,我有以下表格:

Item
------
id
categoryID
brandID
name
price



Categories
-----------
id
name



Brands
-------
id
name



Shopping Carts
--------------
id
userID
itemIDs
itemPrices
itemQuantities
根据其他答案,我发现这似乎是正确的方式,除了我不确定购物车表。我正在考虑将信息存储在此表中,如下所示:

id: 1
userID: 1
itemIDs: 1;2;3;5
itemPrices: 40;50;60;70
itemQuantities: 1;2;3;4

这是解决这个问题的正确方法还是有更好的方法?(我还考虑在检索数据时使用PHP中的explode()函数来分离数据。)

不,这通常不是一个好主意。您在这里所做的是在一个字段中有多个值,如果您想要查询该字段,这是没有用的

为了满足您的迫切需要,请添加如下新表:

CartContent
-----------
cartId
itemId
itemCount

另请参阅,以获取有关数据库规范化的良好入门知识。

理想情况下,您希望将购物车信息存储在cookie或会话中。如果希望在数据库中存储每个购物车,可以使用以下实现

本质上,一个购物车可以有多个商品,每个商品都有与其相关的价格和数量

要按用户存储购物车,请使用以下模式:

物零碎 cartID(主键)
sessionID(标识创建购物车的用户会话的唯一ID)
已购买(布尔值TRUE/FALSE用于存储购物车是已购买还是已丢弃)

购物车项目 id(主键)
购物车ID(标识用户购物车的唯一ID)
用户ID:(仅当您知道用户在向购物车添加物品时将始终登录时使用)
itemID:购物车中项目的唯一标识符。
项目数量:订购项目的数量。
项目价格:(可选-仅当项目价格可自定义时使用,或从项目表中提取)

在上面的模式中,如果用户向购物车添加了2个项目,那么

  • 项目X(数量=2件,项目ID=1001)和
  • 项目Y(数量=1件,项目ID=1002)
表中的记录如下所示:

id:1
会话ID:abc1
itemID:1001
项目数量:2个

id:2
会话ID:abc1
项目ID:1002
项目数量:1


现在,当您想要获取购物车的订单时,只需根据用户创建购物车时使用的sessionID进行查询。

您不应该在列中使用分号分隔的值,因为在执行DB查询时,您将无法将它们连接到各自的外部表。最好将它们存储为单独的行项目,并有一个汇总这些行项目的标题表。你的问题是什么?设计是否良好?在ItemId、itemPrices和ItemQuantity中存储值是否良好。请看我的示例以及我如何使用分号。因此,最好有多行项目,而不是将其全部存储在一行中,然后让PHP解析?从规范化的角度来看,是的。通过这种方式,您还可以运行统计SQL查询,返回X项在购物车中的放置数量,以及实际订购的数量等。一->多关系在数据库设计中非常常见,这也不例外。此外,每当这个表变得太大时,我是否应该清理它?我的意思是我想无限期地存储用户的所有订单,但这似乎不太可能,也不一定。我已经更新了我的答案,使跟踪每个用户的购物车变得容易,并且每个购物车都有一个过期时间。当然,这只是您可以在购物车上设置过期时间的许多实现之一,但我不希望购物车过期。因为我正在考虑添加一个额外的字段:“购买”。我担心的是桌子会越来越大。