我有一张储存所有商品信息及其ID的表格。现在我想与所有顾客一起创建一张桌子并记录购买的物品。什么是最好的解决方案?我想这是不是很高效,如果它像这样存储:数据库结构:客户购买不同的商品
|customer_id | username | password | boughtproducts |
| 1 | herbert |123 |productid1,pid2...|
你会怎么做呢?
我有一张储存所有商品信息及其ID的表格。现在我想与所有顾客一起创建一张桌子并记录购买的物品。什么是最好的解决方案?我想这是不是很高效,如果它像这样存储:数据库结构:客户购买不同的商品
|customer_id | username | password | boughtproducts |
| 1 | herbert |123 |productid1,pid2...|
你会怎么做呢?
更简单的方法来处理这种情况如下:
表的客户: CUSTOMER_ID |用户名|密码
表产品: product_id | productName | ...
表销售: sale_id | customer_id | product_id |销售时间
这样,使用表格'销售',您将存储每个客户和产品的所有销售额。 'Sales'中的customer_id是'Customer'表中的外键,'Sales'中的product_id是来自'Product'表的外键。
我希望这回答了你的问题
have one Customers Table // store details of the customers
have once Products Table // store details of the products
have one Customers_products Table
|primary_key|customer_id | product_id |
| | 1 | 1 |
| | 1 | 2 |
客户与产品之间存在多对多关系。一个客户可以购买许多产品,同样一个产品可以被许多客户购买。因此,实现多对多关系的标准方法是拥有多个表,并且这个新表将包含来自两个表的主键。
主键可以是自动增量,或两个外键的composite key
。
有在网站上提供这种类型的模式的例子不胜枚举。
但在总结你的数据库可能采取的形式...
Customer
表:一个客户可以有很多..
Order
表:一个订单可以有很多..
OrderLine
表:一个命令行将涉及一个...
Product
表。 (和一个Product
会涉及到可能OrderLine
S)
所以OrderLine
将包含ProductID
和Quantity
。然后你可以JOIN
表格,并作出完整的Order
。
我实际上会跟2个表。一个用于客户再进行第二次为他们买了,像这样的产品:
客户
客户ID |用户名|密码
采购:
客户ID |产品ID |日期| etc
你显示的表看起来不是一个好的解决方案。例如,什么数据类型是“被收购的产品”? –
@Droider,我建议看看数据库规范化(例如http://en.wikipedia.org/wiki/Database_normalization) - 这应该解释迄今为止提供的答案,以及为什么他们是一个好主意。 –