gpt4 book ai didi

mysql:设计实践

转载 作者:行者123 更新时间:2023-11-30 23:39:22 25 4
gpt4 key购买 nike

我有这样的表格设置:
一条消息被发送给一组用户。

这条消息被放入parent_message
此表包含 id |发件人编号 |日期

在该组中发送的每条消息都放在 child_message 表中
此表包含 id |父 ID |留言 |发送日期

收到回复后,它会被放入reply_message
此表包含 id | child 编号 |留言 | date_received.

现在我有几个关于此设置的问题。


1) 每次加载页面时,我都需要显示每个父消息有多少条子消息。
您会在 parent_message 表中添加一个名为 child_count 的列,还是在您的查询中解决这个问题。
为什么,为什么不呢?

示例查询

select *, 
count(select parent_id from child_message c where c.parent_id = p.parent_id ) child_count
from parent_message;

2) 如果用户选择他们可以查看父消息的所有回复消息。
您会将 parent_id 添加到回复 reply_message 表还是在您的查询中解决?
为什么,为什么不呢?

示例查询

select * from reply_message 
where child_id in(select id from child_message where parent_id = '66')

最佳答案

我会说这在很大程度上取决于消息的数量。如果系统中有一百万条消息,连接到 child_message 的开销会非常大。在这种情况下,将 child_count 添加到父表可能对您的性能有益。您的第二个用例也是如此。当然,这是数据的一些非规范化,因此如果您的系统允许 reshape 主题和回复(如拆分主题),那么在这种情况下您必须进行额外的簿记。

另一种方法是创建索引表,它保存您需要的信息并以异步方式离线更新它们,如果您不需要信息始终保持 100% 准确,例如

表message_counts (parent_id, child_count)

然后在系统中添加新消息时安排更新这些消息,例如通过使用触发器。

所以最重要的是,除非您遇到性能问题,否则请保持表格正常化,就像它们一样。当您期望有数百万条消息和回复时,一些反规范化可以帮助加快速度。索引表有助于离线创建聚合统计数据,除非您需要它们是准确和最新的。

关于mysql:设计实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4729879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com