日期:2014-05-19  浏览次数:20746 次

不建立外键怎么保证数据完整性?
我公司这项目的数据库不弄外键约束。。。。

我想问一下,这样的话是怎么保证引用完整性的?

我也问过一些人,有的说:在删除主表数据之前,先查一下子表有没有使用。
我感觉在存在不可重复读和幻影读的情况下这么弄根本不靠谱啊T_T

------解决方案--------------------
我们公司做的项目一直没有外键约束,只有主键约束。
例如表A是主表,表B是子表,那么A和B各有一个id列,为主键。但是B除了业务需要的字段外应该增加一个a_id列,用来保存A表中的主键,这样就可以区分B表中的所有记录对应A表中的哪条记录。删除A表某条记录的同时执行delete from B where a_id = delId就行了,不管有没有记录都删除一遍,没有记录也不会出错!
------解决方案--------------------
允许用触发器么?如果允许的话,用触发器做检查,如果发现尚存在依赖就强制失败。


话说。。。现在的数据结构设计一般都尽量不做删除设计,都是用标志位来处理;删除这个能力,很可怕。

------解决方案--------------------
放心,都可以回滚的。SQL Server已经是很强悍的数据库了。
------解决方案--------------------
木有外键、木有触发器、木有存储过程、删除用标志位。
------解决方案--------------------
探讨
我这逻辑是不想在子表有引用的情况下删掉主表记录,不是想把主表和相关的子表记录全清除。

------解决方案--------------------
SQL code
number是关键字 换个吧 我在mysql中测试的 mysql中number不是关键字 sorry