首页 新闻 会员 周边 捐助

如何删除主键表的记录的前提是不能影响外键表

0
悬赏园豆:200 [已解决问题] 解决于 2015-05-29 14:13

怎样删除主键表的记录却不影响外见表相关内容,比如有2个表,分别为“员工表”和“消费明细表”,关联。

员工表:

ID-----员工姓名

1----- test1

2------test2

消费明细表:

单号--------------------项目--------------服务员工

201401011-----------action1---------------1

201401012-----------action2---------------2

因为员工变动够大,每当有员工离职j时就要对“员工表”相关记录进行删除,但如果我在“员工表”中删除一条记录,那么“消费明细表”对应的记录就会级联删除,或外键设为为null,无论怎样“消费明细表”信息都受损。是否有合适的方法去解决这类问题,消费明细表如何永久保存?一些大型系统是如何做的?

成王之路的主页 成王之路 | 初学一级 | 园豆:22
提问于:2015-05-29 12:05
< >
分享
最佳答案
0

一般系统的数据都应该不会物理删除的

都只是一个status而已。

比如你把员工表建一个Status字段,0代表在职,1代表离职。

这样子表数据你都不用动的(当然在离职的时候。你也可以把子表的数据设置为无效:也同样加一个status字段)

收获园豆:190
请叫我头头哥 | 大侠五级 |园豆:9382 | 2015-05-29 12:09

你看,大家都有拯救地球的心愿,虽然未曾闻达,依旧心怀天下。

我的回答不讨人喜欢。

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-05-29 14:44

@爱编程的大叔: 不能理解,那是境界不够。

幻天芒 | 园豆:37205 (高人七级) | 2015-05-29 15:13

@爱编程的大叔 @幻天芒:  这一点我跟老幻持相同意见, 境界不够还怪谁啊? 

请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-05-29 15:27
其他回答(5)
1

你要这样删除就不能级联。

要么就是虚拟删除。

不用管人家大型系统咋办,吃沙县料理,操中南海的心做啥。

收获园豆:1
爱编程的大叔 | 园豆:30844 (高人七级) | 2015-05-29 12:07

难得大叔中规中矩的回答一次问题啊, 顶一个

支持(0) 反对(0) 请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-05-29 12:08
0

这种应该不能删除的,设置一个状态,离职 在职 实习 等等。

如果要删除数据的话 应该加一个 逻辑删除的 flag, 防止历史数据删除

收获园豆:3
Tom.汤 | 园豆:3058 (老鸟四级) | 2015-05-29 13:05
0

1.给员工表加个状态字段,标示 在职 还是 离职 不要做delete操作,只做update操作,你要的"删除"其实改一下状态即可。

2.关键数据库表别搞外键什么的了,用代码逻辑来控制

收获园豆:3
nicky0227 | 园豆:1069 (小虾三级) | 2015-05-29 13:13
0

对于这种系统,不管是员工表还是消费明细表,都应该进行逻辑删除。

收获园豆:3
幻天芒 | 园豆:37205 (高人七级) | 2015-05-29 13:25

老幻,我的最新一篇博客提到你了,帮忙顶一下呗 - -           http://www.cnblogs.com/toutou/p/4538365.html  

支持(0) 反对(0) 请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-05-29 14:10
0

从数据完整性上来讲,“员工表”的记录是不能删除了,这会导致“消费明细表”记录的描述不准确。抽象来说,当主表记录被删除后,从表记录的存在将失去意义。

“消费明细表”记录只是员工产生数据的一种方式,在该员工的工作期间,还会有社保信息、公积金信息和所做的项目信息,以及企业内部流程数据等等。一旦员工被真删,以上所有信息将找不到“操作人”。

在任何系统里,“员工表”的记录都不能被真删,拓宽的讲,进入了审核流程的业务数据也是不能真删的(草稿类型的业务数据可以真删)。

罗霄(Sto) | 园豆:182 (初学一级) | 2015-06-02 08:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册