到底需要加唯一索引不

文章目录

  • 前言
  • 一、逻辑删除、唯一索引一起使用(不推荐)
  • 二、使用物理删除、并加唯一索引
  • 使用逻辑删除,不加唯一索引


前言

唯一索引、逻辑删除,相信这两个词对于java程序员来说一点都不陌生吧。

唯一索引:索引列的值必须是唯一的,不允许重复
逻辑删除:用字段的状态记录数据是否被删除

最近项目上遇到因为没有正确使用这两个东西,导致一系列的问题。比如删除的时候逻辑删除,并且比如身份证号,手机号又加了唯一索引,再次保存就报错。有些项目从业务上来讲身份证,手机号必须唯一但是没有加唯一索引,但是产生了很多重复数据,今天就来分析一下什么场景下使用这两个东西。


一、逻辑删除、唯一索引一起使用(不推荐)

不建议一起用,除非项目开发前经过严格的设计讨论。逻辑删除的数据本身作为删除了的数据来说,不应该被业务逻辑中查询到(潜规则)。

加了逻辑删除之后,并且身份证号或者手机等字段加了唯一索引之后。这种情况的话在进行业务操作的时候,被逻辑删除的数据就要被我们业务代码查询出来了。比如我一个账号(手机号)已经被删除(逻辑)了,再次注册的话,直接报错就会因为有唯一索引而保存失败。因为已经物理删除的业务数据里面含有唯一索引的字段,重新走正常新增流程的时候时候就要考虑到这种情况。

除非已经被删除的数据,唯一索引的值不会再次从新增业务,这种场景还是可以加的。只是我很少遇到这种情况

二、使用物理删除、并加唯一索引

大多数的业务场景,都不会要求物理删除,并且有写字段的值有唯一性,比如账号的身份证,用户名、手机号等。如果我们这边表的数据状态比较多,并且业务比较复杂,和其他系统关联程度比较多。涉及新增编辑的业务非常多、数量量还非常大。这种情况就使用物理删除身份证加唯一索引。

为什么呢?
说一下我们公司的案例吧,现在我们公司的会员信息,有100万,这100万的数据来源口径非常多,估计得有近10个来源口径吧,口径都这么多了,维护的人就更多了,导致有些接口有并发问题,或者说是在维护数据时候又产生了脏数据。因为对于大部分公司来说,并发测试是做得不够的。所以想这种情况唯一索引就必须加上,避脏数据的产生,便于后期的数据维护。想要记录物理删除的数据,就用单独一个表记录吧。

使用逻辑删除,不加唯一索引

这种情况就适合业务简单、数据量少的情况。因为业务简单代码好控制,好判断,好维护。数据量少,就算产生了脏数据也比较容易清理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机系列之操作系统的系统

2、大话操作系统的启动 当按下开机键时,BIOS 就会开始执行 ​ BIOS 就是放在主板上 ROM 里面的一段程序。 ​ ROM Read Only Memory(只能读取的内存) ​ 所以 BIOS 在出厂的时候就可以直接写死在 ROM 里面。 ​ 每次开机的时候&#xff…

windows下已经创建好了虚拟环境,但是切换不了的解决方法

用得多Ubuntu,今天用Windows重新更新anaconda出问题,重新安装之后,打开pycharm发现打开终端之后,刚开始是ps的状态,后面试了网上改cmd的方法,终端变成c盘开头了 切换到虚拟环境如下:目前的shell…

【EXCEL自动化08】将xls文件批量另存为xlsx文件

🔥学好办公自动化,帮你节省更多宝贵的时间 🔥这个专栏收录python办公自动化的实操案例,利用python实现高效的办公自动化 🔥实现excel,word,文件批处理等自动化操作 可以使用Python的pandas库来实现批量将xls文件另存为xlsx文件的功能。 【Excel自动化07】用pandas库…

ROS 2边学边练(26)-- 监测参数变化(C++)

前言 通常,一个节点需要对其自身参数或另一个节点的参数的更改做出响应。ParameterEventHandler类使监听参数更改变得容易,这样代码就可以对它们做出响应。 动动手 创建一个包 进入工作空间根路径的src下(ros2_ws/src)&#xff…

【Python基础】—— scipy.spatial.KDTree、matplotlib.pyplot、imageio

scipy.spatial参考博客:Python点云处理——建立KDtree 1 KDtree算法原理 KDtree构建出了一种类似于二叉树的树形数据存储结构,每一层都对应原始数据中相应的维度,以K层为一个循环,因此被称为KDtree。 每一层的左右子树的划分依据…

视频自定义字幕,中英文,彩色的,你也可以,不会不知道吧

前言 关于【SSD系列】: 前端一些有意思的内容,旨在3-10分钟里,有所获,又不为所累。 字幕,大家见过吧,其实你也可以,真的可以,真的真的可以。不难,不难,真的…

简述mvvm模式

MVVM模式是一种软件设计模式,它将应用程序的数据模型、用户界面和视图逻辑进行了清晰的分离。在MVVM中,Model代表数据模型,View代表用户界面,而ViewModel则是这两者之间的协调者,负责将Model中的数据转化为View能够理解…

06—面向对象(中)

一、多态 1、多态 概念: 多态是指同一种行为具有不同的表现形式,同一方法根据不同对象具有不同的行为方式。 特点: ①存在同名成员变量时,访问的是父类的成员变量 ②存在同名的非静态成员方法时,访问的是子类重写的…

如何评估一个RAG(检索增强生成)系统

本文首发自博客文章 如何评估一个RAG(检索增强生成)系统 RAG 概念最初来源于 2020 年 Facebook 的一篇论文,这是 Facebook 博客对论文内容的进一步解释 👉《检索增强生成:简化智能自然语言处理模型的创建》。大家都知…

【C++对于C语言的扩充】函数重载、引用以及内联函数

文章目录 🚀前言🚀函数重载注意:✈️为什么C可以实现函数重载,而C语言却不行呢? 🚀引用✈️引用的特性✈️C中为什么要引入引用✈️引用与指针的区别 🚀内联函数✈️内联函数特性 🚀…

策略模式(Strategy Pattern)在JAVA中的应用

设计模式是软件工程中的一套被广泛认可的解决特定问题的最佳实践。它们是在多年的软件开发实践中总结出的有效方法。策略模式是JAVA中常用的一种行为型设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互换,让算法…

GitHub提交PR

本教程只做开源代码库Github工程提交pr的教程,不做其他的深入的讲解 Github和Gitlab的操作类似,只不过Github叫PR,GitLab叫MR,基本上做法是一致的 以开源项目QuickChat为例 https://github.com/Binx98/QuickChat https://github…

C++项目 -- 负载均衡OJ(一)comm

C项目 – 负载均衡OJ(一)comm 文章目录 C项目 -- 负载均衡OJ(一)comm一、项目宏观结构1.项目功能2.项目结构 二、comm公共模块1.util.hpp2.log.hpp 一、项目宏观结构 1.项目功能 本项目的功能为一个在线的OJ,实现类似…

研发岗-统信UOS系统配置npm git等前端常用配置

第一步 获取root权限 配置环境等都需要用到root权限,所以我们先获取到root权限,方便下面的操作 下载软件 在UOS应用商店下载的所需应用 版本都比较低 安装node 官网下载了【arm64】的包,解压到指定文件夹,设置链接&#xff0…

苹果电脑启动磁盘是什么意思 苹果电脑磁盘清理软件 mac找不到启动磁盘 启动磁盘没有足够的空间来进行分区

当你一早打开苹果电脑,结果系统突然提示: “启动磁盘已满,需要删除部分文件”。你会怎么办?如果你认为单纯靠清理废纸篓或者删除大型文件就能释放你的启动磁盘上的空间,那就大错特错了。其实苹果启动磁盘的清理技巧有很…

Nginx基础(06)

Nginx基础(05) uWSGI 介绍 uWSGI 是一个 Web服务器 主要用途是将Web应用程序部署到生产环境中 可以用来连接Nginx服务与Python动态网站 1. 用 uWSGI 部署 Python 网站项目 配置 Nginx 使其可以将动态访问转交给 uWSGI 安装 python 工具及依赖 安…

Android 日历-周视图

//获取当天 Calendar calendar Calendar.getInstance(); int year calendar.get(Calendar.YEAR); int month calendar.get(Calendar.MONTH) 1; // 注意:月份是从0开始的 int day calendar.get(Calendar.DAY_OF_MONTH); //基姆拉尔森计算公式根据日期判断星期几…

STM32之HAL开发——CubeMX配置串行Flash文件系统

配置流程 在开始配置FATFS前,需要提前配置好RCC的时钟,以及时钟的频率,另外还要配置好Debug选项(选择串行) 选项介绍 文件系统适用于SD卡,Disk磁盘等,需要我们将对应的驱动打开才可以使用。 …

【vue】Pinia-2 安装Pinia,使用store

1. 安装Pinia 在项目路径下执行npm install pinia 在package.json中查看 2. 使用store 在main.js中添加 import { createPinia } from pinia const pinia createPinia()修改createApp方法 最后示例如下(三处修改) import { createApp } from vue //…

SimpleImputer缺失数据处理报错解决方案

作者Toby,来源公众号:Python风控建模,SimpleImputer缺失数据处理报错解决方案 今天有学员反馈缺失值代码报错,由于sklearn缺失值处理的包升级,下面把官网最新的缺失值处理代码奉上。 参考https://scikit-learn.org/st…