为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMTTMM 2018-12-06 11:25:42
怎样删除主键表的记录却不影响外见表相关内容,比如有2个表,分别为“员工表”和“消费明细表”,关联。 员工表: ID-----员工姓名 1----- test1 2------test2 消费明细表: 单号--------------------项目--------------服务员工 201401011-----------action1---------------1 201401012-----------action2---------------2 因为员工变动够大,每当有员工离职j时就要对“员工表”相关记录进行删除,但如果我在“员工表”中删除一条记录,那么“消费明细表”对应的记录就会级联删除,或外键设为为null,无论怎样“消费明细表”信息都受损。是否有合适的方法去解决这类问题,消费明细表如何永久保存?一些大型系统是如何做的?
查看完整描述

8 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

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

都只是一个status而已。

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

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

查看完整回答
反对 回复 2019-01-07
?
Qyouu

TA贡献1786条经验 获得超11个赞

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

查看完整回答
反对 回复 2019-01-07
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

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

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

查看完整回答
反对 回复 2019-01-07
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

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

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

查看完整回答
反对 回复 2019-01-07
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-01-07
?
千巷猫影

TA贡献1829条经验 获得超7个赞

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

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

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

查看完整回答
反对 回复 2019-01-07
  • 8 回答
  • 0 关注
  • 717 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信