Foxtable(狐表)用户栏目专家坐堂 → [讨论]论伪删除的实现意义


  共有15145人关注过本帖树形打印复制链接

主题:[讨论]论伪删除的实现意义

帅哥哟,离线,有人找我吗?
qtcks
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
[讨论]论伪删除的实现意义  发帖心情 Post By:2010/7/30 19:51:00 [只看该作者]

伪删除的实现意义
EPPLE_HAX2

关于伪删除的一些看法

做程序的时候,大家主要的动作是增删改,在这其中再加上处理逻辑关系.于是很多时候我们会遇到这样的问题.

比如,我们需要删除一行数据的时候,但这行数据有很多子项,有些人是在数据库中不建立表的主外键关系,有些人是先删除所有子项,再删除我们所想删除的数据.

对于第一种,不建立表主外键关系的处理方法,是最不好的一种处理方法,因为以后,你的所有子项会在子表中累积很多,并且表的数据结构体现的也不完整.

而对于第二种,的确节省了很多空间,但遇到有些问题的时候,比如有很多订单,都购买的是同一种商品,而商品的信息又是通过外键链接ID查看的.这个时候,如果伤处了商品的信息,那么,其对应的所有订单的信息也同样被删除一空,这样肯定是不可取的.

那么下面我们来说说第三种方法,伪删除.

其实伪删除的原理非常简单,就是我们在数据库中,对于所有的表,都有这样一列,比如  列名:YN,数据类型:bit,默认值:True
这一列的作用就是表明此行数据是否在数据库中存在,所有存在的数据,YN列的值都为True,如果你要删除某一行的话,你将此行的YN列改为Falsh则标明为已经删除,但是这样还是会产生很多的不必要的信息存放在数据库中,所以,我们需要对数据库提供一个批量清理YN列为Falsh的数据,并整理其中的逻辑结构的方法,然后定期的,或者指定的时间调用它.

伪删除的好处有以下几点

1,可以在数据库中建立完整的数据结构

2,不用再用户执行具体操作的时候,为整理完善数据结构花费大量的时间和性能.

3,数据删除后还能在一定范围内,起到它应该承担的任务.比如连接查看一些基本信息的时候,不会导致删除后的数据不完整.

4,可以修复错误的操作.

我发现很多人都没有使用伪删除,我已经用了很久了,在这里简单的给大家分享一下

转载

 回到顶部
帅哥哟,离线,有人找我吗?
雨中的泪
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1432 积分:9061 威望:0 精华:0 注册:2009/8/19 8:19:00
  发帖心情 Post By:2010/7/30 20:51:00 [只看该作者]

不要伪删除,那系统会更慢的

 回到顶部
帅哥哟,离线,有人找我吗?
qtcks
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
  发帖心情 Post By:2010/7/30 22:14:00 [只看该作者]

有利毕有弊,要看客户对这方面的需求如何。

如果碰到极度不信任的人,需要记录删除记录一定时间。防止恶意删除等要求。

我想,伪删除应该能解决吧。


 回到顶部
帅哥哟,离线,有人找我吗?
kylin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2010/7/31 8:22:00 [只看该作者]

我早接触的DBaseⅣ数据库就是这样子,感觉还不错。对于大量数据在某些时候可能会不好使。

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/7/31 9:29:00 [只看该作者]

以下是引用hnaysx在2010-7-30 20:44:00的发言:
支持,我的一个系统就是使用了伪删除,这样在项目关闭以后依然可以收回数据,建议Foxtable的项目支持这个

自己添加一个字段 IsDelete,然后修改自己的SQL语句就可以了。不需要Foxtable额外的支持。

 

如果让Foxtable内嵌无数特殊功能,他会越来越臃肿。

比如需要支持插入行,内部表增加了一个隐藏列。 需要支持锁定,内部表增加了一个隐藏列。  现在需要增加伪删除,又要增加一个隐藏列。

这样下去,内部表就有一大堆隐藏列,这对不需要这些功能的用户来说是不公平的。

即使有些用户需要这个功能,但也不是每个表都需要这些隐藏列。

 


 回到顶部
帅哥哟,离线,有人找我吗?
lkqing
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:492 积分:4243 威望:0 精华:0 注册:2008/9/1 20:47:00
  发帖心情 Post By:2010/7/31 10:03:00 [只看该作者]

以下是引用lxl在2010-7-31 9:29:00的发言:

自己添加一个字段 IsDelete,然后修改自己的SQL语句就可以了。不需要Foxtable额外的支持。

 

如果让Foxtable内嵌无数特殊功能,他会越来越臃肿。

比如需要支持插入行,内部表增加了一个隐藏列。 需要支持锁定,内部表增加了一个隐藏列。  现在需要增加伪删除,又要增加一个隐藏列。

这样下去,内部表就有一大堆隐藏列,这对不需要这些功能的用户来说是不公平的。

即使有些用户需要这个功能,但也不是每个表都需要这些隐藏列。

 

有道理


 回到顶部
帅哥哟,离线,有人找我吗?
kylin
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2010/7/31 10:43:00 [只看该作者]

以下是引用lxl在2010-7-31 9:29:00的发言:

自己添加一个字段 IsDelete,然后修改自己的SQL语句就可以了。不需要Foxtable额外的支持。

 

如果让Foxtable内嵌无数特殊功能,他会越来越臃肿。

比如需要支持插入行,内部表增加了一个隐藏列。 需要支持锁定,内部表增加了一个隐藏列。  现在需要增加伪删除,又要增加一个隐藏列。

这样下去,内部表就有一大堆隐藏列,这对不需要这些功能的用户来说是不公平的。

即使有些用户需要这个功能,但也不是每个表都需要这些隐藏列。

 

如果利用这种机制实现伪删除显然是不经济的


 回到顶部
帅哥哟,离线,有人找我吗?
qtcks
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
  发帖心情 Post By:2010/7/31 13:59:00 [只看该作者]

在现在的系统里,要删除一条数据,只需要Tables("表名").Current.Delete

然而伪删除的代码几何呢?

作为一个二次开发平台,foxtable,在数据处理方面已经很优秀了。

但,作为一个使用者,二次开发者来讲,是远远不够的。

讨论伪删除的目的在于,该功能,大多数用户是否需要,需要又如何实现。

毕竟一个发展阶段的二次开发平台,不应该为不受欢迎的功能做出妥协。


 回到顶部
帅哥哟,离线,有人找我吗?
kylin
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2010/7/31 15:19:00 [只看该作者]

如果就按一楼的做法,伪删除就是过滤掉标识列YN=False的列,在目前的FoxTable中就要适时地重新加载这个表

 

大家看看是否愿意这样。


 回到顶部
帅哥哟,离线,有人找我吗?
qtcks
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
  发帖心情 Post By:2010/7/31 15:33:00 [只看该作者]

不单单只是删除、与加载的问题,还有更深层的问题,唯一约束。又该如何。

我目前考虑的是采用日期字段来作为删除字段。

空内容为正常,删除、停用时获取前日期时间,防止重复。使唯一约束能正常

 


 回到顶部
总数 26 1 2 3 下一页