V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
watanuki
V2EX  ›  MySQL

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

  •  
  •   watanuki · 2020-06-21 21:55:42 +08:00 · 2324 次点击
    这是一个创建于 1615 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:

    从一个网站爬虫爬取文件的标签,并允许用户创建标签&为文件重新编辑标签,不同用户在同一文件上编辑的标签是独立的(即我为一个文件添加的标签只有我自己能看到,其它用户看不到)。 爬虫得到的标签是一个对象,{ "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)引用外键?

    5 条回复    2020-06-24 16:20:17 +08:00
    summerwar
        1
    summerwar  
       2020-06-22 05:43:45 +08:00 via iPhone
    标签里 status 就是,1 启用,0 弃用
    watanuki
        2
    watanuki  
    OP
       2020-06-22 15:06:40 +08:00
    @summerwar #1 用二进制?
    shellus
        3
    shellus  
       2020-06-22 15:26:09 +08:00
    1:用户创建的标签 和 原始标签 相差就是有没有 user_id 而已,可以放在同一个表
    2:这种记录映射关系的表,不要自增主键也可以,不存在主键冲突问题
    3:如果建两个表来存原始和用户标签,不用考虑外键,外键是干嘛的?能吃吗?
    summerwar
        4
    summerwar  
       2020-06-22 23:08:51 +08:00
    跟二进制有啥关系 就是用 int 表示状态而已
    fhsan
        5
    fhsan  
       2020-06-24 16:20:17 +08:00
    让我想起来二进制,银行 A=0,银行 B=1,银行 C=2,银行 D=4,不重复的任意组合,二进制就能求的谁和谁组合
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2300 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:57 · PVG 23:57 · LAX 07:57 · JFK 10:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.