需要数据库设计建议 - 查询与其他列

m0d*_*0dE 0 mysql database-design

我有以下表格:

Customer(customer_id) - 1000 rows (1000 customers)
Invoice(invoice_id, customer_id) - 1000000 rows (1000 invoices per customer)
Charge(charge_id, invoice_id, charge_amount) - 20000000 rows (20 charges per invoice)
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试使用它的总收费金额生成客户的发票.结果表看起来像这样:

Customer_name | invoice_id | charge_total
    test             1          $1000
    test             2          $1200
    test             3          $900
    ...    
Run Code Online (Sandbox Code Playgroud)

我的问题是,对于这种情况,数据库设计的最佳实践是什么?我正在思考以下两个选项:

  1. 只需通过查询运行一切?
  2. 在Invoice表中添加"charge_total"列以节省查询处理时间(快20倍)

谢谢大家!

Joe*_*own 5

有两种方法可以看待这个问题.数据库纯粹主义者会说派生或计算的数据是多余的并且违反了第3范式.在编辑数据的事务系统中,这是一个问题,因为规范化可以防止您陷入拥有自相冲突数据的陷阱.

另一方面,有一种实用的观点认为,一次写入但从未更新的数据无论如何都不会更新和删除异常,因此冗余会占用磁盘空间,但不存在风险.

作为一项规则,我总是首先将数据库设计为规范化,然后在仔细检查竞争风险后,在有限的基础上引入冗余.