最近在学习用 Django 做网站,遇到一个数据库设计的问题。作者表和文章表之间要加一个中间表存放两者关系吗?

2020-05-14 09:14:26 +08:00
 glp664186796

我本来的想法是一个作者表一个文章表,文章表有一个外键是作者 id 。今天看到有人说应该设计一个中间表存放两者之间的关系。哪种比较好?

1884 次点击
所在节点    问与答
18 条回复
ChoateYao
2020-05-14 09:20:14 +08:00
你一篇文章会有多个作者吗?以后会有这个功能嘛?

没有你用中间表做什么?
mijimoji
2020-05-14 09:24:14 +08:00
你要搞明白,一对一,一对多,多对多的关系
你这个大部分是一对一的关系(一篇文章对应一个作者)
一对多,多对多才要用中间表
RHxW
2020-05-14 09:30:54 +08:00
用 ORM 的话中间表是自动生成的
shawnbluce
2020-05-14 10:05:53 +08:00
简单来说,你在文章表里加一个作者字段就好了,不要在作者表里加一个“我写的文章们”的字段
Hayek
2020-05-14 10:22:57 +08:00
一个文章如果有多个作者才需要这样设计。
但是如果只是博客或者一般企业信息网站,总共也没有几万篇文章,文章表的作者字段就是逗号分隔的 id 都可以,反正数据量小。
glp664186796
2020-05-14 10:53:59 +08:00
@mijimoji 但是一个作者可以发表多篇文章,所以是一对多吧?
glp664186796
2020-05-14 10:54:41 +08:00
@ChoateYao 我就是没有明白中间表的价值是什么
glp664186796
2020-05-14 10:55:20 +08:00
@RHxW 那我就只需要做一个作者表和一个文章表,在文章表里加个外键,是吧?
glp664186796
2020-05-14 10:56:32 +08:00
@shawnbluce 我不会在作者表里加“我的文章们”这样的东西。不过一个作者表一个文章表,和一个文章表里加个作者字段,这两种有什么区别吗?
glp664186796
2020-05-14 10:57:18 +08:00
@Hayek 嗯,数据量确实不大。我就是想知道正确的做法是什么。
ElCorazon
2020-05-14 11:02:54 +08:00
没有正确的做法,是根据需求来的
RHxW
2020-05-14 11:06:51 +08:00
@glp664186796
对的,这个外键就是作者和文章一对多,不需要中间表
多对多的时候需要中间表
你试一下就知道了,文章里加一个 ManyToManyField,然后看数据库,django 会自动把中间表建好,里面保存的是作者和文章的多对多关系
bnm965321
2020-05-14 11:15:04 +08:00
一篇文章是有可能有多个作者的,不过大部分情况是一个作者
HashV2
2020-05-14 11:31:35 +08:00
建议先学习一下数据库的知识,还有就是 django orm 不需要你关心这么多,你只要把业务逻辑理顺了指定一对多还是多对多就好,orm 会帮你建立关系表的。
jmc891205
2020-05-14 11:35:44 +08:00
你用 django 的时候不用考虑这么多吧
你在 model 里定义了多对多的关系,django 就自动帮你建个中间表了
glp664186796
2020-05-14 12:46:20 +08:00
@jmc891205 就是说只要建文章表和作者表,设个外键,其他的不用管是吧
glp664186796
2020-05-14 12:46:34 +08:00
@HashV2 好的,谢谢
fxxkgw
2020-05-14 15:25:48 +08:00
多对多可以用中间表

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671466

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX