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

关于 web 开发 数据库实体的问题

  •  
  •   zxCoder · 2020-10-10 09:03:09 +08:00 · 981 次点击
    这是一个创建于 1507 天前的主题,其中的信息可能已经有所发展或是发生改变。

    举个例子,比如博客文章,一篇文章对应多个 tag,那么文章的实体里面要有一个字段 list<string>吗,因为这种一对多的关系数据库应该用另一个表存,这种情况感觉挺常见的,不知道标准的做法应该是怎么做的。

    还是说要两个实体类?一个和数据库映射的,一个是处理之后和上层 service 交互的?

    最简单的方法应该是怎么做呢?

    第 1 条附言  ·  2020-10-10 15:18:52 +08:00

    好像大家都看不懂我的问题。。。。 我的问题不是说怎么建表,怎么查。。。

    CoCoMcRee
        1
    CoCoMcRee  
       2020-10-10 09:27:46 +08:00
    常规处理的话就
    一张 tag 表, 存各种 tag.
    一张 文章 id 和 tag 的多对多表, 存文章 id 和 tag 的对应关系.

    以上是我写个人博客练习时候的做法.
    340244120w
        2
    340244120w  
       2020-10-10 09:30:23 +08:00
    tag 最关键的概念是反向索引,你文章就用一个 string 来存 tags,就做不到反向索引了
    zxCoder
        3
    zxCoder  
    OP
       2020-10-10 09:49:35 +08:00
    @CoCoMcRee 存我知道,查呢?
    zxCoder
        4
    zxCoder  
    OP
       2020-10-10 09:49:50 +08:00
    @340244120w 我没有用一个 string 来存 tags 啊
    340244120w
        5
    340244120w  
       2020-10-10 10:54:48 +08:00
    @zxCoder #4
    一篇文章对应多个 tag,那么文章的实体里面要有一个字段 list<string>吗
    ------------------------------------------------------------------------------------
    这句话的意思不就是咩。。。
    而且文章和 tag 是多对多,不是一对多
    passerbytiny
        6
    passerbytiny  
       2020-10-10 11:09:04 +08:00 via Android
    文章对标签是多对多,不是一对多。

    只有实体之间才存在关联关系,所以不存在 List < String >类型的关联字段(非关联关系的基本字段,可以有这种类型)。关联字段的类型,若是 List,则必定是 List < Entity >。

    建议楼主先从零开始学习一下 ORM 。
    cmdOptionKana
        7
    cmdOptionKana  
       2020-10-10 11:27:36 +08:00
    推荐一个网站 https://pgexercises.com/ 这个教程学 sql 循序渐进,由浅入深,覆盖的场景也很多,都是通过具体例子来教学。

    看这里 https://pgexercises.com/questions/joins/simplejoin.html 看它的三个表,特别注意看中间那个表。
    多对多关系通常采用三个表,其中一个表起到桥梁的作用将 tag 表与 article 表连接起来。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4549 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:10 · PVG 09:10 · LAX 17:10 · JFK 20:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.