需求
最近需要做一个消息系统,在创建消息的时候需要选择推送渠道,比如 邮件、短信、网站等,因为不同渠道内容差不多且推送渠道业务上是比较稳定的几个,所以推送渠道和内容我计划使用一个表。于是我想到两个方案,一个是每个渠道增加一列,比如 smsChannnel 、mailChannel 等,如果总共 4 个渠道就需要 4 列;另外一个方案是二进制位代表是否使用某个渠道,第一个二进制位代码短信、第二个二进制位代表邮件等(参考权限系统的设计),比如用 smallint 存储总共可以代表 16 中渠道。
多列存储优劣势
优势
- 在消息表中查询方便清晰
- 业务处理中相对二进制计算,这种处理上也更方便
劣势
- 当增加一个渠道时需要修改表结构
- 单行数据需要 4 个 tinyint,具体表空间的消耗,我不是很清楚,但应该是大于 smallint 的;而且这个字段,具体发送记录表会冗余,也就是说空间还会大一倍。
二进制逻辑优劣势
优势
- 存储空间小
劣势
- 增加了业务处理难度
- 增加了查询难度;但是每个渠道的推送记录有表记录,所以不影响统计查询,比如 mailSend 表记录了邮件渠道的记录数。
大家是怎样的看法?
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于