调整数据库结构或SQL查询以允许特定输出

时间:2012-11-28 07:23:28

标签: mysql sql database database-design

我正在从头开始创建一个非常简单的应用程序以允许订购事物,然后显示每个客户的成本。

这是我第一次尝试编程,所以我尽力去理解很多东西并尽可能地遵循最佳实践。

我遇到了一个困扰我的问题

我有以下表结构

**Customers:**

id firstName lastName country days
----------------------------------------

1, john, smith, usa, 5

**Items:**

itemID, itemName, itemCost
------------------------------

1, blueFish, 20

2, dayCost, 10

**Purchases:**

id numBlueFish numPinkFish numRedFish numGreenFish
--------------------------------------------------

1, 0, 0, 2, 4

我希望能够在显示余额的页面中显示以下信息:

<b>Total Balance</b>

<p> Day costs: </p>
<p> Blue Fish cost: </p>
<p> Pink Fish cost: </p>
<p> Red Fish cost: </p>
<p> Green Fish cost: </p>
<p> Total: </p>

<b> Balance Owing :</b>

<p> Day costs total: </p>
<p> Blue Fish total: </p>
<p> Pink Fish total: </p>
<p> Red Fish total: </p>
<p> Green Fish total: </p>
<p> Total: </p>

为了显示上述信息,我想我可以:

  • 通过将customers.days乘以items.dayCost
  • 来计算日费用
  • 通过将customers.numColorFish乘以items.colorFish
  • 来计算每条鱼的成本
  • 通过将每个customers.numColorFish乘以相应的items.colorFish计算总计,将它们加在一起,然后将其添加到customers.dayCost的customers.days结果中

到目前为止,我认为我的结构可以很好地完成上述所有工作。

我现在想要做的是支付任意金额,并显示剩余的余额以及总费用。

如果可能的话,对于每个成本,可以将鱼的数量放在括号中,例如:

<p> Red Fish total: $160 (4) </p>

我是否需要从根本上改变我的表格结构?将amountPaid列添加到customers表中是否足够?

每次付款时我都应该有一张表来记录吗?这会使输出客户支付/欠款的数量变得更加复杂吗?

这种方法的缺点是什么,以及哪些更好的方法符合更好的做法?

1 个答案:

答案 0 :(得分:1)

您的客户是否只进行过一次付款?如果没有,您不希望将amountPaid添加到customers表。您最想做的是将付款信息存储在完全独立的表格中。您已经有一个订单表,可以存储您的订单,但您无法将客户与订单联系起来。

我不确切地知道你要做什么,但我会从以下内容开始:

  • 将customerId添加到您的订单表。

  • 添加欠订单表的总金额以及剩余应付金额(我假设此金额基于订单下达时鱼的成本;即不受更改影响未来的鱼价)。

  • 添加一个包含customerId,orderId并包含已支付和/或到期金额的付款表。用它来跟踪客户的付款。您可以选择将一个状态字段添加到订单表中,并在满足时将其更新为已付款(或有条件地依赖剩余金额为零)。