Java 后端,关于修改名称对应的下级所有部门都要修改全称 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Lyv5
V2EX    Java

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

  •  
  •   Lyv5 2021-12-29 06:54:38 +08:00 4411 次点击
    这是一个创建于 1438 天前的主题,其中的信息可能已经有所发展或是发生改变。
    各位大佬好,给大佬倒卡布奇诺,如下

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

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

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


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

    格式问题
    Quarter
        2
    Quarter  
       2021-12-29 07:27:44 +08:00 via iPhone
    我觉得可以在查询的时候处理拼接,本身数据库存可以不需要存 fullName ,不知道是不是个方法
    vanton
        3
    vanton  
       2021-12-29 07:32:58 +08:00   5
    不要存全名,存一个上级 id 。
    从 id 获取到上级名称后拼接。
    Quarter
        4
    Quarter  
       2021-12-29 08:05:20 +08:00 via iPhone
    对对,忘记说了,还要个 parentId 的字段保存层级关系
    Wien
        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 。
    kekxv
        6
    kekxv  
       2021-12-29 08:25:23 +08:00 via iPhone
    你这个我觉得直接改数据库更快
    coolmenu
        7
    coolmenu  
       2021-12-29 08:26:53 +08:00
    数据库加个 view ,让 python 访问视图呗
    justfindu
        8
    justfindu  
       2021-12-29 08:44:48 +08:00
    查询 -java , replace
    h82258652
        9
    h82258652  
       2021-12-29 08:49:00 +08:00
    楼主可以看一下树状结构在数据库应该怎么存
    像这个一般会存一个 path(例如 1/3/7)和 parentid
    Lyv5
        10
    Lyv5  
    OP
       2021-12-29 09:08:37 +08:00
    springboot 后端修改 例如进入 web 界面修改 一个二级部门 java 为 Python 相应的下级部门全称也要在数据库中修改
    数据库字段不能修改
    Saxton
        11
    Saxton  
       2021-12-29 09:21:09 +08:00
    查的时候拼接不行吗,为什么要冗余
    heiyo0
        12
    heiyo0  
       2021-12-29 09:47:11 +08:00
    我也有一张这种表,然后我冗余这个 fullname 主要是为了方便能快速的查出单条记录,比如说我能通过“开发中心-java-Linux”,“运维中心-Linux”快速查出这两条记录, 那如果不冗余存储的话,请问是要怎么可以快速查出来呢?我也一直觉得这样冗余存储非常不好,但我又不知道怎么能快速查出单条数据来
    zhouyou457
        13
    zhouyou457  
       2021-12-29 10:12:53 +08:00
    如果不想改代码,可以直接在这个表加字段更新触发器。但是数据库的触发器的性能有点儿惨
    sujin190
        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 个子级部门估计够用了吧
    pengtdyd
        15
    pengtdyd  
       2021-12-29 11:35:20 +08:00
    和 java 没关系,是表结构设计的不行
    chihiro2014
        16
    chihiro2014  
       2021-12-29 11:43:54 +08:00
    =。=你数据库里面没必要存名字啊,存 12345 ,然后代码里面写枚举类啊,这样你就不用替换了
    fishDD
        17
    fishDD  
       2021-12-29 11:50:14 +08:00
    个人拙见哈,不知道对不对。简单看了下,这里涉及到三个地方:
    1:接口返回名称
    2: 代码中的名称
    3: 数据库名称
    看你想要的最终目的是什么,如果仅仅只是接口返回的话,那可以通过字典表的形式去映射,这样后面如果修改的话,那直接改字典表就行了。
    Itoktsnhc
        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
    qq1398371419
        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
    hiwind
        20
    hiwind  
       2021-12-30 11:29:38 +08:00
    不能改数据库设计的话:
    严格使用“-”进行拼接,并且名称限制不可以包含“-”,那么使用“-”进行分割然后修改也无不妥吧。按理来说修改不是很频繁的话慢一点倒也无所谓。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2701 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:18 PVG 14:18 LAX 22:18 JFK 01:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86