为表格设计适当的关系

时间:2017-06-22 22:54:48

标签: mysql sql database

我正在设计一个简单的数据库(仍在学习)

这是实体

用户,主题,文章

用户主题是多对多的(用户可能对许多主题感兴趣) 主题用户是多对多(一个主题可能会被许多用户感兴趣) 用户博客是一对多的(用户可以写很多博客) 博客用户是一对一的(博客只能由一个用户创作)

这是一个问题: 我还要在主题和博客之间建立一对多的关系吗?

例如,如果我想查找某些主题的所有最新博客,一种方法是查找所有用户,并按时间查找这些用户的所有博客。

另一种方法是,如果我们通过主题与博客关系(一对多)保持冗余,那么我们可以直接从主题中获取所有博客,然后按时间排序。

我很困惑,我有这种冗余吗?什么是最好的做法(在后端程序员编程的简易性和查询效率方面?最好的用户100k,博客200k,主题20)

非常感谢!

添加图片: enter image description here

1 个答案:

答案 0 :(得分:1)

对于多对多关系,您应该使用associative entity,这意味着添加桥表来存储关系,而一对多只是将关系键存储为外键约束。

说你的架构看起来像:

  • 用户
  • 主题
  • Users_Topic(其中主键由标识用户和主题的列组成)
  • 文章(其中有一个外键用于通过列表用户,例如.user_id)

关于文章和主题关系,通过将其存储在单独的表中,不需要冗余,因此您可以在文章中包含主题的外键。如果你担心查询Article表那么多,我认为你现在不应该考虑这个表,你可以创建一个存储Article内容的表,因为它占用了表中的空间并称之为Article_Content with foreign key to Article也是这张新桌子的主要钥匙。