学艺不深,刚知道数据库有级联删除功能(以前用外键只是控制不留下垃圾数据,没用过级联删除功能),甚至还有联级更新功能(原来我的做法是只要是外键的主键,都不允许更改)。在不使用级联更新和级联删除时,我们的程序必须:
1、只要是外键的主键,都不允许更改;
2、删除某条记录时,先删除关联表数据,关联表仍有关联的,递归删下去,这些都是手工处理的,代码总是比较复杂。感觉使用级联和不使用,是两种完全不同的开发风格,请教大家,应该使用级联功能吗?大家是全面使用级联功能吗?我们的产品是这样的:最多有3-4层的级联引用关系,以mysql为主推数据库,但有时客户也要求使用其它数据库。

解决方案 »

  1.   

    我们目前没有级联,但设计表时是用powerdesign,基本上有关系的都建立了外键约束,但不是为了级联,仅是保证数据一致性。一楼的意思是这种外键约束也影响性能吗?我也想,如果全部依赖于数据库的级联更新和删除,代码可以简化不少,但对数据库设计的要求就很高了,但需求变更导致表结构及关系的更改会带来隐患。手工处理是有点复杂,比如删除我们应用的核心主记录时,有6个表依赖于该表,其中一个表又有10个表依赖于它,其中两个表还被子表依赖,所有这些相关表未必都有数据,但我仍然要逐个检查,从下向上逐个表删除。