哪里有做网站培训的东莞松山湖华为招聘信息
news/
2025/10/2 5:46:13/
文章来源:
哪里有做网站培训的,东莞松山湖华为招聘信息,西安seo黑,现在的网络推广怎么做什么是外键#xff1a;
如果一个实体的某个字段指向另一个实体的主键#xff0c;就称为外键。被指向的实体#xff0c;称之为主实体#xff08;主表#xff09;#xff0c;也叫父实体#xff08;父表#xff09;。负责指向的实体#xff0c;称之为从实体#xff08;…什么是外键
如果一个实体的某个字段指向另一个实体的主键就称为外键。被指向的实体称之为主实体主表也叫父实体父表。负责指向的实体称之为从实体从表也叫子实体子表
外键的作用
①为了一张表记录的数据不要太过冗余。
②保持数据的一致性、完整性。
是否有必要使用外键
正方:需要
1.数据一致性
由数据库自身保证数据一致性完整性更可靠因为程序很难100保证数据 的完整性而用外键即使在数据库服务器当机或者出现其他问题的时候也能够最大限度的保证数据的一致性和完整性。
eg数据库和应用是一对多的关系应用会维护他那部分数据的完整性系统一变大时增加了应用和两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性而且一年以后如果又增加了C应用呢
2.ER图可靠性
有主外键的数据库设计可以增加ER图的可读性这点在数据库设计时非常重要。
3.使设计更全面
外键在一定程度上说明的业务逻辑会使设计周到具体全面
4.级联性能未必最低
除非能证明触发器的性能和可维护性比外键更优否则凭什么一定要否定外键呢
5.程序能完全保证安全性吗
使用应用程序来维护数据完整性则是严重降低数据库安全性的一种做法。连接字符串里如果有uid和pwd或者类似的这两个东西可以使用工具获取你数据库的帐号。因为每次建立数据库联接的时候都会在网线上以标准格式传递这些信息。从此编码内的任何保证都是空的。
6.导致冗余
不使用外键会导致数据冗余在级联最底层的表可能会重复好几层的数据 必然导致最底层的表数据量翻倍IO瓶颈是数据库性能瓶颈之一。 反方:不需要
1.程序逻辑
某些程序逻辑中程序的逻辑已经足够保证完整性我会在存储过程或包等地方做严谨的判断
2.性能问题
这是很多人不喜欢用的关键原因比如一个业务流水表频繁插入数据如果这个表身上有3外键那么每次插入一条就必须对这3个外键对应的3个表做相应的查找判断有无对应数据如果这3个表也很大那就这3个表的判断时间就很常虽然外键指向的关联表的字段肯定是索引但是我觉得很多时候这样的判断本来就在程序里控制好了通过外键再判断一次就是降低性能而且其实有的地方判不判断也无所谓的但是用了外键就必须化时间去判断无论oracle内部多么优化外键对于数据的检索速度它总是一个不小的消耗
3.维护麻烦
很多公司的软件都是定制的这种定制的东西随意性相对较大项目开发实施过程中需要经常对表修修补补还有就是业务逻辑有bug或者其他情况需要经常手工维护数据有错综复杂的外键关联着很是麻烦
4.外键定死了先后生成关系
外键定死了两个表之间数据的先后生成关系最常见的是单据主从表有的时候在生成单据的时候是先生成明细再生成主表如果钉死了外键这个就没法实现
PS: 当然有些关键的业务确实需要外键
为什么不用外键
[数据库外键争论]
http://blog.csdn.net/wacthamu/article/details/7255811 http://www.cnblogs.com/chenkai/archive/2009/11/11/1601193.html?page2#commentform
下面的话全是上面争论里的原话我就截取了三个人的因为我个人也偏向不使用外键
1、淡化外键并不能简单武断的说淡化或不淡化。 必须根据实际情况来决定如数据来源关联影响业务控制逻辑等。
以下是个人关于是否淡化外键的个人经验和想法。
淡化外键的情况如果对于某此数据来源复杂且单表操作对系统基本没有什么影响的情况下可以淡化外键。 何谓数据来源复杂数据的来源不止仅限于自由系统更可能来源于其它系统或人工的数据导入并且导入的数据不全面在这种情况下淡化外键可以极大减少工作量并且极大的降低工作的复杂度。 不能淡化外键的情况关键数据业务逻辑很严谨数据来源单一数据来源规则标准固定的。业务逻辑严谨是指数据表之间的关联很好变动一个表的数据必须对另一个表产生影响有时这种影响还相当的大。数据来源单一是指数据都从自身系统来或固定的其它系统通过一定的逻辑录入数据来源规则标准固定是指从其它地方人工录入或是对过库对库的数据录入或同步时数据规则是一致的。 在这种情况下根据约束完整性设置外键一方面能保证系统的健壮性另一方面可以及排除淡化外键的情况可能出现的一些数据问题你懂的很多时候是人工操作或来源数据不全导致的一些问题。 完美的系统一定不是最合适的系统依据现实而言只需要最合适的。
2、几乎不用抛开性能不说开发、测试、部署、实施以及维护的时候都带来不少问题 数据完整性几乎都是业务的要求理应由业务部分负责维护而不是依赖数据库 访问量较大的web应用以及有一定规模的企业应用都关注伸缩性和性能问题各种形式的垂直、水平切分运用越来越多外键、触发器、存储过程之类的基本属禁区
转载于:https://my.oschina.net/zjllovecode/blog/1586130
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924584.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!