V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ashin
V2EX  ›  问与答

标签系统的数据库结构设计各位大佬有最佳实践方案吗?

  •  
  •   ashin · Oct 18, 2018 · 2101 views
    This topic created in 2759 days ago, the information mentioned may be changed or developed.
    需求大概就是对一些资源可以打标签,可以通过资源查到所有标签,也可以通过标签查所有被标的资源。
    假设是千万级别的数据量的话,主要关注于查询性能。想到三种结构,不知道哪种好,本人数据库设计很业余,基础也不牢,希望大家指点一下。

    1 开始我想设计成这样:

    tag 表: `id`, `name`,`ref_count`

    resource 表: `id`, `name`, `obj`

    ref 表: `id`, `resource_id`, `tag_id`

    创建 tag 时`ref_count`为 0,表示引用的次数,然后通过 ref 表记录和 resource 表里面具体资源对象的关联关系。
    在 ref 表里面对`resource_id`, `tag_id`做索引。

    这样查询返回 name 的时候要去做关联,而且如果我 resource1 想把 tag1 的名字改一下,resource2 如果被 tag1 标了这样会影响 resource2 的 tag1 名字显示,修改起来显得麻烦。

    2 如果只用一张表存的话,比如:

    tag 表: `id`, `resource_obj`, `tagname`

    这样的话比较简单,更新 tag 操作比较麻烦

    3 搞两个表分别存对方的所有数据

    `resource_tags`表: `id`, `resource_obj`, `tagnames`

    `tag_resources`表:`id` `tagname`, `resource_objs`

    `resource_tags`里面直接把一个 resource 对象的所有 tag 名字都保存到 tagnames 字段,`tag_resources`直接把 tagname 关联的所有资源对象都反向保存下来。

    各位大佬有现成的最佳实践方案吗?求分享啊
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1112 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 18:25 · PVG 02:25 · LAX 11:25 · JFK 14:25
    ♥ Do have faith in what you're doing.