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