跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教一下,标签系统中数据库表结构设计的问题
未分類
10 6 月 2020

请教一下,标签系统中数据库表结构设计的问题

请教一下,标签系统中数据库表结构设计的问题

資深大佬 : watanuki 3

需求:

从一个网站爬虫爬取文件的标签,并允许用户创建标签&为文件重新编辑标签,不同用户在同一文件上编辑的标签是独立的(即我为一个文件添加的标签只有我自己能看到,其它用户看不到)。 爬虫得到的标签是一个对象,{ “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)? 这个问题我也想过几种解决方法,但哪种方案才是最合理的?这让我很纠结。 大家在遇到这种需求时,一般是怎样建表的呢?

  1. 如果要把用户创建的标签和原始标签存放在一张表里,怎么解决主键 id 的冲突? 1.1. 通过预留一定数量的间隔来解决?(比如,前 999 个位置给原始标签,用户标签从第 1000 个开始写入) 1.2. 放弃使用原始标签的 id 作为主键,单独开一列(original_id)以存放原始标签的 id

  2. 如果用户创建的标签和原始标签分两个表(t_usertag & t_originaltag)存放,又该如何引用外键?(一个文件的有多个标签,可能同时包含原始标签和用户标签) 2.1. 把用户重新编辑的标签存储在两个表里(r_work_user_usertag & r_work_user_originaltag),分别从各自对应的标签表里(t_usertag & t_originaltag)引用外键?

大佬有話說 (4)

  • 資深大佬 : summerwar

    标签里 status 就是,1 启用,0 弃用

  • 主 資深大佬 : watanuki

    @summerwar #1 用二进制?

  • 資深大佬 : shellus

    1:用户创建的标签 和 原始标签 相差就是有没有 user_id 而已,可以放在同一个表
    2:这种记录映射关系的表,不要自增主键也可以,不存在主键冲突问题
    3:如果建两个表来存原始和用户标签,不用考虑外键,外键是干嘛的?能吃吗?

  • 資深大佬 : summerwar

    跟二进制有啥关系 就是用 int 表示状态而已

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具