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)
我的问题是,对于这种情况,数据库设计的最佳实践是什么?我正在思考以下两个选项:
谢谢大家!
有两种方法可以看待这个问题.数据库纯粹主义者会说派生或计算的数据是多余的并且违反了第3范式.在编辑数据的事务系统中,这是一个问题,因为规范化可以防止您陷入拥有自相冲突数据的陷阱.
另一方面,有一种实用的观点认为,一次写入但从未更新的数据无论如何都不会更新和删除异常,因此冗余会占用磁盘空间,但不存在风险.
作为一项规则,我总是首先将数据库设计为规范化,然后在仔细检查竞争风险后,在有限的基础上引入冗余.