没有外键之后,如果删除了一条数据,那么所有相关数据全部都会出现问题。放弃外键,要怎么保证完整性,是要在删除之前查询是否有关联字段,有就不让删除吗,这样也太麻烦了,而且耦合度太高,尤其是再用个mybatis这种半自动框架,简直是加大开发难度。还是说在使用到相关数据的地方,如果发现关联数据不见了,就抛异常或者设置null,或者设置一个特殊值之类的呢
没有外键之后,如果删除了一条数据,那么所有相关数据全部都会出现问题。放弃外键,要怎么保证完整性,是要在删除之前查询是否有关联字段,有就不让删除吗,这样也太麻烦了,而且耦合度太高,尤其是再用个mybatis这种半自动框架,简直是加大开发难度。还是说在使用到相关数据的地方,如果发现关联数据不见了,就抛异常或者设置null,或者设置一个特殊值之类的呢
现在的数据库设计都是强烈不建议使用外键,个人认为有以下几个原因:
1、使用外键之后,不同数据之间就有了依赖关系,而数据之间的关系应该由程序来决定比较合适,这样就比较适应业务变动和调整。
2、在数据量多了以后,数据库可能需要横向扩展,这样外键就反而变成了限制,显得不灵活。
3、使用外键来维持数据的完整性,可能令到某些事务处理时间过长,影响业务吞吐量,这样就不好拆分业务。
删之前检查是否有关联数据,一块删了
如果没有外键,一般只能通过代码里的逻辑来保证数据的完整性。具体的比如使用事物 Transaction:把几个SQL更新,放到一个Transaction 里面,成功则提交(Commit),失败则回滚(Rollback),结果就是要么全部成功,要么全部失败,以此来保证完整性。