V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
glp664186796
V2EX  ›  问与答

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

  •  1
     
  •   glp664186796 · 2020-05-14 09:14:26 +08:00 · 2050 次点击
    这是一个创建于 1650 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    18 条回复    2020-05-14 15:25:48 +08:00
    ChoateYao
        1
    ChoateYao  
       2020-05-14 09:20:14 +08:00
    你一篇文章会有多个作者吗?以后会有这个功能嘛?

    没有你用中间表做什么?
    mijimoji
        2
    mijimoji  
       2020-05-14 09:24:14 +08:00
    你要搞明白,一对一,一对多,多对多的关系
    你这个大部分是一对一的关系(一篇文章对应一个作者)
    一对多,多对多才要用中间表
    RHxW
        3
    RHxW  
       2020-05-14 09:30:54 +08:00
    用 ORM 的话中间表是自动生成的
    shawnbluce
        4
    shawnbluce  
       2020-05-14 10:05:53 +08:00
    简单来说,你在文章表里加一个作者字段就好了,不要在作者表里加一个“我写的文章们”的字段
    Hayek
        5
    Hayek  
       2020-05-14 10:22:57 +08:00
    一个文章如果有多个作者才需要这样设计。
    但是如果只是博客或者一般企业信息网站,总共也没有几万篇文章,文章表的作者字段就是逗号分隔的 id 都可以,反正数据量小。
    glp664186796
        6
    glp664186796  
    OP
       2020-05-14 10:53:59 +08:00
    @mijimoji 但是一个作者可以发表多篇文章,所以是一对多吧?
    glp664186796
        7
    glp664186796  
    OP
       2020-05-14 10:54:41 +08:00
    @ChoateYao 我就是没有明白中间表的价值是什么
    glp664186796
        8
    glp664186796  
    OP
       2020-05-14 10:55:20 +08:00
    @RHxW 那我就只需要做一个作者表和一个文章表,在文章表里加个外键,是吧?
    glp664186796
        9
    glp664186796  
    OP
       2020-05-14 10:56:32 +08:00
    @shawnbluce 我不会在作者表里加“我的文章们”这样的东西。不过一个作者表一个文章表,和一个文章表里加个作者字段,这两种有什么区别吗?
    glp664186796
        10
    glp664186796  
    OP
       2020-05-14 10:57:18 +08:00
    @Hayek 嗯,数据量确实不大。我就是想知道正确的做法是什么。
    ElCorazon
        11
    ElCorazon  
       2020-05-14 11:02:54 +08:00
    没有正确的做法,是根据需求来的
    RHxW
        12
    RHxW  
       2020-05-14 11:06:51 +08:00
    @glp664186796
    对的,这个外键就是作者和文章一对多,不需要中间表
    多对多的时候需要中间表
    你试一下就知道了,文章里加一个 ManyToManyField,然后看数据库,django 会自动把中间表建好,里面保存的是作者和文章的多对多关系
    bnm965321
        13
    bnm965321  
       2020-05-14 11:15:04 +08:00
    一篇文章是有可能有多个作者的,不过大部分情况是一个作者
    HashV2
        14
    HashV2  
       2020-05-14 11:31:35 +08:00
    建议先学习一下数据库的知识,还有就是 django orm 不需要你关心这么多,你只要把业务逻辑理顺了指定一对多还是多对多就好,orm 会帮你建立关系表的。
    jmc891205
        15
    jmc891205  
       2020-05-14 11:35:44 +08:00
    你用 django 的时候不用考虑这么多吧
    你在 model 里定义了多对多的关系,django 就自动帮你建个中间表了
    glp664186796
        16
    glp664186796  
    OP
       2020-05-14 12:46:20 +08:00
    @jmc891205 就是说只要建文章表和作者表,设个外键,其他的不用管是吧
    glp664186796
        17
    glp664186796  
    OP
       2020-05-14 12:46:34 +08:00
    @HashV2 好的,谢谢
    fxxkgw
        18
    fxxkgw  
       2020-05-14 15:25:48 +08:00
    多对多可以用中间表
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1717 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:48 · PVG 00:48 · LAX 08:48 · JFK 11:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.