- 浏览: 392871 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (760)
- 股票日志 (26)
- Selenium (0)
- selenium 2 环境的搭建 (1)
- 并发 (7)
- 框架开发 (1)
- 动态代理 (2)
- Struts2 (2)
- POI (2)
- jdk (3)
- maven (31)
- spring (35)
- mysql (31)
- 工作机会 (3)
- xtream (1)
- oracle dbms_metadata GET_DDL (0)
- SSI (1)
- DB (61)
- powermock (4)
- java 基础 (25)
- 多线程 (11)
- 高手 (2)
- java 底层 (2)
- 专业网站 (1)
- 开发联想 (1)
- 开发联想 (1)
- bat文件 (2)
- 清queue 语句 (1)
- 清queue 语句 (1)
- jquery (7)
- html5 (1)
- Jenkins (10)
- Linux (17)
- 工作issue (2)
- tomcat log (3)
- jvm (23)
- 项目细节 (0)
- oracle (41)
- 泛型 (3)
- 新知识点 (1)
- 数据库ddl 语句 (0)
- AQ (2)
- jms (0)
- 网络资源 (6)
- github (6)
- Easymock (1)
- Dom 解析XML (1)
- windows命令 (2)
- java (7)
- 正则表达式 (5)
- sequence (1)
- oracle 表meta信息 (1)
- 小工具技巧 (1)
- 辅助工具 (1)
- Junit (1)
- 泛型 generic (2)
- Java程序设计 (1)
- cglib (2)
- 架构师之路 (1)
- 数据库连接池 (5)
- c3p0 (1)
- eclipse使用 (1)
- oracle sql plus (1)
- 码农人生 (3)
- SVN (15)
- sqlplus (2)
- jsoup (1)
- 网络爬虫 (2)
- 新技能 (1)
- zookeeper (4)
- hadoop (1)
- SVNKIT (1)
- 从工具到知识点的整理 (1)
- log4j (13)
- 读文件 (0)
- 转义字符 (1)
- command (1)
- web service (3)
- 锁 (1)
- shell 脚本 (1)
- 遇到的错误 (2)
- tomcat (14)
- 房产 (5)
- bootstrap jquery ui (1)
- easyui (2)
- 个人征信 (1)
- 读写分离 (1)
- 备份 (1)
- rmi (6)
- webservice (1)
- JMX (4)
- 内存管理 (3)
- java设计 (1)
- timer (1)
- lock (2)
- concurrent (2)
- collection (1)
- tns (1)
- java基础 (15)
- File (1)
- 本机资源 (1)
- bat (1)
- windows (4)
- 数据结构 (3)
- 代码安全 (1)
- 作用域 (1)
- 图 (2)
- jvm内存结构 (1)
- 计算机思想 (1)
- quartz (6)
- Mongo DB (2)
- Nosql (4)
- sql (5)
- 第三方Java 工具 jar 项目 (2)
- drools (1)
- java swing (2)
- 调用console (1)
- runtime (1)
- process (1)
- swing (2)
- grouplayout (1)
- dubbo (0)
- bootstrap (0)
- nodejs (2)
- SVN hooks (1)
- jdbc (3)
- jdbc error (1)
- precedure (1)
- partition_key (1)
- active mq (1)
- blob (2)
- Eclipse (6)
- web server (1)
- bootstrapt (2)
- struts (1)
- ajax (1)
- js call back (1)
- 思想境界拓展 (1)
- JIRA (1)
- log (1)
- jaxb (3)
- xml java互相转换 (1)
- 装修 (2)
- 互联网 (2)
- threadlocal (3)
- mybatis (22)
- xstream (1)
- 排序 (1)
- 股票资源 (1)
- RPC (2)
- NIO (3)
- http client (6)
- 他人博客 (1)
- 代理服务器 (1)
- 网络 (2)
- web (1)
- 股票 (5)
- deadlock (1)
- JConsole (2)
- activemq (3)
- oralce (1)
- 游标 (1)
- 12月13日道富内部培训 (0)
- grant (1)
- 速查 (2)
- classloader (4)
- netty (4)
- 设计模式 (2)
- 缓存 (2)
- ehcache (2)
- framework (1)
- 内存分析 (2)
- dump (1)
- memory (2)
- 多高线程,并发 (1)
- hbase (2)
- 分布式系统 (1)
- socket (3)
- socket (1)
- 面试问题 (1)
- jetty (2)
- http (2)
- 源码 (1)
- 日志 (2)
- jni (1)
- 编码约定 (1)
- memorycache (1)
- redis (13)
- 杂谈 (1)
- drool (1)
- blockingqueue (1)
- ScheduledExecutorService (1)
- 网页爬虫 (1)
- httpclient (4)
- httpparser (1)
- map (1)
- 单例 (1)
- synchronized (2)
- thread (1)
- job (1)
- hashcode (1)
- copyonwriteArrayList (2)
- 录制声音 (1)
- java 标准 (2)
- SSL/TLS (1)
- itext (1)
- pdf (1)
- 钻石 (2)
- sonar (1)
- unicode (1)
- 编码 (4)
- html (1)
- SecurityManager (1)
- 坑 (1)
- Restful (2)
- svn hook (1)
- concurrentHashMap (1)
- 垃圾回收 (1)
- vbs (8)
- visual svn (2)
- power shell (1)
- wmi (3)
- mof (2)
- c# (1)
- concurrency (1)
- 劳动法 (1)
- 三国志游戏 (2)
- 三国 (1)
- 洪榕 (2)
- 金融投资知识 (1)
- motan (1)
- tkmybatis mapper (1)
- 工商注册信息查询 (1)
- consul (1)
- 支付业务知识 (2)
- 数据库备份 (1)
- 字段设计 (1)
- 字段 (1)
- dba (1)
- 插件 (2)
- PropEdit插件 (1)
- web工程 (1)
- 银行业知识 (2)
- 国内托管银行 (1)
- 数据库 (1)
- 事务 (2)
- git (18)
- component-scan (1)
- 私人 (0)
- db2 (14)
- alias (1)
- 住房 (1)
- 户口 (1)
- fastjson (1)
- test (6)
- RSA (2)
- 密钥 (1)
- putty (1)
- sftp (1)
- 加密 (1)
- 公钥私钥 (3)
- markdown (1)
- sweet (1)
- sourcetree (1)
- 好工具 (1)
- cmd (1)
- scp (1)
- notepad++ (1)
- ssh免密登录 (1)
- https (1)
- ssl (2)
- js (2)
- h2 (1)
- 内存 (2)
- 浏览器 (1)
- js特效 (1)
- io (1)
- 乱码 (1)
- 小工具 (1)
- 每周技术任务 (1)
- mongodb (7)
- 内存泄漏 (1)
- 码云 (2)
- 如何搭建java 视频服务器 tomcat (1)
- 资源 (1)
- 书 (1)
- 四色建模法 (1)
- 建模 (1)
- 配置 (1)
- 职位 (1)
- nginx (1)
- excel (1)
- log4j2 (2)
- 做菜 (1)
- jmap (1)
- jspwiki (1)
- activiti (1)
- 工作流引擎 (1)
- 安卓 (1)
- acitviti 例子 (1)
- 二维码 (1)
- 工作流 (1)
- powerdesign (2)
- 软件设计 (1)
- 乐观锁 (1)
- 王者荣耀 (1)
- session (2)
- token (5)
- cookie (4)
- springboot (24)
- jwt (2)
- 项目路径 (1)
- magicbook (1)
- requestType (1)
- json (2)
- swagger (1)
- eolinker (1)
- springdata (1)
- springmvc (1)
- controlleradvice (1)
- profile (1)
- 银行四要素 (1)
- 支付人员资源 (1)
- 支付渠道 (1)
- yaml (1)
- 中文编码 (1)
- mongo (2)
- serializable (1)
- 序列化 (1)
- zyd (1)
- unittest (1)
- 工具 (1)
- Something (1)
- 通达信 (1)
- protobuf (1)
- 算法 (1)
- springcloud (2)
- hikari (1)
- rocketmq (7)
- cachecloud (1)
- serfj (1)
- axure (1)
- lombok (1)
- 分布式锁 (1)
- 线程 (2)
- 同步代码块 (1)
- cobar (1)
- mq (1)
- rabbitmq (1)
- 定时执行 (1)
- 支付系统 (3)
- 唱歌 (1)
- elasticjob (1)
- 定时任务 (1)
- 界面 (1)
- flink (2)
- 大数据 (1)
- 接私活 (0)
- 内部培训 (2)
最新评论
-
dannyhz:
做股票从短线 试水,然后 慢慢发现 波段和 中期的故事可挖, ...
搭台唱戏 -
dannyhz:
http://developer.51cto.com/art/ ...
如何自己开发框架 它的注意点是什么
引用
平常需要使用外键吗?
数据库的诸多设计,帐号,权限,约束,触发器,都是为 C/S 结构设计的,是以 C 端不可信做为假设前提的。B/S 模式安全边界前移到 web 服务层,应用与数据库之间是可信的,应用自行完成这些功能更加灵活。所以能不用就不用
1. 互联网行业应用不推荐使用外键: 用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制,且不能轻易地水平扩展;若是把数据一致性的控制放到事务中,也即让应用服务器承担此部分的压力,而引用服务器一般都是可以做到轻松地水平的伸缩;
2.数据库服务器的性能不是问题,所以不用过多考虑性能的问题;另外,使用外键可以降低开发成本,借助数据库产品自身的触发器可以实现表与关联表之间的数据一致性和更新;最后一点,使用外键的方式,还可以做到开发人员和数据库设计人员的分工,可以为程序员承担更多的工作量;
为何说外键有性能问题:
1.数据库需要维护外键的内部管理;
2.外键等于把数据的一致性事务实现,全部交给数据库服务器完成;
3.有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源;
4.外键还会因为需要请求对其他表内部加锁而容易出现死锁情况;
知乎的回答
https://www.zhihu.com/question/46739040
个人理解:多方面来考虑。不加外键肯定会提高性能,但是提升如何还得看具体场景。后台应用程序一般情况是可以做到满足外键的一些约束条件。但是极端情况,以及多团队多模块协作的时候,并不能保证这一点。数据一致性要求高,用外键业务逻辑比较复杂,团队,模块复杂,用外键数据量大,不用外键数据删除更改插入频率高,不用外键
我的数据库设计上基本不会用外键约束,关联关系交给程序处理,这样比较灵活
MySQL对外键支持不好,所以可以不加,但是数据库实体图上一定要画好。
学院派会告诉你在设计的时候把应该有的约束都加上
而实践派得出的结论是主键一定加,非空约束尽量加,外键最好依赖于程序逻辑,而不是数据库,从而更好的拥抱变化,快速响应,数据库也会有相对较好的性能
发表评论
-
MySQL的内存表
2017-12-05 14:33 337引用 “内存表”顾名 ... -
处理数据库百万级数据的注意点
2017-12-05 14:31 633引用 最近的项目需 ... -
mongodb客户端
2017-10-02 13:25 432D:\Lib\dev_tool\MongoVUE 1.5.3 -
db2 命令行模式操作详细
2017-09-20 09:43 400http://blog.csdn.net/sunrier/ar ... -
DB2 的表在删除字段后 表会挂起 需要执行 reorg命令
2017-09-19 17:24 1029DB2 的表在删除字段后 表会挂起 需要执行 reorg命令 ... -
jdbc访问mysql数据库急速
2017-09-09 15:20 377http://blog.csdn.net/whucyl/art ... -
DB2 报SQLCODE204,SQLSTATE42704错误解决方法 实际上是因为没有建alias
2017-07-13 17:36 3666jdbc链接DB2时报SQLCODE204,SQLSTATE4 ... -
mongo db 简单操作
2017-07-07 02:13 394引用 本地操作数据库 1,在第一个窗口 指定mongo的数据 ... -
为啥需要nosql
2017-03-13 17:32 398http://www.infoq.com/cn/news/20 ... -
Hbase 实例 java操作
2017-02-17 03:38 357http://blog.csdn.net/syb1881010 ... -
关于数据库HBase的分析 与传统数据库
2017-02-17 03:23 432http://www.ithao123.cn/content- ... -
存储过程的优点 并不一定完全只用sql来一条条执行
2017-02-08 15:26 370引用 存储过程天天用,关于使用存储过程的sql语句的争论也一直 ... -
oracle blob 字段的解析
2017-02-06 10:48 734oracle.sql.BLOB data = (oracle. ... -
查询执行过的sql语句的方法
2017-01-20 13:25 597select * from v$sql where lower ... -
检查一个对象的权限
2017-01-13 10:47 347先看这个对象在对象库里是否存在 select * from ... -
竖变横 oracle group by 方式
2017-01-10 11:43 716SELECT DCC.CONSTRAINT_NAME ... -
oracle plsql 游标的使用
2016-12-07 18:19 483set serveroutput on; DECLA ... -
oracle replace 语句使用 ,另外还有句 regexp_replace
2016-12-06 16:36 714update buat_meta.gcal_data_sour ... -
oracle dml语句遇到 分号和换行一起的内容
2016-12-02 15:37 762案例 : INSERT INTO BUAT_META.GCA ... -
如何让本schema 来执行其它schema 的sql,而不需要加schema
2016-11-03 16:55 538CREATE OR REPLACE SYNONYM " ...
相关推荐
本文将详细介绍如何在Oracle数据库中使用**外键约束**来确保数据的参照完整性。 #### 二、什么是外键约束 外键约束是一种用于保证两个表之间数据一致性的机制。当两个表存在关联时,通过在外键表(子表)中设置外键...
在MySQL数据库管理中,删除表是一项需要谨慎操作的任务,尤其...了解如何在必要时安全地禁用外键检查,可以帮助开发者更高效地进行数据库维护工作。同时,也要记得在完成操作后重新启用外键检查,以保持数据的完整性。
### 数据一致性守护者:MySQL 外键约束深度解析 #### 引言 在现代软件开发中,特别是Web应用程序领域,数据库扮演着...无论是对于初学者还是经验丰富的开发者来说,深入理解并熟练掌握外键约束的应用都是十分必要的。
首先,了解外键的定义是非常必要的。在关系型数据库中,外键(Foreign Key)是表中一个字段或一组字段,它引用了另一个表的主键(Primary Key)。外键的作用是保证关联数据的引用完整性。简单来说,外键可以防止在子...
在这种情况下,禁用所有表的外键约束就显得非常有必要。 首先,让我们了解一下如何在Oracle中批量禁用所有表的外键约束。这通常涉及到三个主要步骤: 1. **删除所有外键约束**:虽然在实际操作中我们可能并不需要...
因此,合理设计数据库模式和谨慎使用外键是必要的。 在实际的PHP开发中,使用MySQL和外键配合,可以构建出更加健壮的Web应用程序。例如,通过ORM(对象关系映射)工具如Doctrine或Eloquent,可以方便地处理这些...
当不提供 `on_delete` 参数时,如 `owner = models.ForeignKey(User)`,会引发 `TypeError`,提示缺少必要的参数 `on_delete`。解决这个问题的方法是在外键定义时指定 `on_delete`,例如 `owner = models.ForeignKey...
2.4 唯一标识符的必要性 主键应当能够唯一识别每个实例。对于教师(Teacher)这样的实体,仅仅使用名字(name)作为主键是不够的,因为可能存在同名的教师。因此,通常需要一个额外的字段(如ID)来确保唯一性。 ...
在 SQL Server 中,外键约束是用于确保数据的一致性和完整性的一个重要机制。然而,空值可能会导致外键约束的不确定性。为了解决这个问题,我们可以使用 ISNULL 函数将空值替换成一个默认值,从而避免外键约束的不...
- 附件(Accessory):可能重复了UploadDate表的信息,需要确认其必要性。 在设计数据库时,要注意以下最佳实践: - 数据类型的选择应尽可能简洁明了,例如,密码通常存储为哈希值而非明文。 - 避免冗余字段,如...
2. **共享主键**:两个表的主键相同,形成自然的一对一关联,这种情况下,外键不是必要的,因为主键本身就是连接两表的桥梁。 3. **逻辑上的独立实体**:虽然两个实体在逻辑上是独立的,但在业务上它们保持着一对一...
这个层处理由表现层传递过来的请求,执行必要的计算、验证和业务决策,然后将结果返回给表现层。例如,如果用户提交了一个订单,业务逻辑层会检查库存、计算价格、处理支付等。 3. 数据访问层(Data Access Layer)...
首先,实施数据完整性的必要性源于数据库需要准确反映现实世界的需要。用户在编写数据库应用程序时,通常需要对插入、删除和修改操作添加完整性检查代码,这称为前端验证。然而,这种方法效率低下,容易出错,而且...
同时,数据库物理设计应考虑表间的约束关系,如外键,以保证数据的一致性和完整性。 综上所述,学生实习管理系统是一个综合性的管理平台,涉及到学生、教师、企业和系统管理员等多个角色,通过高效的数据管理和交互...
主键和非空值约束确保了数据的唯一性和必要性。例如,设备表和用户表的主键分别是设备号和用户名,以保证每个设备和用户都能被唯一识别。外键约束则用于维护表间关系的完整性,确保数据的一致性。数据库中的各个表,...
这些设计展示了数据库如何组织和管理不同类型的数据,以及如何通过外键来维护数据的一致性和完整性。同时,也考虑到了数据的扩展性和查询效率,比如评论的多级结构和点赞统计。这样的设计对于一个包含用户交互、信息...
例如,在执行插入(INSERT)、更新(UPDATE)或删除(DELETE)操作时,可以编写触发器来检查操作是否违反了数据完整性规则,并在必要时进行阻止或回滚事务。 以上介绍了SQL Server 2000中的数据完整性实现机制,它们是...
8. 数据冗余认知:主键和外键在不同表中的复现并非数据冗余,而是保持数据关联的必要。真正的冗余是指不必要的重复数据,可能导致数据不一致。 除此之外,数据库设计还需考虑其他因素,如索引策略、事务处理、安全...
在SQL Server中,存在六种常用的数据完整性约束:空值约束(NULL)、唯一性约束(UNIQUE)、主键约束(PRIMARY KEY)、外键约束(FOREIGN KEY)、检查约束(CHECK)和默认约束(DEFAULT)。每一种约束都是用来保证...
这些脚本可能涵盖了一系列数据库操作,如错误修复、数据一致性检查、主键和外键异常处理以及备份和恢复策略。在SQL Server环境下,这类脚本对于数据库管理员和开发人员来说是至关重要的工具。 描述中提到的...