首页 新闻 搜索 专区 学院

怎样删除主键表的记录却不影响外见表相关内容…………?

0
悬赏园豆:80 [已解决问题] 解决于 2014-08-27 01:14

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

员工表:

ID-----员工姓名

1----- 苍井空

2------武腾兰

消费明细表:

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

201401011-----------洗脚---------------1

201401012-----------桑拿---------------2

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

ckck16320的主页 ckck16320 | 初学一级 | 园豆:24
提问于:2014-08-26 11:56
< >
分享
最佳答案
1

大型系统的数据都没有物理删除的

都只是一个状态。

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

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

收获园豆:30
Giant150 | 小虾三级 |园豆:1158 | 2014-08-26 17:33
其他回答(5)
0

首先,如果你真要删除,就不能在两个表之间建立关系。

Employee表是不建议与 Consume表建立数据关系的,所以不存在级联删除的问题。

但还是有其他问题的。比如,你只保存了服务员工ID,你看消费表,看不到员工姓名,这时候看消费表,还是会很奇怪的。

为了解决其他的问题,有一种方法是,不进行真正的删除,而只是标志性隐藏。

当然,大型系统如何做的,我的建议是等你到了能接触大型系统的时候,你就知道如何做的。

比如,空间换时间,冗余等等一些,作为初学者,你学会了数据库三范式,这个是基本的要掌握的。

但是学技术如同练功,要经历看山是山,看山不是山,然后又回到看山是山的轮回。

大型系统的经验放到小型系统里面来就可能是一个笑话。

 

By the way, 你们公司的员工姓名看起来很熟悉啊,你在这个公司里面干活不累吧...

收获园豆:20
爱编程的大叔 | 园豆:30813 (高人七级) | 2014-08-26 12:08
0

 可以做成假删除  比如把你的主键表增加一个状态字段,删除为1,未删除为2, 删数据时把该数据状态设置为1,展示数据时过滤一下只显示状态为2的不就行了

收获园豆:10
骑着蜗牛耍流氓 | 园豆:135 (初学一级) | 2014-08-26 12:10
0

对于你这样的需求,建议采用二楼的做法。对于用户信息这种基础数据,都是不需要物理删除的~

收获园豆:10
幻天芒 | 园豆:36914 (高人七级) | 2014-08-26 12:29

我的建议是,不管是否要删除基础表,都不能在基础表和应用数据之间建立这种关联关系。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30813 (高人七级) | 2014-08-26 13:01

@爱编程的大叔: 其实我觉得需要建立关系,防止产生无主的数据。

支持(0) 反对(0) 幻天芒 | 园豆:36914 (高人七级) | 2014-08-26 21:52
0

苍井空、武腾兰都成为你们员工了,这福利估计很多码农流口水

伏草惟存 | 园豆:1420 (小虾三级) | 2014-08-26 14:15
0

对于这样的话,就逻辑删除,新增一个删除标记(字段),char(1),‘0’和‘1’分别表示未删除和删除。这样离职员工的信息也可以查得到的。

收获园豆:10
会飞的金鱼 | 园豆:881 (小虾三级) | 2014-08-26 21:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册