跳转至内容
  • 版块
  • 最新
  • 热门
  • 标签
  • 积分榜
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

百得社区

  1. 主页
  2. 技术交流
  3. 大后端交流区
  4. 技巧:逻辑删除也能实现unique!

技巧:逻辑删除也能实现unique!

已定时 已固定 已锁定 已移动 大后端交流区
5 帖子 4 发布者 125 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • Jetbrains 中国J 离线
    Jetbrains 中国J 离线
    Jetbrains 中国
    写于 最后由 编辑
    #1

    痛点

    在逻辑删除的设计情况下,我们如果使用unique索引就会导致新增数据与已经删除的数据冲突,如:
    aca9093c-84e8-489d-bb2b-609d33a3a93e-image.png

    上述情况,如果username使用了unique索引就会导致数据无法写入。

    解决方案

    采用postgresql数据库方案的条件索引

    create unique index sys_user_username_index
        on public.sys_user (username) where deleted = 0;
    

    让索引带上where😑

    1 条回复 最后回复
    3
    • 温 离线
      温 离线
      温暖的火龙果687
      写于 最后由 编辑
      #2

      逻辑删除还是倾向于建个his的表,要保留的话就增加一个Dao层,重写删除逻辑,复制再迁移,这样后面的查询也方便

      Jetbrains 中国J 1 条回复 最后回复
      1
      • 流浪法师刘海柱流 离线
        流浪法师刘海柱流 离线
        流浪法师刘海柱
        写于 最后由 编辑
        #3

        nice

        1 条回复 最后回复
        1
        • 重复过往重 离线
          重复过往重 离线
          重复过往
          写于 最后由 编辑
          #4

          好!

          这次不得不冲了!

          1 条回复 最后回复
          0
          • Jetbrains 中国J 离线
            Jetbrains 中国J 离线
            Jetbrains 中国
            在 回复了 温暖的火龙果687 最后由 编辑
            #5

            @温暖的火龙果687 对于小型项目维护成本就会成倍变高。
            框架层面:
            因为主流的ORM框架,以mybatis-plus为例,可以直接调用框架自带的delete来实现逻辑删除的update输出,但是如果维护his之后,就要重写框架自带的所有delete方法,将delete作为物理删除的同时还要一份his的写入。

            表层面:
            所有的表都要对应一份his表,反而增加了运维难度。

            另外一种思路:
            建立一个从库,从库总是将insert和update进行同步,但是不同步delete。可以进行一个全量的备份库来使用,但是不对外提供查询。但是感觉也很冗余。都不如逻辑删除来的简单直观。

            1 条回复 最后回复
            0

            Powered by NodeBB | Contributors
            • 登录

            • 登录或注册以进行搜索。
            • 第一个帖子
              最后一个帖子
            0
            • 版块
            • 最新
            • 热门
            • 标签
            • 积分榜
            • 用户
            • 群组