1
Lyv5 OP index deptname deptfullname upstreamAuthorities
1 开发中心 开发中心 0 2 java 开发中心-java 1 3 Linux 开发中心-java-Linux 2 格式问题 |
2
Quarter 2021-12-29 07:27:44 +08:00 via iPhone
我觉得可以在查询的时候处理拼接,本身数据库存可以不需要存 fullName ,不知道是不是个方法
|
3
vanton 2021-12-29 07:32:58 +08:00 5
不要存全名,存一个上级 id 。
从 id 获取到上级名称后拼接。 |
4
Quarter 2021-12-29 08:05:20 +08:00 via iPhone
对对,忘记说了,还要个 parentId 的字段保存层级关系
|
5
Wien 2021-12-29 08:11:11 +08:00 1
1. 查询的时候拼接 deptfullname ,单条记录只存一个 deptname ,修改也只需要修改一条记录。列表查询也直接查出来自己内存中组装 deptfullname 。
2. 加一个字段存所有上级的 id 路径 upstreamIdPath 。如 3 Linux Linux 2 1/2 。这样后续可以直接通过单条记录快速拼接出 deptfullname 。 |
6
kekxv 2021-12-29 08:25:23 +08:00 via iPhone
你这个我觉得直接改数据库更快🐶
|
7
coolmenu 2021-12-29 08:26:53 +08:00
数据库加个 view ,让 python 访问视图呗
|
8
justfindu 2021-12-29 08:44:48 +08:00
查询 -java , replace
|
9
h82258652 2021-12-29 08:49:00 +08:00
楼主可以看一下树状结构在数据库应该怎么存
像这个一般会存一个 path(例如 1/3/7)和 parentid |
10
Lyv5 OP springboot 后端修改 例如进入 web 界面修改 一个二级部门 java 为 Python 相应的下级部门全称也要在数据库中修改
数据库字段不能修改 |
11
Saxton 2021-12-29 09:21:09 +08:00
查的时候拼接不行吗,为什么要冗余
|
12
heiyo0 2021-12-29 09:47:11 +08:00
我也有一张这种表,然后我冗余这个 fullname 主要是为了方便能快速的查出单条记录,比如说我能通过“开发中心-java-Linux”,“运维中心-Linux”快速查出这两条记录, 那如果不冗余存储的话,请问是要怎么可以快速查出来呢?我也一直觉得这样冗余存储非常不好,但我又不知道怎么能快速查出单条数据来
|
13
zhouyou457 2021-12-29 10:12:53 +08:00
如果不想改代码,可以直接在这个表加字段更新触发器。但是数据库的触发器的性能有点儿惨
|
14
sujin190 2021-12-29 11:17:46 +08:00
其实这种要是有个有格式的部门编码就好了,比如用 bitint 保存,用 18 个数字作为部门编码,每两个数字组成一个部门 ID ,共可以有 9 级,每级最多可以 99 个部门,一级部门在最前面,后面部门依次往后,不足 18 个数字后面补 0
比如: 一级销售部 010000000000000000 一级研发部 020000000000000000 二级销售-北京 010100000000000000 二级研发-java 020100000000000000 三级研发-java-linux 020101000000000000 这样查询子级部门啥的就是个大小比较,很方便,新增修改部门也不算麻烦,如果想级别更多,那就搞两个 bigint 字段似乎就行啊,同级别 99 个子级部门估计够用了吧 |
15
pengtdyd 2021-12-29 11:35:20 +08:00
和 java 没关系,是表结构设计的不行
|
16
chihiro2014 2021-12-29 11:43:54 +08:00
=。=你数据库里面没必要存名字啊,存 12345 ,然后代码里面写枚举类啊,这样你就不用替换了
|
17
fishDD 2021-12-29 11:50:14 +08:00
个人拙见哈,不知道对不对。简单看了下,这里涉及到三个地方:
1:接口返回名称 2: 代码中的名称 3: 数据库名称 看你想要的最终目的是什么,如果仅仅只是接口返回的话,那可以通过字典表的形式去映射,这样后面如果修改的话,那直接改字典表就行了。 |
18
Itoktsnhc 2021-12-29 11:59:08 +08:00
还是按照层级关系查询然后拼接吧,可能的问题就是 sql 查询次数的问题:
https://stackoverflow.com/questions/169817/is-it-possible-to-query-a-tree-structure-table-in-mysql-in-a-single-query-to-an 或者 fullname 不存一个名字拼接的内容 存 id 的串 比如 1>2>3>4 |
19
qq1398371419 2021-12-29 14:13:05 +08:00 1
使用嵌套集存储父子关系,可以 O(1)查询出所有子集(包括子集的子集),这样遍历一次修改名称就行 https://docs.microsoft.com/zh-cn/archive/blogs/mvpawardprogram/hierarchies-convert-adjacency-list-to-nested-sets
|
20
dejavuwind 2021-12-30 11:29:38 +08:00
不能改数据库设计的话:
严格使用“-”进行拼接,并且名称限制不可以包含“-”,那么使用“-”进行分割然后修改也无不妥吧。按理来说修改不是很频繁的话慢一点倒也无所谓。 |