【JavaGuide】数据库基础知识总结
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
数据库基础知识总结
1.什么是元组, 码, 候选码, 主码, 外码, 主属性, 非主属性
- 元组 元组tuple是关系数据库中的基本概念关系是一张表表中的每行即数据库中的每条记录就是一个元组每列就是一个属性。 在二维表里元组也称为行。
- 码 码就是能唯一标识实体的属性对应表中的列。
- 候选码 若关系中的某一属性或属性组的值能唯一的标识一个元组而其任何、子集都不能再标识则称该属性组为候选码。例如在学生实体中“学号”是能唯一的区分学生实体的同时又假设“姓名”、“班级”的属性组合足以区分学生实体那么{学号}和{姓名班级}都是候选码。
- 主码 : 主码也叫主键。主码是从候选码中选出来的。 一个实体集中只能有一个主码但可以有多个候选码。
- 外码 : 外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
- 主属性 候选码中出现过的属性称为主属性。比如关系 工人工号身份证号姓名性别部门显然工号和身份证号都能够唯一标示这个关系所以都是候选码。工号、身份证号这两个属性就是主属性。如果主码是一个属性组那么属性组中的属性都是主属性。
- 非主属性 不包含在任何一个候选码中的属性称为非主属性。比如在关系——学生学号姓名年龄性别班级中主码是“学号”那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性。
2.主键和外键有什么区别?
- 主键(主码) 主键用于唯一标识一个元组不能有重复不允许为空。一个表只能有一个主键。
- 外键(外码) 外键用来和其他表建立联系用外键是另一表的主键外键是可以有重复的可以是空值。一个表可以有多个外键。
不得使用外键与级联一切外键概念必须在应用层解决。🍃
以学生和成绩的关系为例学生表中的 student_id 是主键那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id同时触发成绩表中的 student_id 更新即为级联更新。外键与级联更新适用于单机低并发不适合分布式、高并发集群; 级联更新是强阻塞存在数据库更新风暴的风险; 外键影响数据库的插入速度
但是如果系统不涉及分库分表并发量不是很高的情况还是可以考虑使用外键的
3.什么是 ER 图
E-R 图 也称实体-联系图提供了表示实体类型、属性和联系的方法用来描述现实世界的概念模型。 它是描述现实世界关系概念模型的有效方法。 是表示概念关系模型的一种方式。
4.数据库的三范式
1NF(第一范式)
属性对应于表中的字段不能再被分割也就是这个字段只能是一个值不能再分为多个其他的字段了。1NF 是所有关系型数据库的最基本要求 也就是说关系型数据库中创建的表一定满足第一范式。
2NF(第二范式)
2NF 在 1NF 的基础之上消除了非主属性对于码的部分函数依赖。如下图所示展示了第一范式到第二范式的过渡。第二范式在第一范式的基础上增加了一个列这个列称为主键非主属性都依赖于主键。
3NF(第三范式)
3NF 在 2NF 的基础之上消除了非主属性对于码的传递函数依赖 。比如在关系 R(学号 , 姓名, 系名系主任)中学号 → 系名系名 → 系主任所以存在非主属性系主任对于学号的传递函数依赖所以该表的设计不符合 3NF 的要求。
总结
- 1NF属性不可再分。
- 2NF1NF 的基础之上消除了非主属性对于码的部分函数依赖。
- 3NF3NF 在 2NF 的基础之上消除了非主属性对于码的传递函数依赖 。
5.drop、delete 与 truncate 区别
用法不同
- drop(丢弃数据):
drop table 表名
直接将表都删除掉在删除表的时候使用。 - truncate (清空数据) :
truncate table 表名
只删除表中的数据再插入数据的时候自增长 id 又从 1 开始在清空表中数据的时候使用。 - delete删除数据 :
delete from 表名 where 列名=值
删除某一行的数据如果不加 where 子句和truncate table 表名
作用类似。
属于不同的数据库语言
truncate 和 drop 属于 DDL(数据定义语言)语句操作立即生效原数据不放到 rollback segment 中不能回滚操作不触发 trigger。而 delete 语句是 DML (数据库操作语言)语句这个操作会放到 rollback segement 中事务提交之后才生效。
执行速度不同
一般来说drop > truncate > delete
delete
命令执行的时候会产生数据库的binlog
日志而日志记录是需要消耗时间的但是也有个好处方便数据回滚恢复。
truncate
命令执行的时候不会产生数据库日志因此比delete
要快。除此之外还会把表的自增值重置和索引恢复到初始大小等
drop
命令会把表占用的空间全部释放掉