以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [讨论]论伪删除的实现意义 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=7734) |
-- 作者:qtcks -- 发布时间:2010/7/30 19:51:00 -- [讨论]论伪删除的实现意义 伪删除的实现意义
EPPLE_HAX2
关于伪删除的一些看法 做程序的时候,大家主要的动作是增删改,在这其中再加上处理逻辑关系.于是很多时候我们会遇到这样的问题. 比如,我们需要删除一行数据的时候,但这行数据有很多子项,有些人是在数据库中不建立表的主外键关系,有些人是先删除所有子项,再删除我们所想删除的数据. 对于第一种,不建立表主外键关系的处理方法,是最不好的一种处理方法,因为以后,你的所有子项会在子表中累积很多,并且表的数据结构体现的也不完整. 而对于第二种,的确节省了很多空间,但遇到有些问题的时候,比如有很多订单,都购买的是同一种商品,而商品的信息又是通过外键链接ID查看的.这个时候,如果伤处了商品的信息,那么,其对应的所有订单的信息也同样被删除一空,这样肯定是不可取的. 那么下面我们来说说第三种方法,伪删除. 其实伪删除的原理非常简单,就是我们在数据库中,对于所有的表,都有这样一列,比如 列名:YN,数据类型:bit,默认值:True 伪删除的好处有以下几点 1,可以在数据库中建立完整的数据结构 2,不用再用户执行具体操作的时候,为整理完善数据结构花费大量的时间和性能. 3,数据删除后还能在一定范围内,起到它应该承担的任务.比如连接查看一些基本信息的时候,不会导致删除后的数据不完整. 4,可以修复错误的操作. 我发现很多人都没有使用伪删除,我已经用了很久了,在这里简单的给大家分享一下 |
-- 作者:雨中的泪 -- 发布时间:2010/7/30 20:51:00 -- 不要伪删除,那系统会更慢的 |
-- 作者:qtcks -- 发布时间:2010/7/30 22:14:00 -- 有利毕有弊,要看客户对这方面的需求如何。 如果碰到极度不信任的人,需要记录删除记录一定时间。防止恶意删除等要求。 我想,伪删除应该能解决吧。 |
-- 作者:kylin -- 发布时间:2010/7/31 8:22:00 -- 我早接触的DBaseⅣ数据库就是这样子,感觉还不错。对于大量数据在某些时候可能会不好使。 |
-- 作者:lxl -- 发布时间:2010/7/31 9:29:00 -- 以下是引用hnaysx在2010-7-30 20:44:00的发言:
支持,我的一个系统就是使用了伪删除,这样在项目关闭以后依然可以收回数据,建议Foxtable的项目支持这个 自己添加一个字段 IsDelete,然后修改自己的SQL语句就可以了。不需要Foxtable额外的支持。
如果让Foxtable内嵌无数特殊功能,他会越来越臃肿。 比如需要支持插入行,内部表增加了一个隐藏列。 需要支持锁定,内部表增加了一个隐藏列。 现在需要增加伪删除,又要增加一个隐藏列。 这样下去,内部表就有一大堆隐藏列,这对不需要这些功能的用户来说是不公平的。 即使有些用户需要这个功能,但也不是每个表都需要这些隐藏列。
|
-- 作者:lkqing -- 发布时间:2010/7/31 10:03:00 -- 以下是引用lxl在2010-7-31 9:29:00的发言:
自己添加一个字段 IsDelete,然后修改自己的SQL语句就可以了。不需要Foxtable额外的支持。
如果让Foxtable内嵌无数特殊功能,他会越来越臃肿。 比如需要支持插入行,内部表增加了一个隐藏列。 需要支持锁定,内部表增加了一个隐藏列。 现在需要增加伪删除,又要增加一个隐藏列。 这样下去,内部表就有一大堆隐藏列,这对不需要这些功能的用户来说是不公平的。 即使有些用户需要这个功能,但也不是每个表都需要这些隐藏列。
有道理 |
-- 作者:kylin -- 发布时间:2010/7/31 10:43:00 -- 以下是引用lxl在2010-7-31 9:29:00的发言:
自己添加一个字段 IsDelete,然后修改自己的SQL语句就可以了。不需要Foxtable额外的支持。
如果让Foxtable内嵌无数特殊功能,他会越来越臃肿。 比如需要支持插入行,内部表增加了一个隐藏列。 需要支持锁定,内部表增加了一个隐藏列。 现在需要增加伪删除,又要增加一个隐藏列。 这样下去,内部表就有一大堆隐藏列,这对不需要这些功能的用户来说是不公平的。 即使有些用户需要这个功能,但也不是每个表都需要这些隐藏列。
如果利用这种机制实现伪删除显然是不经济的 |
-- 作者:qtcks -- 发布时间:2010/7/31 13:59:00 -- 在现在的系统里,要删除一条数据,只需要Tables("表名").Current.Delete 然而伪删除的代码几何呢? 作为一个二次开发平台,foxtable,在数据处理方面已经很优秀了。 但,作为一个使用者,二次开发者来讲,是远远不够的。 讨论伪删除的目的在于,该功能,大多数用户是否需要,需要又如何实现。 毕竟一个发展阶段的二次开发平台,不应该为不受欢迎的功能做出妥协。 |
-- 作者:kylin -- 发布时间:2010/7/31 15:19:00 -- 如果就按一楼的做法,伪删除就是过滤掉标识列YN=False的列,在目前的FoxTable中就要适时地重新加载这个表
大家看看是否愿意这样。 |
-- 作者:qtcks -- 发布时间:2010/7/31 15:33:00 -- 不单单只是删除、与加载的问题,还有更深层的问题,唯一约束。又该如何。 我目前考虑的是采用日期字段来作为删除字段。 空内容为正常,删除、停用时获取前日期时间,防止重复。使唯一约束能正常
|