繁体   English   中英

如何正确组织MySQL数据库中的相关表?

[英]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 链接。 任务是为每个用户显示他所有订单的总和,可能有数千个(订单),也可能有数万个,同时可能有成百上千的用户同时发出请求。 有两种选择:

  1. 对于每个新订单,除了写入订单表外,增加 orders_amount_total 计数器,然后简单地将其显示给用户。
  2. 删除 orders_amount_total 字段,并使用表 JOIN 显示所有订单的总和,并使用 SUM 运算符计算特定用户的所有订单的总和。

哪个选项更好用? 为什么? 为什么另一个选项不好?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM