我有以下表格
项目
> id
>名字
顾客
> id
> id_project
>名字
支付
> id
> id_customer
>约会
>总和
当用户进入系统时,他将可以访问某个项目.现在,我想列出该项目的所有付款,这应该很简单:
SELECT FROM payments where id_customer in (SELECT id from customers where id_project = 5)
解决方法
Denormalization is the process of attempting to optimize the read performance of a database by adding redundant data or by grouping data. In some cases,denormalization helps cover up the inefficiencies inherent in relational database software. A relational normalized database imposes a heavy access load over physical storage of data even if it is well tuned for high performance.
答案总是“取决于”,所以这是我的经验法则:
如果……
>数据量不大
>你还没有进行大量的联接
>和/或数据库性能目前不是瓶颈
然后保持正常化.是的,非规范化更快,但它也意味着您在系统中有冗余数据 – 必须维护并保持同步的数据.这些数据不再是“一个来源”,而是可以偏离的多个来源.随着时间的推移,这是有风险的,所以你不应该这样做,除非你有充分的理由去做,有一些基准支持.
我只会在…时反规范化
>数据量非常大
>连接很昂贵,你必须做很多事情来获得简单的查询返回
>数据库性能是瓶颈和/或您希望尽可能快地进行
在现代硬件上加入非常快,但它们永远不会免费.