这是一个创建于 1005 天前的主题,其中的信息可能已经有所发展或是发生改变。
数据库结构设计求助
假设我们用户表有 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
|
|
1
dayeye2006199 2022-01-01 06:05:36 +08:00
关系型数据库设计不可以吗?
用户表 - 用户 id | 姓名 | 其他信息 公司表 - 公司 id | 公司名称 |其他信息 履历表 - 用户 id | 公司 id | 职位 |起止时间
|
|
|
2
powinds 2022-01-01 07:44:48 +08:00 via Android
用户和履历之间建张中间表,了解一下数据库三范式
|
|
|
3
vanton 2022-01-01 08:37:33 +08:00
履历单独存张表啦,履历表可以多几个字段,存的时候就提取关键信息。 用户表越简单越好,uid 对上就行。
为啥要在读数据的时候做那么多工作? 这种工作是存的时候做的。
|
|
|
4
johnsona 2022-01-01 19:13:50 +08:00 via iPhone
一楼
|
|
|
5
jones2000 2022-01-02 17:05:51 +08:00
mongo 存呗, 搜索直接同步到 es 上
|