谈谈数据库外键的使用

来源:互联网 发布:数控模拟编程软件 编辑:程序博客网 时间:2024/04/29 15:44

baidu到这个话题,发现一个朋友的观点和我相似,引用一下

外键的作用我认为主要有两个
一个是让数据库自己通过外键来保证数据的完整性和一致性
一个就是能够增加ER图的可读性
我觉得第二点的重要性甚至比第一点还高

有些人认为外键的建立会给开发时操作数据库带来很大的麻烦
因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败
他们觉得这样很麻烦
其实这正式外键在强制你保证数据的完整性和一致性
这是好事儿

应该说如果系统比较小
外键的作用可能不会很明显
如果你的系统后台有几百个表的话
没有外键的数据库设计是我无法想象的

有一个基础数据的表:商品
其他表都保存商品ID
查询时需要连表来查询商品的名称
单据1的商品表中有商品ID字段
单据2的商品表中也有商品ID字段
如果不拉出外键的话
当单据1,2都使用商品ID为3的商品后
删除此商品后
再查看单据1,2的时候就会查不到商品的名称

当表很少的时候
有人认为可以在程序实现的时候来通过写脚本来保证数据的完整性和一致性
也就是在删除商品的操作的时候去检测单据1,2中是否已经使用了商品ID为3的商品
但是当你写完脚本之后系统有增加了一个单据3
他也保存商品ID找个字段
如果不拉出外键
你还是会出现查不到商品名称的情况
你总不能每增加一个使用商品ID的字段的单据时就回去修改你检测商品是否被使用的脚本吧


第二点就是增加ER图的可读性
这也同样是在后台数据库表非常多的时候能够体现出来的
外键能够明确的两个表之间的关系
例如一个单据的主表和单据的商品的子表
如果两个表没有拉出外键表明关系,且两个表的位置在ER图中很远
对于一个对这个系统不是非常了解的人来说
让他去理出两个表之间的关系是很麻烦的
如果你拉出外键就算两个表离的很远
他也能随着外键找出他们之间的关系来
ER图的可读性对于一个刚刚接触大型系统的新手来说是极为重要的


当然
外键的个数也不是没有个尺度
因为外键拉的过多会使ER图极为混乱(到处都是线)
所以应该掌握合适的尺度才行
必要的外键必须要拉出来
如果实在不想因为外键过多而造成ER图的混乱
可以对基础数据的删除用假删除的办法
以避免在没有外键约束和检查的情况下造成数据的不一致性


着急回去吃饭
所以写的很急
:)))
以后再灌水
:P

该文章转载自1024k:http://www.1024k.cn/faq/2007/200706/43275.html

原创粉丝点击