外键

性能功能优化总结

依然范特西╮ 提交于 2019-12-17 23:21:19
性能优化: 1.分析阶段:确定实时性需求、响应时间的需求、硬件的配置 2.设计阶段:最关键的阶段,关系到以后所有性能调试的过程,设计完成可以进行初步索引设计,为整个系统打下好的基础。 1.遵循四范式 属性不能拆分,完全函数依赖,消除传递依赖 对于每一个X->Y,X都能找到一个候选码( 若关系中的某一属性组的值能唯一地表示一个元组,而其真子集不行,则称该属性组为候选码)。 2.合理的冗余 3.主键设计 相当于唯一索引 4.外键设计 外键是最高效的一致性维护方法,数据库的一致性要求,依次可以用外键、CHECK约束、规则约束、触发器、客户端程序,一般认为,离数据越近的方法效率越高。 5.字段设计 数字型比字符串快,数据类型尽量小,尽量不允许为null,少用text,image 6.数据库物理存储和环境的设计 在设计阶段,可以对数据库的物理存储、操作系统环境、网络环境进行必要的设计,使得我们的系统在将来能适应比较多的用户并发和比较大的数据量。 这里需要注意文件组的作用,适用文件组可以有效把I/O操作分散到不同的物理硬盘,提高并发能力。 7.系统设计 系统设计阶段应该归纳一些业务逻辑放在数据库编程实现,数据库编程包括数据库存储过程、触发器和函数。用数据库编程实现业务逻辑的好处是减少网络流量并可更充分利用数据库的预编译和缓存功能。 8、 索引的设计 在设计阶段

SQL数据库基础语法

馋奶兔 提交于 2019-12-17 10:23:12
SQL语句的概述 SQL语言的分类   数据定义语言(Data Definition Language)主要用于修改、创建和删除数据库对象,其中包括CREATE ALTER DROP语句。   数据查询语言(Data Query Language)主要用于查询数据库中的数据,其主要是SELECT语句,SELECT语句包括五个子句,分别是FROM WHERE HAVING GROUP BY和WITH语句。   数据操作语言(Data Manipulation Language)主要用于更新数据库里数据表中的数据,包括INSERT UODATE DELETE语句。   数据控制语言(Data Control Language)主要用于授予和回收访问数据库的某种权限。包括GRANT REVOKE等语句。   事物控制语言,主要用于数据库对事物的控制,保证数据库中数据的一致性,包括COMMIT ROLLBACK语句。   常用的数据类型     MYSQL:           SQL语句的书写规范     SQL语句中不区分关键字的大小写     SQL语句中不区分列名和对象名的大小写     SQL语句对数据库中数据的大小写敏感     SQL语句中使用--注释时,--后面至少有一个空格,多行注释用/* */   数据库的创建与删除   (1)数据库的创建:     CREATE

小白文章之---给有外键的数据库表格添加数据

北城以北 提交于 2019-12-17 08:00:54
前言:   在项目中,数据库表中在设计时肯定会有外键关联的,给有外键的表格测试添加数据,首先得把屏蔽掉外键。这里就是我在做项目时将生成的随机数据添加进数据库中,就遇见了这个问题,百度了很多资料也没找到解决方案,在灵光一闪之间,就想到一个方法 这里我的项目是使用spring boot框架来构建的,但是我解决这个问题思路是回到数据库上面 方案一: set foreign_key_checks = 0 将外键检查值设置为0,设置完成后就可以向数据库中的任何表格添加数据,但是添加完成后需要将外键检查值改回去 "set foreign_key_checks = 1" 这个方案适用于次数较少的添加数据,如果次数多了,每次改起来就很烦躁,我在使用时就是因为需求变动很多次,然后该数据库,加数据,所以就想出了另外的方法 方案二: 基于方案一的方法,通过java代码的形式来更改外键值,封装好对应的方法,在添加数据前去调用一次改值为0的方法,完成后去调用改值为1的方法 使用数据库的jdbc思路,首先连接数据库,当然每次使用完记得关闭连接,然后PreparedStatement 去执行sql语句 private static String driver = "com.mysql.cj.jdbc.Driver" ; private static String url = "jdbc:mysql://127

MySQL 中的外键

那年仲夏 提交于 2019-12-17 03:12:19
表和表之间可存在引用关系,这在抽象数据到表时,是很常见的。这种联系是通过在表中创建外键(foreign key)来实现的。 比如一个订单,可能关联用户表和产品表,以此来记录 谁 买了什么 产品 。 约定两个概念: 父表 :被引用的表。 从表 :表中有相应的外键引用 父表 中的字段。 示例: CREATE TABLE parent ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB; CREATE TABLE child ( id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE ) ENGINE=INNODB; 这里 parent 为父表, child 为从表。 外键关联表的同步操作 当表和表之间建立起合适的关联后, INSERT 和 UPDATE 操作会自动检查所插入的记录中指定的外键在相应表中是否存在; 建立外键时,可指定 ON UPDATE <action> 和 ON DELETE <action> 子语句来指定发生 UPDATE 和 DELETE 操作时,外键关联表中数据该如何处理。MySQL 中支持五种处理(action): CASCADE

MySQL多表关联的剩余知识

余生颓废 提交于 2019-12-17 03:02:50
外键 在数据库多表关联时,外键加的地方。 学生和班级是从属关系 班级包含学生 1: n 一对多的关系,外键必须加在多方 夫妻之间1:1 一对一的关系,外键加在任一方都行 课程和老师的关系n:n 多对多的关系,外键是用独立的第三张表示他们的关联关系 子查询 #子查询 SELECT * FROM classroom WHERE id=(SELECT id FROM board WHERE boardName='体育'); 不推荐大量使用,因为效率不高 来源: CSDN 作者: ll_j_21 链接: https://blog.csdn.net/ll_j_21/article/details/103569834

数据库范式

不想你离开。 提交于 2019-12-16 17:44:12
后面的范式一定要满足前面的范式!!! 第一范式:(1NF) 是指在关系模型中,对于添加的一个规范要求,所有的域都应该是 原子性 的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域(列不能在分)。 错误一:( 关系型数据库(列固定 行多个)MySQL oracle sqlserver 非关系型数据库NoSQL 是关系型数据库的补充(基于内存)缓存服务 redis ) id name age sex tel tel1 tel2 tel3 tel4 tel5 错误二: id name age sex tel 1 张三 18 男 2 李四 18 男 110 3 王五 18 男 120,130,140 正确 User telephone id name age sex id uid tel 1 张三 18 男 1 2 120 2 李四 19 男 2 3 130 3 王五 19 男 3 3 140 第二范式:(2NF) 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF

微课程 | 第九课《ER 表实现方法 1》

百般思念 提交于 2019-12-16 17:06:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> https://v.youku.com/v_show/id_XNDQ3MTAzOTM2OA==.html 上一期我们介绍了全局表的使用方法,下面我们来介绍一下 ER 表及在 DBLE 中实现的方法。 ER 表 ER 表是一个什么样的概念,我们可以看一下上图的右边。sales 和 sales_detail 这两个表其实就有逻辑外键关系的两张表。有外键关系的表可以用外键来拆分,或者是依赖于外键节点。比如某个列 A 和外键列关系是 1: N,外键可以唯一决定它路由的归属。中间件可以通过某个列 A 拆分以后,在另一张表按照对应列进行拆分,因为它有外键关系,在业务当中也会通过外键关系来关联,并且去查我实际的数据也可以通过整体下发来避免二次查询来确定路由。 我们举个例子。看上图的配置部分,就是一个典型的 ER 表的一个配置。我们可以看到有 parent 有 child,child 可以继续有 child,理论上是可以无限拆下去,实际上我们不建议大家超过三层。我们来看前两行,第一行是我们最普通的一种拆分方式。第二行 childTable,有一个 joinKey,代表它自己的列和它的父亲列产生关系的那一列。parent key 是它父亲的那一列。换句话说也就是这张表的 child1_id 和 tb_parent 表的 id

Java常见面试题分享

邮差的信 提交于 2019-12-15 23:28:14
大家好,我又来啦!今天又给大家带来了几道java基础的常见的面试题,希望能对大家有所帮助哦.有什么问题可以直接发文评论哦,感谢大家的支持! 1、集合如何进行排序? Collections.sort(List对象,Comparator比较器对象(定义排序规则)); 2、HashMap和Hashtable的区别。 1)HashMap允许空键和空值,Hashtable不允许。 2)HashMap线程不安全,Hashtale线程安全。 3、流按照输入输出方向分有几种?相对于什么而言? 流按输入输出方向分,分为输入流和输出流,相对内存而言。 将数据从数据源读取到内存中,称为输入流,也叫读取流。 将内存中的数据写入到数据源,称为输出流,也叫写入流。 4、流按照传输内容分有几种?各自的父类是什么? 流按照传输内容分,分为字节流,字符流和对象流。 无论是什么流,底层部分都以字节传输,本质都是字节流。但是为了方便开发者更好的进行字符数据和对象数据的操作,于是在字节流基础上进行了封装,形成了字符流和对象流。 字节流的父类:InputStream和OutputStream 字符流的父类:Reader和Writer 5、流操作的步骤。 建立流,操作流,关闭流。 6、操作流时,如果文件不存在会出现什么情况?如果流不关闭会出现什么情况? 操作流时,如果文件不存在,读取流会抛出文件未找到的异常

flowable 启动流程到完成所有任务之间的数据库变化

橙三吉。 提交于 2019-12-15 14:40:50
先给出流程图,很简单的流程,就是3个UserTask ProcessDefinition pd=repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult(); ProcessInstance pi=runtimeService.startProcessInstanceById(pd.getId()); 或者 ProcessInstance procIns = runtimeService.startProcessInstanceByKey(procDefKey, businessTable+":"+businessId, vars); 以上代码是部署这个流程,部署完毕后。 act_re_deployment 表中会有一条部署记录,记录这次部署的基本信息,然后是act_ge_bytearray表中有两条记录,记录的是本次上传的bpmn文件和对应的图片文件,每条记录都有act_re_deployment表的外键关联,然后是act_re_procdef表中有一条记录,记录的是该bpmn文件包含的基本信息,包含act_re_deployment表外键。 注意看这个9e010fc1-1a65-11ea-83ef-f8a2d6bfea5a就是act_re

oracle数据库有关于子查询

回眸只為那壹抹淺笑 提交于 2019-12-14 22:15:41
oracle数据库有关于子查询 子查询联系比较复杂,个人写一些稍微基础一点的东西 a.子查询与外面的连接其实是主键与外键的连接 b.判断是不是子查询,看给定的条件是不是能够分成两个查询语句 如果是,则可以进行子查询 先介绍一下子查询: 有关于返回值:1.子查询返回值只有一个(其实我觉得也并不是很严谨) 有关的运算符(>,< ,= <=,>=) select 属性1,属性2… from 表1 where 主键 运算符 (select 外键 from 表2 where 限制条件); 2.子查询的返回值有多个 关键词 in, any ,all a.有关于in 在最基本的查询之中,已经提到,并不是连续的查询,注意与between…and…区分 select 属性1,属性2… from 表1 where 主键/外键 in(select 外键、主键 from 表2 where 限制条件); 会将in里面所有的条件当做限制条件查询 b.有关于any any的意思满足任意一个就可以 select 属性1,属性2… from 表1 where 主键/外键 运算符 any(select 外键、主键 from 表2 where 限制条件); 举个例子:select nnum,nname from op1 where nnum > any(select nnum from op2 where mnun>