
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 不要存全名,存一个上级 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. 查询的时候拼接 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 使用嵌套集存储父子关系,可以 O(1)查询出所有子集(包括子集的子集),这样遍历一次修改名称就行 https://docs.microsoft.com/zh-cn/archive/blogs/mvpawardprogram/hierarchies-convert-adjacency-list-to-nested-sets |
20 hiwind 2021-12-30 11:29:38 +08:00 不能改数据库设计的话: 严格使用“-”进行拼接,并且名称限制不可以包含“-”,那么使用“-”进行分割然后修改也无不妥吧。按理来说修改不是很频繁的话慢一点倒也无所谓。 |