Java 后端,关于修改名称对应的下级所有部门都要修改全称

2021-12-29 06:54:38 +08:00
 Lyv5
各位大佬好,给大佬倒卡布奇诺,如下

例子:
数据库内容
index deptname deptfullname upstreamAuthorities
1 开发中心 开发中心 0
2 java 开发中心-java 1
3 Linux 开发中心-java-Linux 2

用的是 springboot
现在修改 java 名字为 Python 相应的 deptfullname 和 Linux 的 deptfullname 也要修改 只要是被修改 java 的下级部门全称包含 java 的也要修改 当然部门层级以上只是一小部分

现在只想到二级部门用分割的办法 感觉不严谨 希望各位大佬不吝赐教 指点一二思路或者有类似的教程的链接


刚转行入门的菜鸡 如有描述功能不当还望各位大佬指正批评
祝大佬 头发浓密 睡眠良好 情绪稳定 抱拳。
3729 次点击
所在节点    Java
20 条回复
Lyv5
2021-12-29 07:20:51 +08:00
index deptname deptfullname upstreamAuthorities
1 开发中心 开发中心 0
2 java 开发中心-java 1
3 Linux 开发中心-java-Linux 2

格式问题
Quarter
2021-12-29 07:27:44 +08:00
我觉得可以在查询的时候处理拼接,本身数据库存可以不需要存 fullName ,不知道是不是个方法
vanton
2021-12-29 07:32:58 +08:00
不要存全名,存一个上级 id 。
从 id 获取到上级名称后拼接。
Quarter
2021-12-29 08:05:20 +08:00
对对,忘记说了,还要个 parentId 的字段保存层级关系
Wien
2021-12-29 08:11:11 +08:00
1. 查询的时候拼接 deptfullname ,单条记录只存一个 deptname ,修改也只需要修改一条记录。列表查询也直接查出来自己内存中组装 deptfullname 。
2. 加一个字段存所有上级的 id 路径 upstreamIdPath 。如 3 Linux Linux 2 1/2 。这样后续可以直接通过单条记录快速拼接出 deptfullname 。
kekxv
2021-12-29 08:25:23 +08:00
你这个我觉得直接改数据库更快🐶
coolmenu
2021-12-29 08:26:53 +08:00
数据库加个 view ,让 python 访问视图呗
justfindu
2021-12-29 08:44:48 +08:00
查询 -java , replace
h82258652
2021-12-29 08:49:00 +08:00
楼主可以看一下树状结构在数据库应该怎么存
像这个一般会存一个 path(例如 1/3/7)和 parentid
Lyv5
2021-12-29 09:08:37 +08:00
springboot 后端修改 例如进入 web 界面修改 一个二级部门 java 为 Python 相应的下级部门全称也要在数据库中修改
数据库字段不能修改
Saxton
2021-12-29 09:21:09 +08:00
查的时候拼接不行吗,为什么要冗余
heiyo0
2021-12-29 09:47:11 +08:00
我也有一张这种表,然后我冗余这个 fullname 主要是为了方便能快速的查出单条记录,比如说我能通过“开发中心-java-Linux”,“运维中心-Linux”快速查出这两条记录, 那如果不冗余存储的话,请问是要怎么可以快速查出来呢?我也一直觉得这样冗余存储非常不好,但我又不知道怎么能快速查出单条数据来
zhouyou457
2021-12-29 10:12:53 +08:00
如果不想改代码,可以直接在这个表加字段更新触发器。但是数据库的触发器的性能有点儿惨
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 个子级部门估计够用了吧
pengtdyd
2021-12-29 11:35:20 +08:00
和 java 没关系,是表结构设计的不行
chihiro2014
2021-12-29 11:43:54 +08:00
=。=你数据库里面没必要存名字啊,存 12345 ,然后代码里面写枚举类啊,这样你就不用替换了
fishDD
2021-12-29 11:50:14 +08:00
个人拙见哈,不知道对不对。简单看了下,这里涉及到三个地方:
1:接口返回名称
2: 代码中的名称
3: 数据库名称
看你想要的最终目的是什么,如果仅仅只是接口返回的话,那可以通过字典表的形式去映射,这样后面如果修改的话,那直接改字典表就行了。
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
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
dejavuwind
2021-12-30 11:29:38 +08:00
不能改数据库设计的话:
严格使用“-”进行拼接,并且名称限制不可以包含“-”,那么使用“-”进行分割然后修改也无不妥吧。按理来说修改不是很频繁的话慢一点倒也无所谓。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/825003

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX