怎样删除主键表的记录却不影响外见表相关内容,比如有2个表,分别为“员工表”和“消费明细表”,关联。
员工表:
ID-----员工姓名
1----- test1
2------test2
消费明细表:
单号--------------------项目--------------服务员工
201401011-----------action1---------------1
201401012-----------action2---------------2
因为员工变动够大,每当有员工离职j时就要对“员工表”相关记录进行删除,但如果我在“员工表”中删除一条记录,那么“消费明细表”对应的记录就会级联删除,或外键设为为null,无论怎样“消费明细表”信息都受损。是否有合适的方法去解决这类问题,消费明细表如何永久保存?一些大型系统是如何做的?
一般系统的数据都应该不会物理删除的
都只是一个status而已。
比如你把员工表建一个Status字段,0代表在职,1代表离职。
这样子表数据你都不用动的(当然在离职的时候。你也可以把子表的数据设置为无效:也同样加一个status字段)
你看,大家都有拯救地球的心愿,虽然未曾闻达,依旧心怀天下。
我的回答不讨人喜欢。
@爱编程的大叔: 不能理解,那是境界不够。
@爱编程的大叔 @幻天芒: 这一点我跟老幻持相同意见, 境界不够还怪谁啊?
你要这样删除就不能级联。
要么就是虚拟删除。
不用管人家大型系统咋办,吃沙县料理,操中南海的心做啥。
难得大叔中规中矩的回答一次问题啊, 顶一个
这种应该不能删除的,设置一个状态,离职 在职 实习 等等。
如果要删除数据的话 应该加一个 逻辑删除的 flag, 防止历史数据删除
1.给员工表加个状态字段,标示 在职 还是 离职 不要做delete操作,只做update操作,你要的"删除"其实改一下状态即可。
2.关键数据库表别搞外键什么的了,用代码逻辑来控制
对于这种系统,不管是员工表还是消费明细表,都应该进行逻辑删除。
老幻,我的最新一篇博客提到你了,帮忙顶一下呗 - - http://www.cnblogs.com/toutou/p/4538365.html
从数据完整性上来讲,“员工表”的记录是不能删除了,这会导致“消费明细表”记录的描述不准确。抽象来说,当主表记录被删除后,从表记录的存在将失去意义。
“消费明细表”记录只是员工产生数据的一种方式,在该员工的工作期间,还会有社保信息、公积金信息和所做的项目信息,以及企业内部流程数据等等。一旦员工被真删,以上所有信息将找不到“操作人”。
在任何系统里,“员工表”的记录都不能被真删,拓宽的讲,进入了审核流程的业务数据也是不能真删的(草稿类型的业务数据可以真删)。