日期:2014-05-17  浏览次数:20702 次

客户要求,对数据不能物理删除的问题
客户要求不能对数据做物理删除,只能设置删除标记字段。
现在的问题是,有些字段是Unique的,比如用户表的用户名。那么当某个用户被删除后,它并没有被实际从数据库删除掉,这时候如果再创建一个新的用户,用户名与被删除的相同的话,就会违反Unique约束。但是从业务方面来说,又不能禁止添加与已删除用户名相同的用户。
我的想法是,在执行删除操作时,将该条数据所有Unique字段进行更改,保证客户即使多次删除、添加也不会出现错误,但总觉得不太妥当。想来问一下有没有同样问题的,都是怎么解决的。

------解决方案--------------------
删除的用户数据,能不能扔到另一张表里呢,把用户这个表留一个外键连接那个就好了,就是查询用户有多少的时候可能会麻烦点
------解决方案--------------------
探讨

ID 设为key啊 名字怎么可以是唯一

------解决方案--------------------
一般的时候删除肯定是假删,但如果在添加一个相同用户的时候,只告诉他用户名已存在就是了,我们是这么做的,如果你们有特殊要求,改改数据库结构,不拿用户名当约束就是了。也可以弄复杂点 每一张表建一个删除备份表,删除的数据转移到删除备份表上面去,但这么做的话想把删除的用户在激活就会有一些问题,呵呵,其实我感觉告诉他重复了就可以了
------解决方案--------------------
最简单的方法 提示已经存在,
因为用户名本来就是唯一标识,就将导致你的数据中或业务中存在以用户名为区分标记的数据或操作,如果你修改了用户名的唯一性,将会导致后续的数据问题和业务问题
------解决方案--------------------
既然从业务方面来说,不能禁止添加与已删除用户名相同的用户。
何必将用户表的用户名字段设成Unique的呢?

如果担心登录时,所用的用户名在数据库中为复数时,那判断是必须的。
因为你没有从根本上杜绝这种事情发生,除非在申请用户名时加以限制,
可以禁止添加与已存在的正常使用中的用户名(非已删除的相同用户名)相同的用户。
------解决方案--------------------
探讨

既然从业务方面来说,不能禁止添加与已删除用户名相同的用户。
何必将用户表的用户名字段设成Unique的呢?

如果担心登录时,所用的用户名在数据库中为复数时,那判断是必须的。
因为你没有从根本上杜绝这种事情发生,除非在申请用户名时加以限制,
可以禁止添加与已存在的正常使用中的用户名(非已删除的相同用户名)相同的用户。