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

2018-10-18 12:29:12 +08:00
 ashin
需求大概就是对一些资源可以打标签,可以通过资源查到所有标签,也可以通过标签查所有被标的资源。
假设是千万级别的数据量的话,主要关注于查询性能。想到三种结构,不知道哪种好,本人数据库设计很业余,基础也不牢,希望大家指点一下。

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 关联的所有资源对象都反向保存下来。

各位大佬有现成的最佳实践方案吗?求分享啊
1624 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/498746

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX