关系型数据库概念

最近在重新学习数据库,下面是关系型数据库的几个核心概念。

数据库范式

数据库范式化设计,一般来说达到3NF程度就够用了,过度的范式化设计也会带来额外的复杂度。从1NF到3NF层层递进,更高的范式也是基于前一个范式的基础。

1NF 的设计原则:1) 表中的内容不可再分 2) 表中不允许有重复行,或者说应该有主键 3) 表中不允许存在重复列 2NF的设计原则:表中不存在部分依赖。换句话说,就是表中所有非主键元素都应该依赖主键。员工表可以有员工的毕业学校,而该学校的简介不应该放在员工表中。

3NF 的设计原则:表中不存在传递依赖。换句话说,就是表中非主键元素之间不应该存在依赖关系。员工表中可以有所属部门id,但不应该有部门名称。

两个详细介绍范式设计的YouTube视频,通俗易懂。

Database Normalization 1NF 2NF 3NF (youtube.com)

1st, 2nd and 3rd Normal Form (Database Normalisation) (youtube.com)

数据库事务

数据库事务ACID: 1)原子性,事务要么全部提交,要么不提交。 2)一致性,数据的状态在事务操作前和操作后保持一致的状态。即银行卡余额任何时候都应该是收入减去支出。 3)隔离性,每个事务都是互相隔离的。 4)持久性,事务一旦提交,不管是断电还是服务器重启,已经写入的数据就不会丢失。

MySQL中的B+树

MySQL实际使用的是B+树。B+树可以看作对B树的改进。 B+树与B树的详细对比在这篇文章中可以了解 Difference between B tree and B+ tree - GeeksforGeeks

而人们普遍称B+树为B树的原因也有人给出了回答index - Does mysql use B-tree,B+tree or both? - Database Administrators Stack Exchange

MySQL中的WAL

WAL(Write Ahead Log)也称redo log,对数据库的持久性,崩溃恢复,时间点恢复,复制提供了支持。 一篇简单介绍WAL功能的文章What is WAL - Write Ahead Log?. WAL stands for Write-Ahead Log, which… | by Manish Atri | Medium

一篇详细介绍MySQL8.0 WAL设计的文章MySQL :: MySQL 8.0: New Lock free, scalable WAL design

表的连接方式

SQL语言中表的连接方式有:例如现有表A和表B 1)A cross join B,表A的每一行与表B的每一行互相连接。 2)A inner join B,表A与表B在相互匹配上的列上进行连接。 3)A left join B,表A与表B在匹配上的列上进行连接,且表A会展示出没有匹配的记录。4)A right join B,表A与表B在匹配上的列上进行连接,且表B会展示出没有匹配的记录。 5)A full join B,表A与表B在匹配上的列上进行连接,且表A表B都会展示出没有匹配的记录。

© . Made with Hugo using the Tale theme.