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