博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
当软删除遇上联合主键
阅读量:5175 次
发布时间:2019-06-13

本文共 749 字,大约阅读时间需要 2 分钟。

数据大多是软删除的,而有时候遇到联合主键就头疼了,例如

public class Thumbup{public int Id {
get;set;}public int UserId {
get;set;}public int BlogId {
get;set;}public bool IsDeleted {
get;set;}}

在这个点赞表中,每人只能赞一次,因此通过联合主键(UserId, BlogId) 实现唯一约束。 但是当软删除之后,再赞一次的时候,就无法插入数据了,因为违反了唯一性约束。解决这个问题,第一想法就是把 IsDeleted 改成

public DateTimeOffSet DaletedAt {
get;set;}

再修改联合主键包含 DaletedAt,这样就避免了软删除之后,无法插入新数据了。但是这样的话,索引也变得更复杂了,应该会导致操作数据的效率降低,那么是不是还有更好的解决办法呢?外事不决问 Google,果然这个问题早就有很多人遇到了,有人把 IsDeleted 字段改成 public Guid DeletedToken {get;set;} 利用不重复的 Guid 来实现,也是一个思路,但是问题依旧。

还有一个更好的解决办法,不过需要数据库支持,那就是有条件的唯一索引,意思就是给索引加一个条件,伪代码:Create Index on (UserId & BlogId) where IsDeleted == false 

目前用的 mongodb 有 partial index ,其他数据库等遇到再更新。

转载于:https://www.cnblogs.com/kexxxfeng/p/8988871.html

你可能感兴趣的文章
Ubuntu 基本操作
查看>>
JAVA数组的定义及用法
查看>>
18寒假第七测
查看>>
帧中继
查看>>
105:MyBatis常见实用面试题整理
查看>>
Base on QC Automation Framework v1.0
查看>>
bzoj 3261: 最大异或和 (可持久化trie树)
查看>>
UVA 11440 Help Tomisu
查看>>
bzoj千题计划258:bzoj3123: [Sdoi2013]森林
查看>>
开博@纪念
查看>>
linux的正则表达式
查看>>
Android 中EditText 与Keyboard 引起的UI bug
查看>>
20162316刘诚昊 2016-2017-2《程序设计与数据结构》课程总结
查看>>
代理模式---动态代理之JDK
查看>>
POJ 1182 食物链
查看>>
python xml解析和生成
查看>>
MySQL MGR集群搭建
查看>>
吴恩达深度学习笔记 cousrse4 week1作业
查看>>
程序员前辈走过的路
查看>>
UBUNTU 10.04 更新源 补充
查看>>