探讨数据库设计时二进制位使用的问题

本贴最后更新于 2825 天前,其中的信息可能已经事过景迁

需求

最近需要做一个消息系统,在创建消息的时候需要选择推送渠道,比如 邮件、短信、网站等,因为不同渠道内容差不多且推送渠道业务上是比较稳定的几个,所以推送渠道和内容我计划使用一个表。于是我想到两个方案,一个是每个渠道增加一列,比如 smsChannnel 、mailChannel 等,如果总共 4 个渠道就需要 4 列;另外一个方案是二进制位代表是否使用某个渠道,第一个二进制位代码短信、第二个二进制位代表邮件等(参考权限系统的设计),比如用 smallint 存储总共可以代表 16 中渠道。

多列存储优劣势

优势

  • 在消息表中查询方便清晰
  • 业务处理中相对二进制计算,这种处理上也更方便

劣势

  • 当增加一个渠道时需要修改表结构
  • 单行数据需要 4 个 tinyint,具体表空间的消耗,我不是很清楚,但应该是大于 smallint 的;而且这个字段,具体发送记录表会冗余,也就是说空间还会大一倍。

二进制逻辑优劣势

优势

  • 存储空间小

劣势

  • 增加了业务处理难度
  • 增加了查询难度;但是每个渠道的推送记录有表记录,所以不影响统计查询,比如 mailSend 表记录了邮件渠道的记录数。

大家是怎样的看法?

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • zonghua

    tinyint 几个字节

  • jiangzezhou
    作者

    @zonghua 1 个字节啊

  • 88250

    我趋向于使用多列,因为我觉得存储空间的占用不是主要考虑的。

  • jiangzezhou
    作者

    @88250 恩,其实我也觉得不重要,只是觉得不优雅,是否建个关联表呢?

  • 88250

    @jiangzezhou 关联表可能量会比较大

  • jiangzezhou
    作者

    恩,那我也觉得多列吧,二进制位确实没多少必要,只是我总感觉稍微优雅一点。

请输入回帖内容 ...