从一个网站爬虫爬取文件的标签,并允许用户创建标签&为文件重新编辑标签,不同用户在同一文件上编辑的标签是独立的(即我为一个文件添加的标签只有我自己能看到,其它用户看不到)。 爬虫得到的标签是一个对象,{ "id": 123, "name": "xxx" } 文件的元数据存储在 t_work (id, name, ...) 文件与标签是多对多关系,存储在 r_work_tag (work_id, tag_id) 为了不覆盖原始的标签关系,用户重新编辑的标签存储在 r_work_user_tag (work_id, user_id, tag_id)
我想保留标签的原始 id,并将其设为表 t_tag 的主键
我该怎样建表?我该不该把用户创建的标签单独存放到一个表里(t_user_tag)? 这个问题我也想过几种解决方法,但哪种方案才是最合理的?这让我很纠结。 大家在遇到这种需求时,一般是怎样建表的呢?
如果要把用户创建的标签和原始标签存放在一张表里,怎么解决主键 id 的冲突? 1.1. 通过预留一定数量的间隔来解决?(比如,前 999 个位置给原始标签,用户标签从第 1000 个开始写入) 1.2. 放弃使用原始标签的 id 作为主键,单独开一列(original_id)以存放原始标签的 id
如果用户创建的标签和原始标签分两个表(t_usertag & t_originaltag)存放,又该如何引用外键?(一个文件的有多个标签,可能同时包含原始标签和用户标签) 2.1. 把用户重新编辑的标签存储在两个表里(r_work_user_usertag & r_work_user_originaltag),分别从各自对应的标签表里(t_usertag & t_originaltag)引用外键?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.