关于删除有关联的数据的问题

从开始工作到现在已经开发过好几个系统。在每个系统中,关于删除有主外键关系的数据的功能我一直把握的不好,这是一个一直困挠我的问题。之前我对于这个问题我一般以假删除做处理。像系统字典里的类型这样的数据,和它相关联的表肯定有N多个,如果做级联删除的话,肯定不现实,万一客户误操作的话,那就完蛋了。所以我一般做伪删除处理,隐藏伪删除的类别,但与之相关的其它数据还是让它显示的,这样做就会让客户觉得很迷糊,想已经删除了这一类别怎么还会在这里出现,而且逻辑上也说不过去;如果我把相关的数据也隐藏的话,那这样就跟级联删除相关数据效果一样了,同样是不能看见相关的数据,且这样会出现很多垃圾数据(对于非重要的数据)和添加新数据时增加的工作量(对于不能重名的数据)。如果把删除功能做成这样,当客户删除一数据里,如有相关的数据则提示他“已有相关数据,先删除相关数据再删除此数据”,这样做就消除了误删的可能性和垃圾数据的积累,但这样做可想而知的工作量,像类别这样的表,跟它相关的表可能会有几十张之多,有次一系统我这样做了,都做的我头都大了(虽然是写在存储过程里都是一些count()的语句)。现在我有一想法就是利用数据库里的主外键约束,删除数据时会出现报错,然后用程序捕获(try{}catch{})错误,判断错误是否是由约束引起的,如果则提示给客户,这样就解决了所有上述所有麻烦,不过不知道这样效率会怎样,有没有哪位高手这样做过或者有更好的办法解决这一事情,请大家帮忙。。。先在此真诚的感谢…

posted @ 2009-12-07 16:35  阿松  阅读(810)  评论(0编辑  收藏  举报