[英]How to properly organize related tables in MySQL database?
有两个表 - 用户和订单:
ID | 名 | 订单数量_总计 |
---|---|---|
1 | 琼斯 | 5634200 |
2 | 麦克风 | 3982830 |
ID | 用户身份 | 订单金额 |
---|---|---|
1 | 1 | 200 |
2 | 1 | 150 |
3 | 2 | 70 |
4 | 1 | 320 |
5 | 2 | 20 |
6 | 2 | 10 |
7 | 2 | 85 |
8 | 1 | 25 |
这些表由用户 ID 链接。 任务是为每个用户显示他所有订单的总和,可能有数千个(订单),也可能有数万个,同时可能有成百上千的用户同时发出请求。 有两种选择:
哪个选项更好用? 为什么? 为什么另一个选项不好?
PS我认为第二个选项简洁正确,鉴于数据库是关系型的,但对服务器上的负载存在强烈怀疑,因为即使对于一个用户计算量时的样本也很大,并且有很多他们。
选项 2. 对于绝大多数情况是正确的。
选项 1. 会导致可能导致不一致的数据冗余。 使用选项 2. 您可以安全地始终获得正确的值。
是的,非规范化表可以提高性能。 但这是最后的手段,需要格外小心。 “数万”行对于 RDMBS 来说并不是一个特别大的集合。 它们旨在处理甚至数百万甚至更多。 所以你似乎离最后的手段还很远,应该选择选项 1. 和适当的索引。
我同意@sticky_bit 选项 2. 比 1 更好。还有另一种可能性:
创建一个VIEW
,它是JOIN
/ SUM
查询的预定义调用。 智能 DBMS 应该能够推断出每次更新orders
表时,它还需要为user_id
调整orders_amount_total
。
顺便说一下你的架构设计:不要命名列id
; 不要在两个不同的表中使用相同的列名,除非它们的意思相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.