数据库设计建议

时间:2011-06-03 22:19:29

标签: mysql database

我正在本地服务器上建立一个购物车系统进行练习。

现在,我正在使用会话将产品插入MySQL数据库,但我正在为每个会话创建一个表。我知道这不是理想的做事方式。

我的问题:

我应该在会话表中定义多少行,以便将最大数量的项目添加到购物车中?

因此,如果我重新设计表格,那将是

User INT NULL,
product_1 INT NULL,
product_2 INT NULL,
...
....

我知道为每个订单创建一个表只会在将来导致问题

2 个答案:

答案 0 :(得分:4)

不,这种设计难以维护。相反,有一个表将保存所有购物车数据;类似的东西:

User    Product    Quantity
2       5          1
2       3          3
2       7          1
3       5          2
3       6          2

其中“user”列是用户表(或购物车表中的任意一个)上的外键,“product”列是product表上的外键。这样一来,购物车中的独特产品数量就没有限制。

答案 1 :(得分:2)

在向数据库添加新项目之前检查购物车中的商品数量可能会更好。如果购物车商品的数量等于最大数量,则不允许添加其他商品或将行添加到数据库。我认为不可能在SQL表中设置最大行数,如果可能的话,这可能不是一个好习惯。

为什么不拥有一个包含所有购物车项目的表(适用于所有用户),并在Session变量中存储唯一的客户ID,该变量引用SQL购物车表中的行。

像这样......

列: CustomerID | ProductID | QTY

第1行:1293993933 | 393939399 | 3
第2行:1293993933 | 339933992 | 4

将客户ID存储在会话变量中(如果您使用PHP,则为$ _SESSION ['CustomerID'])

每次将产品添加到购物车时,都会选择计数SQL查询。如果它等于允许的最大购物车项目,则不允许用户将插入运行到SQL命令中。

希望这有帮助