规范化一个非常简单的支付系统的表结构

时间:2012-12-05 06:20:29

标签: mysql sql database database-design

我正在编写一个非常简单的支付网络应用程序,这是我第一次尝试编程。我的数据库结构遇到了麻烦,人们说应该将其标准化。

目前我有以下结构。

Customers
---------
id, firstName, lastName, country

Items
---------
id, itemName, itemCost

Purchases
----------
customerID, dayCost, serviceCost, numItem1, numItem2, numItem3

Orders
----------
orderId, customerId, amountPaid, date

我需要能够进行查询,以便显示以下内容:

  • 总计:140
  • 日费用:50
  • 服务费用:70
  • Coronas费用:20(4)
  • 第2项费用:0
  • 第3项费用:0
  • 总欠款:100

我的想法是计算,例如,按照item.itemName的purchase.numItem1,其中id = 1 + purchases.dayCost + purchases.serviceCost) - orders.amountPaid。

这是不对的,我不确定它应该是什么。

我需要能够在查询中返回客户订购的每件商品的数量,每件商品的总成本以及总费用。

什么是允许此查询的更好的规范化表结构?

我不能简单地拥有一个包含客户和物品ID以及支付数量和金额的订单表,因为我必须在网页上使用表单并且该结构不起作用。

1 个答案:

答案 0 :(得分:0)

客户和物品可以在需要时进行扩展,但到目前为止还不错。

如果daycost和servicecost是每件商品,您可以将购买更改为

Purchases
----------
orderId, dayCost, serviceCost, itemid, itemsBought

现在您可以通过

计算订单的成本
select sum(p.itemsBought * i.itemcost + p.daycost + p.servicecost) as itemsCost
from purchases p
join items i on p.itemid = i.id
where p.orderid = 17

或客户欠款

select sum(p.itemsBought * i.itemcost + p.daycost + p.servicecost)
       - sum(o.amountPaid) as owing
from purchases p
join items i on p.itemid = i.id
join orders o on o.orderid = p.orderid
where o.customerid = 284