怎样删除主键表的记录却不影响外见表相关内容,比如有2个表,分别为“员工表”和“消费明细表”,关联。
员工表:
ID-----员工姓名
1----- 苍井空
2------武腾兰
消费明细表:
单号--------------------项目--------------服务员工
201401011-----------洗脚---------------1
201401012-----------桑拿---------------2
因为员工变动够大,每当有员工离职j时就要对“员工表”相关记录进行删除,但如果我在“员工表”中删除一条记录,那么“消费明细表”对应的记录就会级联删除,或外键设为为null,无论怎样“消费明细表”信息都受损。是否有合适的方法去解决这类问题,消费明细表如何永久保存?一些大型系统是如何做的?
大型系统的数据都没有物理删除的
都只是一个状态。
比如你把员工表建一个Status字段,0代表在职,1代表离职。
这样子表数据你都不用动的(当然在离职的时候。你也可以把子表的数据设置为无效:也同样加一个status字段)
首先,如果你真要删除,就不能在两个表之间建立关系。
Employee表是不建议与 Consume表建立数据关系的,所以不存在级联删除的问题。
但还是有其他问题的。比如,你只保存了服务员工ID,你看消费表,看不到员工姓名,这时候看消费表,还是会很奇怪的。
为了解决其他的问题,有一种方法是,不进行真正的删除,而只是标志性隐藏。
当然,大型系统如何做的,我的建议是等你到了能接触大型系统的时候,你就知道如何做的。
比如,空间换时间,冗余等等一些,作为初学者,你学会了数据库三范式,这个是基本的要掌握的。
但是学技术如同练功,要经历看山是山,看山不是山,然后又回到看山是山的轮回。
大型系统的经验放到小型系统里面来就可能是一个笑话。
By the way, 你们公司的员工姓名看起来很熟悉啊,你在这个公司里面干活不累吧...
可以做成假删除 比如把你的主键表增加一个状态字段,删除为1,未删除为2, 删数据时把该数据状态设置为1,展示数据时过滤一下只显示状态为2的不就行了
对于你这样的需求,建议采用二楼的做法。对于用户信息这种基础数据,都是不需要物理删除的~
我的建议是,不管是否要删除基础表,都不能在基础表和应用数据之间建立这种关联关系。
@爱编程的大叔: 其实我觉得需要建立关系,防止产生无主的数据。
苍井空、武腾兰都成为你们员工了,这福利估计很多码农流口水
对于这样的话,就逻辑删除,新增一个删除标记(字段),char(1),‘0’和‘1’分别表示未删除和删除。这样离职员工的信息也可以查得到的。