我正在设计一个简单的数据库(仍在学习)
这是实体
用户,主题,文章
用户主题是多对多的(用户可能对许多主题感兴趣) 主题用户是多对多(一个主题可能会被许多用户感兴趣) 用户博客是一对多的(用户可以写很多博客) 博客用户是一对一的(博客只能由一个用户创作)
这是一个问题: 我还要在主题和博客之间建立一对多的关系吗?
例如,如果我想查找某些主题的所有最新博客,一种方法是查找所有用户,并按时间查找这些用户的所有博客。
另一种方法是,如果我们通过主题与博客关系(一对多)保持冗余,那么我们可以直接从主题中获取所有博客,然后按时间排序。
我很困惑,我有这种冗余吗?什么是最好的做法(在后端程序员编程的简易性和查询效率方面?最好的用户100k,博客200k,主题20)
非常感谢!
答案 0 :(得分:1)
对于多对多关系,您应该使用associative entity,这意味着添加桥表来存储关系,而一对多只是将关系键存储为外键约束。
说你的架构看起来像:
关于文章和主题关系,通过将其存储在单独的表中,不需要冗余,因此您可以在文章中包含主题的外键。如果你担心查询Article表那么多,我认为你现在不应该考虑这个表,你可以创建一个存储Article内容的表,因为它占用了表中的空间并称之为Article_Content with foreign key to Article也是这张新桌子的主要钥匙。