对 table 进行非规范化以减少连接

Denormalizing a table to reduce joins

我正在为移动聊天应用程序的联系人建模,该应用程序的联系人来自 OS 通讯录 (iOS/Android)。

一个联系人可以有多个 phone 个号码 (ContactPhoneNumbers)。

我没有使用联系人 table 并进行联接 (A),而是探索将联系人属性合并到 ContactPhoneNumber (B) 中。然后我可以直接获取用户的 ContactPhoneNumbers,并且已经有了所有联系人的信息,因为在每条记录上都是重复的。

做 B 而不是 A 的缺点是什么?

一个-

B-

RDB 专门用于在表项之间创建 r 关系。规范化数据和创建表之间的关系可以确保数据完整性。通过避免使用这些工具,当更新这些非规范化数据点之一时,您必须更新与其关联的所有条目以确保数据完整性。

当然,在某些情况下,反规范化数据可能是有益的,例如当您的业务规则不要求所有相关条目具有完全相同的数据时,查询性能存在瓶颈,或者您只想在以下位置进行简单查询不太简单的更新和插入的成本。

一般来说,您应该避免为了前期性能提升而预测未来和未知的瓶颈。构建您需要的东西,让该工具为您完成工作 - 如果您以后遇到问题(或额外的时间),那么您可以考虑改进设计。

Should I normalize my DB or not?