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

时间:2011-05-10 22:07:45

标签: database-design shopping-cart

好的,所以我目前正在为我的网站构建一个简单的购物车并研究过这个问题,但是找不到答案却没有成功。

到目前为止我有这些表:

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()函数来分离数据。)

3 个答案:

答案 0 :(得分:3)

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

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

要为每个用户存储购物车,请使用此架构:

购物车

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

购物车项目

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

使用上述架构,如果用户将2件商品添加到购物车,请说明

  • 项目X(数量= 2pcs,itemID = 1001)&
  • 项目Y(数量= 1pc,itemID = 1002)。

表格中的记录如下:

id :1
sessionID :abc1
itemID :1001
itemQuantity :2

id :2
sessionID :abc1
itemID :1002
itemQuantity :1

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

答案 1 :(得分:1)

不,这通常不是一个好主意。你在这里做的是一个字段中的多个值,如果你想查询该字段,这是不好的。

根据您的迫切需要,添加如下新表:

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

另请参阅http://en.wikipedia.org/wiki/Database_normalization以获得有关数据库规范化的良好入门。

答案 2 :(得分:0)

您不应在列中使用分号分隔值,因为在进行数据库查询时,您无法将它们连接到各自的外表。最好将它们存储为单独的行项目,并具有聚合这些行项目的标题表/