hc学习平台

 找回密码
 立即注册
搜索
热搜: 活动 交友 javakc
 › 学习交流 › Oracle › 列举在数据库中外键的好处以及优劣
查看: 1299|回复: 1
打印 上一主题 下一主题

列举在数据库中外键的好处以及优劣

[复制链接]

2249

主题

0

帖子

0

博客

admin

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

跳转到指定楼层
楼主
发表于2017-03-05 17:39:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

0

主题

1932

帖子

0

博客

740317431

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2017-08-19 10:25:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

两个表在进行关联的时候可以使用外键来对字段的取值进行约束,

由数据库自身保证数据的一致性,完整性,更可靠,因为程序很难100%

保证数据的完整性,而用外键即使在数据库服务器出现问题的时候,也能

最大限度的保证数据的一致性和完整性,外键在一定程度上会使设计周到具体全面

但是使用外键会使数据管理更加复杂。

0

主题

1902

帖子

0

博客

王之神判

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2017-08-19 15:13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
外键的优点:
1、减少重复数据。在删除主表数据前要先删除与之相关的的子表的相关数据,原则上主表的数据是不允许删除的。
2、可以设置级联删除和更新,保证数据库的完整性;
3、外键在一定程度上说明了业务逻辑,会使设计周到具体全面。
保证了数据的一致性,完整性,程序无法100%确保数据的完整性,从这个角度上来说,外键似乎很有必要,最主要无非是数据的完整性。
外键的缺点:
1、过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题;
2、不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert,   update,   delete   数据的时候更快);
3、可以用触发器或应用程序保证数据的完整性;
4、在结合hibernate的使用时,难以驾驭。

0

主题

406

帖子

0

博客

七七

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2017-08-21 14:24:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
外键---约束数据的完整性,每一个外键都是其它表中的主键,这样可以保持数据的唯一性

0

主题

1694

帖子

0

博客

wulinan

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2017-08-22 23:21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
优点1保证数据的完整性,2.关联查询时,可以用到FK 的统计信息 缺点:1.删队或更新关联数据时不用做检查,效率会大符提高,2.手工调数据时,比较方便(一般不建议)
gym

0

主题

647

帖子

0

博客

gym

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2017-08-24 19:25:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

外键的好处:

1减少重复数据

         在删除主表数据前先删除与之相关的子表的相关数据

         原则上主表的数据是不允许删除的

2可以设置级联删除和更新,保证数据库的完整性

3外键在一定程度上说明了业务逻辑,会使设计周到具体全面

保证了数据的一致性,完整性,程序无法100%确保数据的完整性,从这个角度看,外键似乎很有必要,

最主要的无非是数据的完整性

 

外键的缺点:

1过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题

2不用外键时数据管理简单,操作方便 性能高

 导入导出等操作,在insert update delete的时候更快

3可以使用触发器或应用程序保证数据的完整性

4在结合hibernate的使用时,难以驾驭

 

总结:

1在大型系统中,(性能要求不高 安全性要求高) 使用外键

 大型系统中,(性能要求高,安全自己控制) 不用外键

 小系统随便,最好用外键

2用外键要适当 不能过分追求

3不用外键而用程序控制数据一致性和完整性,应该写一层来保证,

然后个个应用通过这个层来访问数据库

 

SQL的主键和外键起约束作用

定义主键和外键主要是为了维护关系数据库的完整性

 

主键---唯一标识一条记录,不能有重复的,不允许为空

外键--表的外键是另一表的主键,外键可以有重复的,可以是空值

索引--该字段没有重复值 但可以有一个空值

 

主键----用来保证数据完整性

外键-------用来和其他表建立联系用的

索引-是提高查询排序的速度

 

主键---只能有一个

外键---一个表可以有多个外键

索引--一个表可以有多个唯一索引

 

 

 

 

 

 

 

 

 

 

0

主题

435

帖子

0

博客

雒鑫鑫

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2017-12-19 17:06:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

 1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。 eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢? 2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。 3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面。


反方观点: 1,可以用触发器或应用程序保证数据的完整性 2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题 3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert,   update,   delete   数据的时候更快) eg:在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不 止一个字段有外键,这样扫描的数量是成级数的增长!我的一个程序入库在3个小时做完,如果加上外键,需要28个小时! 

0

主题

133

帖子

0

博客

tjj123456

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2018-07-13 18:26:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

外键多用于多表关联查询

0

主题

1213

帖子

0

博客

yanghao

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2018-09-02 13:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

利于维持数据完整性和一致

但是对数据处理时会十分麻烦,管理麻烦,性能低

0

主题

982

帖子

0

博客

m1359292934

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2019-08-20 09:17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

好处:可以保证数据的一致性,完整性,  可以增加er的可读性

劣处:会增加开发难度,不用外键操作简单,方便,性能高



站点统计|举报|Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, , Processed in 0.195171 second(s), 9 queries .

Powered by javakc! X1.0

© 2004-2014 javakc

f1208.com 备案号:京ICP备14030918号-1

返回顶部