gpt4 book ai didi

mysql - 为表设计适当的关系

转载 作者:搜寻专家 更新时间:2023-10-30 23:34:38 25 4
gpt4 key购买 nike

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

这是实体

用户、主题、文章

用户主题是多对多的(一个用户可以对很多主题感兴趣)Topic User is many to many(一个话题可以被很多用户感兴趣)用户博客是一对多的(一个用户可以写很多博客)博客用户是一对一的(一个博客只能由一个用户创作)

问题是:我是否仍要在主题和博客之间建立一对多关系?

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

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

我有点困惑,我应该有这个冗余吗?这里的最佳实践是什么(就后端程序员编程的便利性和查询效率而言?估计用户 10 万,博客 20 万,主题 20)

非常感谢!

添加图片: enter image description here

最佳答案

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

假设您的架构可能如下所示:

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

关于Article和Topic的关系,不需要单独存储在一个表中来冗余,所以你可以在一篇文章中包含一个topic的外键。如果您担心查询 Article 表那么多,我认为您现在不应该考虑这一点,您可以创建一个存储 Article 内容的表,因为它占用表内的空间,并将其称为 Article_Content,外键为 Article也是这个新表的主键。

关于mysql - 为表设计适当的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44710541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com