与额外信息的多对多关系

时间:2017-06-29 23:26:38

标签: mysql sql database design-patterns database-design

我有如下所示的Reddit关系。基本思想是,每个用户都可以加入许多社区,并在每个社区中编写许多博客。

有关此用户的社区特定信息,如声誉等。我的问题是,将额外信息放在关联表(即UserCommunities)上是一种好习惯吗?为什么不呢?

谢谢!

enter image description here

1 个答案:

答案 0 :(得分:0)

关系数据库设计考虑了两个基本力量:

  1. 减少数据的冗余和依赖性。 (标准化)
  2. 应用程序的查询模式。 (用例/场景)
  3. 标准化部分有详细记录。您可以参考wiki或this了解详情。 如果您担心数据增长或者您发现更改一个字段值需要更改多个列值(数据依赖性),那么您一定要考虑这一点。

    第二部分对您的要求更为主观。 如果您的查询模式需要跨查询的某些数据,并且将两个数据保存在同一个表中并不是非常昂贵(空间明智),那么可以忽略/弯曲规范化技术。

    对于你的例子:

    如果用户表具有特定于用户的数据(如首字母,地址,首选项),则可以将其作为单独的表。

    类似于“用户社区”表,如果除了声誉之外它还有数据,如帖子数量,喜欢的数量等等。它可以/应该是一个不同的表

      

    为什么不呢?

    您可以参考规范化表格获取收益。 :)

    但是,如果您的用例/查询模式是"给定用户和博客,请告诉我用户的声誉"或类似的东西,没有额外的数据,你可以保持声誉在同一张表。

      

    为什么

    它将简化您的查询。它不是跨表连接,而是直接查询,复杂度较低。