在以下情况下,哪种数据库设计更好?为什么?
Which will be the better database design in following situation? Why?
首先要明确剧情
群发邮件系统有列表(电子邮件组),每个列表都有多个联系人(电子邮件)。联系人有一些状态,如正常、未订阅、退回等。
我正在考虑设计这样的东西。
Table Contacts
-----------------------------------------
id email group_id contacts status
-----------------------------------------
状态将存储上述电子邮件 ID 状态。
但是一个列表可以有几千封邮件,所以如果客户端增加,检索数据会导致性能问题
所以我得到了两个解决方案
- 为状态列建立索引
为不同的联系状态制作不同的table,例如
一个 table 用于正常添加的联系人
另一个用于取消订阅的联系人。
其他州依此类推
所以我的问题是,对于上述情况,哪种解决方案更好。
请指导我。
我将绑定多对多关系中的列表和联系人上面table只是为了描述问题。
提前致谢。
更新
从上面检索信息的查询 table
用于检索普通联系人
select * 来自 group_id = '[group_id]' 且状态 = 1
的联系人
对于未订阅的联系人
select * 来自 group_id =[group_id]' 且状态 = 2 的联系人
等等。
对于你的评论,请在 group_id
和 status
上建立索引
即
create index my_index on contacts(group_id, status)
这将解决任何性能问题,因为数据库可以在不锁定 table 的情况下找到列表。
在扫描该列表时不执行任何昂贵的操作(例如发送电子邮件)可能是个好主意
首先要明确剧情
群发邮件系统有列表(电子邮件组),每个列表都有多个联系人(电子邮件)。联系人有一些状态,如正常、未订阅、退回等。
我正在考虑设计这样的东西。
Table Contacts
-----------------------------------------
id email group_id contacts status
-----------------------------------------
状态将存储上述电子邮件 ID 状态。
但是一个列表可以有几千封邮件,所以如果客户端增加,检索数据会导致性能问题
所以我得到了两个解决方案
- 为状态列建立索引
为不同的联系状态制作不同的table,例如
一个 table 用于正常添加的联系人 另一个用于取消订阅的联系人。 其他州依此类推
所以我的问题是,对于上述情况,哪种解决方案更好。 请指导我。
我将绑定多对多关系中的列表和联系人上面table只是为了描述问题。 提前致谢。
更新
从上面检索信息的查询 table
用于检索普通联系人
select * 来自 group_id = '[group_id]' 且状态 = 1
的联系人
对于未订阅的联系人
select * 来自 group_id =[group_id]' 且状态 = 2 的联系人 等等。
对于你的评论,请在 group_id
和 status
即
create index my_index on contacts(group_id, status)
这将解决任何性能问题,因为数据库可以在不锁定 table 的情况下找到列表。
在扫描该列表时不执行任何昂贵的操作(例如发送电子邮件)可能是个好主意