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

我这种文章和标签的数据表设计可以吗?

  •  
  •   peizhao2017 · 2018-05-09 09:57:27 +08:00 · 2189 次点击
    这是一个创建于 2395 天前的主题,其中的信息可能已经有所发展或是发生改变。



    如图
    加了个中间表
    需要的时候先到这个表里面查 id
    在一个文章 5 个 tag 的情况下
    1000 篇文章这个表差不多 5000 行
    还有其他的好办法吗?
    8 条回复    2018-05-10 08:31:57 +08:00
    whypool
        1
    whypool  
       2018-05-09 10:09:01 +08:00
    标签一般会做冗余数据,文章生成之后,标签一般不会改
    少量冗余,文章表里面加一个 tags 字段,里面存 tag 表的 id,优点是数据冗余少,缺点是多一次查询
    适量冗余,文章表还是加一个 tags 字段,里面存 tag 的 id 和 tag 的名称,推荐这样,适量冗余查询效率高
    peizhao2017
        2
    peizhao2017  
    OP
       2018-05-09 11:26:31 +08:00
    @whypool #1
    方法一建个 tags 字段
    然后以数组形式存 tag 的 id
    比如 1,2,3,4,5
    这样吗?


    再往下读数据这不明白了
    比如我想读 tag_id=1 的数据
    要怎么查数据表里的数组
    akira
        3
    akira  
       2018-05-09 11:41:17 +08:00
    这样存没问题啊。 在几千篇文章以前应该都不会有太大的性能问题。
    出现性能问题的时候,再针对标签做个文章列表的缓存应该就足够了
    whypool
        4
    whypool  
       2018-05-09 13:41:12 +08:00
    @peizhao2017 所以多一次查询,拿到 tag id 去 where in 一下
    peizhao2017
        5
    peizhao2017  
    OP
       2018-05-09 15:24:57 +08:00
    @whypool #4

    请教下
    第一种取出文章的 tag 简单

    但是反过来
    通过 tag 的 id
    sql 要怎么写才能取出含有这个 tag 的文章
    littleylv
        6
    littleylv  
       2018-05-09 15:37:12 +08:00
    你的设计没问题
    zhaohui318
        7
    zhaohui318  
       2018-05-09 18:11:37 +08:00
    关系型数据库,"关系"单独拿出来建个表

    Table: Article
    Columns: Article_ID, Article_Title, Content

    Table: Tag
    Columns: Tag_ID, Tag_Title

    Table: Article_Tag
    Columns: Article_ID, Tag_ID
    qsnow6
        8
    qsnow6  
       2018-05-10 08:31:57 +08:00
    @zhaohui318 #7 这个复杂了点吧,3 个表
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3150 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:25 · PVG 22:25 · LAX 06:25 · JFK 09:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.