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

标签 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.days 除以items.dayCost 的结果来计算总数

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

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

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

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

我需要从根本上改变我的表结构吗?在我的客户表中添加 amountPaid 列就足够了吗?

我是否应该有一个表格来记录每次付款的情况?这会使输出客户已付款/欠款的情况变得更加复杂吗?

这种方法有哪些缺点?根据更好的实践,有哪些更好的方法?

最佳答案

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

我不知道你到底想做什么,但我会从以下开始:

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

  • 添加您的订单表中所欠的总金额以及剩余的应付金额(我假设该金额是基于下订单时鱼的成本;即不受变化的影响) future 的鱼价)。

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

关于mysql - 调整数据库结构或 SQL 查询以允许特定输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13599884/

相关文章:

php - 关闭连接 PDO

php - Mysql查询空值不包含在where条件中

mysql - 跨列选择不同的条目?

mongodb - mongodb 创建准确的索引

java - 在java中连接到oracledb

performance - MySQL高效 "select id else insert"查询

php - 如果 MySQL 仅结果一行,那么它应该重定向到该行项目的详细信息

mysql - MySQL 是否可以使用复合索引,其中一个字段是 WHERE 字段 > 0?

mysql - MySQL 中何时使用单引号、双引号和反引号

sql - 如何获取分页查询 CockroachDB 的估计行数