【问题标题】:How to store information in a field in Database?如何将信息存储在数据库中的字段中?
【发布时间】:2011-05-10 22:07:44
【问题描述】:

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

到目前为止,我有这些表:

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

【问题讨论】:

  • 哇。你的问题是什么?设计好不好?
  • 如果将值存储在 itemIDs、itemPrices 和 itemQuantities 中是否合适。请参阅我的示例以及我如何使用分号。

标签: database-design shopping-cart


【解决方案1】:

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

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

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

购物车

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

购物车商品

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

使用上述架构,如果用户将 2 件商品添加到您的购物车中,假设

  • 商品 X(数量 = 2 件,商品 ID = 1001)&
  • 项目 Y(数量 = 1 件,项目 ID = 1002)。

您在表格中的记录如下所示:

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

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

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

【讨论】:

  • 所以最好是多行项目,而不是全部存储在一个中并让PHP解析它?
  • 从标准化的角度来看 - 是的。这样,您还可以运行统计 SQL 查询,返回有多少商品 X 放入了购物车,以及实际订购了多少等。 One-> 许多关系在数据库设计中很常见,这也不例外。
  • 另外,当这张桌子太大时,我应该清理它吗?我的意思是我想无限期地存储所有用户的订单,但这似乎不太合理。
  • 不一定。我已经更新了我的答案,可以轻松跟踪每个用户的购物车,并且每个购物车都有到期时间。当然,这只是您可以在购物车上设置过期时间的众多实现之一。
  • 但我不希望购物车过期。因为我正在考虑添加一个额外的字段:“购买”。我担心的是桌子会变得非常非常大。
【解决方案2】:

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

根据您的迫切需要,添加一个像这样的新表:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-05-24
      • 2018-10-15
      • 1970-01-01
      • 2013-07-09
      • 2012-10-12
      • 2015-11-10
      • 2010-12-05
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多