日期:2014-05-18  浏览次数:20560 次

FOREIGN KEY 問題
FOREIGN KEY,外部約束鍵,使得資料保持引用的完整性.
我在一個廠里做過,在二家小軟件公司做過,可是發現大家都好像沒有使用過FOREIGN KEY,好像都在逃避它一樣,在廠里時,他們都會把相同的資料例存在不同的表里,而在軟件公司做時,他們不存,可是也不管資料的引用完整性,好像都在逃避FOREIGN KEY一樣,為什麼呢?
FOREIGN KEY在實際應用中究竟在什麼時候使用呢?


------解决方案--------------------
至少实际需求老变化,操作软件的人不会太专业,主外键关对历史数据不好处理,但历史数据同样重要而且不能用现在的标准去修正,所以这种约束要慎用,既然这么费劲不如不用。
------解决方案--------------------
在很多情况下都情况,保持数据的完整性..

是为列中的数据提供引用完整性的约束。FOREIGN KEY 约束要求列中的每个值在被引用表中对应的被引用列中都存在。FOREIGN KEY 约束只能引用被引用表中为 PRIMARY KEY 或 UNIQUE 约束的列或被引用表中在 UNIQUE INDEX 内引用的列

常应用:级连更新/约束
------解决方案--------------------
一个规范的关系数据库系统,FOREIGN KEY约束是必须的。

当然也可以通过触发器或存储过程强制约束,但本人觉得这样做,实是简中取繁。

楼上所说的麻烦,并不是客户角度的麻烦,而是代码编写者的麻烦。

比如改主键的字段名、删除主键表(没有经过严格的逻辑设计的数据库系统,设计阶段频繁更改数据库结构在所难免),存在FOREIGN KEY这些操作当然麻烦很多,而客户并不需要进行这些操作。

软件公司“回避”FOREIGN KEY,不能说没实力或不规范,但起码不够规范。
------解决方案--------------------
我们的数据库都是要建外键的,级联删除更新,软件开发难度并没有什么增加,可能在数据迁移的时候要考虑下顺序