【问题标题】:Denormalizing a table to reduce joins非规范化表以减少连接
【发布时间】:2021-06-02 08:36:36
【问题描述】:
我正在为一个移动聊天应用程序的联系人建模,该应用程序从操作系统通讯录 (iOS/Android) 中获取联系人。
一个联系人可以有多个电话号码 (ContactPhoneNumbers)。
我正在探索将 Contact 属性合并到 ContactPhoneNumber (B) 中,而不是使用 Contact 表并进行连接 (A)。然后我可以直接获取用户的 ContactPhoneNumbers,并且已经拥有所有联系人的信息,因为在每条记录上都有重复。
做 B 而不是 A 会有什么缺点?
A-
B-
【问题讨论】:
标签:
database
data-modeling
rdbms
database-normalization
denormalization
【解决方案1】:
RDB 是专门为在表的条目之间创建r关系而构建的。规范化数据和创建表之间的关系可以确保数据完整性。通过避免使用这些工具,当更新这些非规范化数据点之一时,您必须更新与其关联的所有条目以确保数据完整性。
当然,在某些情况下,非规范化数据可能是有益的,例如,当您的业务规则不要求所有相关条目具有完全相同的数据时,查询性能会遇到瓶颈,或者您只需要简单的查询就可以了不太简单的更新和插入。
一般来说,为了提前提升性能,您应该避免预测未来和未知的瓶颈。构建您需要的东西,让工具为您完成工作 - 如果您以后遇到问题(或额外时间),那么您可以考虑改进设计。
见Should I normalize my DB or not?