V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Sponsored by
LinkedIn
2000 个不用坐班的远程好工作在召唤你 · 弹性上班不打卡,工作和生活都能拥有
2000 个不用坐班的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
hkhk366
V2EX  ›  数据库

菜鸟求助,如何解决数据库一行中某一个字段可能存储多个元素并搜索的问题,谢谢大神。

  •  
  •   hkhk366 · 267 天前 · 953 次点击
    这是一个创建于 267 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据库结构设计求助
    假设我们用户表有 2 个字段,姓名和工作履历,但是每个人的履历不同,有的人履历有很多,有的人可能则很少。现在我想搜索某一个人所有履历,再通过所有履历去搜索其他表,例如找出张三与其互动的潜在同事,互动可能是别的表的数据。请问有什么高效的存储方案吗?请注意上面的场景是我抽象出来的,履历只是个例子,我要存的可能非常的大,非常感谢大神的帮助。

    方案 1:履历用分隔符分开,履历字段可以存个 json 什么的
    姓名 履历
    张三 1|2|3
    李四 0|9

    优点:每次搜索一个人,直接把履历拿出来解析了去搜索别的表,没有重复保存非履历字段
    缺点:随着某一个人履历越来越多,拿出来解析也相当占用资源,我们假设履历有几十 M 甚至几百 M 大,而我们可能只需要其中某几段履历而非全部履历,但是这却要整个解析用户的全部履历,以后大量查询性能堪忧。

    方案 2:每个用户的履历多存几行
    姓名 履历
    张三 1
    张三 2
    张三 3
    李四 0
    李四 9
    优点:这种方式如果要某几段张三的履历的时候可以之间单拿出来搜索,并用结果搜索其他的表。
    缺点:张三这个字段存了好几次,这里的例子当然只有姓名这一个字段,实际上可能会有很多,当张三的履历很多的时候,姓名字段将会存储太多次了。

    请教各位大神,是否有好的解决方案,我是个数据库的新手菜鸟,望大家多多指正,谢谢。

    我目前考虑使用的数据库是 TiDB ,如果是这个数据库的话,是否有什么特定的技巧可以减少重复存储,谢谢。
    5 条回复    2022-01-02 17:05:51 +08:00
    dayeye2006199
        1
    dayeye2006199  
       267 天前
    关系型数据库设计不可以吗?

    用户表 - 用户 id | 姓名 | 其他信息
    公司表 - 公司 id | 公司名称 |其他信息
    履历表 - 用户 id | 公司 id | 职位 |起止时间
    powinds
        2
    powinds  
       267 天前 via Android
    用户和履历之间建张中间表,了解一下数据库三范式
    vanton
        3
    vanton  
       267 天前
    履历单独存张表啦,履历表可以多几个字段,存的时候就提取关键信息。
    用户表越简单越好,uid 对上就行。

    为啥要在读数据的时候做那么多工作?
    这种工作是存的时候做的。
    johnsona
        4
    johnsona  
       267 天前 via iPhone
    一楼
    jones2000
        5
    jones2000  
       266 天前
    mongo 存呗, 搜索直接同步到 es 上
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2525 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 11:34 · PVG 19:34 · LAX 04:34 · JFK 07:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.