关于数据库设计是否需要加入(建立)外键

从面向对象设计的角度来看,应该取消掉外键约束,因为数据库的作业就是高效的存取数据。而不是表达业务逻辑关系。

建立外键的好处:

1、由于数据库保证数据完整性,比程序保证完整性更可靠,多应用时,由程序来保证数据完整性变得困难

2、外键约束使得数据库的ER图可读性变强,有助于业务逻辑设计

不建立外键的好处:

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

2、开发变得简单,维护数据时不用考虑外键约束

3、性能高,大数据量插入操作时不用考虑维护外键

总结:

不建立外键约束,关系由程序控制。另外还需要删除现有的外键关系

我自己觉得完整性和一致性肯定是需要保证的,不然会出问题,也会影响效率,需要看你项目又多大。

小型项目就使用数据库本身的,效率追求不高,也没必要花时间自己建立约束,时间代价比较大。 
较大型项目可能数据约束本身效率不够好,满足不了大项目对效率的要求,又有人力物力去支持建立自己的高效约束。 
还有较大项目初期,想早点上线,效率要求没有那么大,没时间去建立高效率约束,那么就用数据库本身的约束,项目初期要求稳定一些比较好。

posted @ 2018-09-06 23:11 韦邦杠 阅读(...) 评论(...) 编辑 收藏

关于数据库设计是否需要加入(建立)外键相关推荐

  1. 在SQL Server Management Studio 中建立外键约束

    1.要建立外键关系,首先要保证用来建立外键关系的列具有唯一性,即具有 UNIQUE 约束 通常是某表的主键作为另外一个表的外键 2.打开数据库表,找到要建立外键的表.并确保其中要建立外键关系的列与主键 ...

  2. oracle数据库建立外键级联删除

    在给已存在的oracle数据表建立外键时命令为: alter table tablename add constraint FK_NAME foreign key(tablefile) referen ...

  3. mysql是否需要设置外键_数据库到底需不需要设置外键?

    在大型系统中(性能要求不高,安全要求高),最好使用外键(外键可以增强数据库数据的完整性和一致性) 在大型系统中(性能要求高,安全自己控制),不用外键(有外键约束的话,插入字段会进行检查,影响效率) 小 ...

  4. Mysql中外键作用以及Navicat建立外键失败总结

    本文摘自参考三篇文章,从这篇文章中将了解到外键作用以及navicat建立外键常见错误解决,帮助读者更加深刻了解外键. 文章目录 一.外键的作用 二. 不设置外键行不行? 三.那到底使不使用外键? 四. ...

  5. oracle 建立外键 引用条件约束 不能添加,Oracle外键约束(Foreign Key)的几个操作选项...

    关系型数据库是以数据表和关系作为两大对象基础.数据表是以二维关系将数据组织在DBMS中,而关系建立数据表之间的关联,搭建现实对象模型.主外键是任何数据库系统都需存在的约束对象,从对象模型中的业务逻辑加 ...

  6. mysql建立外键快捷方式_mysql建立外键

    InnoDB与Myisam的六大区别: 1.  构成上的区别 MyISAM: 每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文 ...

  7. 数据库技术mysql能干什么_MySQL外键有什么作用

    MySQL外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据.使两张表形成关联,外键只能引用外表中列的值! 我们来建两个表 CREATE TABLE `example1` ( ` ...

  8. mysql如何建外建_mysql如何建立外键

    mysql如何建立外键 一个主表blog博客表, DROP TABLE IF EXISTS  `blog`; CREATE TABLE `blog` ( `id` int(11) NOT NULL a ...

  9. mysql外键设置不成功_MySQL数据库建立外键失败的原因总结

    在MySQL数据库创建外键时,经常会发生一些错误,这是一件很令人头疼的事.一个典型的错误就是:Can't create table... 的错误.在很多实例中,这种错误的发生都是因为mysql一直以来 ...

  10. Mysql 建立外键出错1822 可能原因之一分析 - Failed to add the foreign key constraint. Missing index for constraint

    项目场景: 通过sql语言在MySQL查询中建立表,其中一个表引用其他表的属性出现问题报错1822 问题描述 被引用的表--用户信息表: 可以看到其中已有主键s_id,为自增长形式 CREATE TA ...

最新文章

  1. 新手学习单片机最常见的六大误区,你进坑了吗?
  2. CSS自适应的占位符效果
  3. 031_yml配置文件
  4. everedit选择_EverEdit(文本编辑器)
  5. fifo算法_缓存算法FIFO、LFU、LRU
  6. jspdf html转换pdf,使用jspdf将HTML转换为pdf时出错
  7. g++是什么_路由器信号分为2.4G和5G,有什么区别?怎么选?
  8. ajax传图片的方法
  9. RedHat 安装 CentOS yum
  10. 张亚勤寄语哥伦比亚大学2020年毕业生:引领未知时代
  11. 【网页截图亲测可用】Linux + python3 + selenium + chrome + chrome-driver 服务器端网页截图
  12. 租用免费备案的服务器有哪些优势
  13. 改善睡眠的好物分享,提高睡眠质量
  14. 【软件工程】机房文档--可行性研究报告
  15. 全自动采集小说模板源码+送7条可用7大采集规则
  16. 【UFUN开发板评测】小巧而不失精致,简单而不失内涵——uFun开发板开箱爆照...
  17. 和刘备相关的人(四)
  18. Web全栈~26.IO
  19. 【iOS开发】——MRC(手动内存管理)的一些补充
  20. 四川大学考研真题 || 信息资源管理导论(二)

热门文章

  1. python求解比一个给定的数字大的最小对称数
  2. PM常用软件工作平台
  3. oracle里的or 短路么,Oracle CASE短路不能分组工作
  4. 南昌大学计算机网络通信用什么书,南昌大学_计算机网络教材.doc
  5. delphi 算术溢出解决方法_文言文代码算什么?跟着九章算术学Python编程才厉害...
  6. kubernetes视频教程笔记 (36)-部署 prometheus granfana
  7. 数据库学习----JDBC
  8. 图(二):图的邻接矩阵表示
  9. 二相漏电断路器接线图_怎么看配电柜接线图?配电柜接线图读图技巧
  10. Java 又双叒叕发布新版本,这么多版本如何灵活管理?