如何提高我的数据库更多的关系 - SQL& PHP

时间:2016-02-21 14:50:15

标签: database-design database-schema erd

我正在使用PHP和数据库制作订购系统。该数据库有2个表,1个包含所有产品,1个包含通过php网站发出的所有订单。 产品

productID (PK)| productName | productPrice
1             | DVD         | 5.99
2             | CD          | 2.99

订单

ID (PK) | orderID(PK) | productID(PK/FK) | productName | quantity | ProductPrice
1       | 1           | 1                | DVD         | 1        | 5.99
2       | 1           | 2                | CD          | 2        | 5.98

使用从Products表中获取数据并插入提交的表单,将新订单插入到表中。我有一个问题,如果我要更新Products表中的productName,Orders表中的productName不会更新。

同样根据我收集的内容,我还需要实现像这样的OrdersProducts表

orderID | productID

每次下订单时,我需要做什么,orderID和productID会进入此表?

2 个答案:

答案 0 :(得分:0)

你的设计缺少某些东西:

首先:您的订单表应仅包含order_idorder_date和客户数据,例如customer_id

其次:您必须执行一个OrdersProducts表,因为您的订单可能包含很多产品,并且您还应将这些字段放入其中:orderIDproductID,{{ 1}},quantity但您不应将ProductPrice放在此表中,只能通过其ID来引用产品。您也可以从此表中删除productName,并在ProductPrice表格中考虑此价格,但如果您的产品价格因每位客户而更改,则可能需要此字段。

答案 1 :(得分:0)

产品:

y

订单项:

productID (PK)| productName | productPrice
1             | DVD         | 5.99
2             | CD          | 2.99

订单:

ID (PK) | orderID(FK) | productName | quantity | productPrice
1       | 1           | DVD         | 1        | 5.99
2       | 1           | CD          | 2        | 5.98

您不需要额外的表,除非您需要存储有关订单的额外信息。您的“订单”表或多或少是“行项目”表。在购买时包含产品名称和价格的副本是正常的,这样您就可以回头看看。

您可以使用所谓的“触发器”在每次操作后插入表格,mysql manual中对此进行了描述。

然而,我建议做的是使用事务将多个命令转换为单个原子插入

ID (PK) | some other fields - maybe some order time details?
1       | some other data

原因是您可能无法在插入行项目表时自动确定要自动插入到订单表中的内容。