一,数据库模型
1,三级模式两级映像
(1)三级模式
概念模式:数据库整体逻辑结构,唯一、全局,描述整张数据库所有实体、关系、属性;
内模式:数据库**物理存储结构,**描述数据在硬盘上的存储方式、索引、文件结构,最底层,面向硬件存储
外模式:面向普通用户 / 应用程序的局部视图
(2)两级映像
模式/内模式映像:保证物理独立性;
外模式/模式映像:保证逻辑独立性;
2,E-R 模型
实体:用矩形表示,每个实体由一组属性来表示。
联系:用菱形表示,一对一(1:1)、一对多(1:n)、多对多(m:n)。3)
属性:用椭圆表示,是实体某方面的特性
3,数据库设计
概念结构设计:E-R 模型,业务实体与联系
逻辑结构设计:关系模式、数据表、范式、主外键
物理结构设计:存储结构、索引、物理存取方案
二,数据库操作
1,关系模型的完整性规则
(1) 实体完整性:主码(主键)的主属性不能为空、不能重复
(2)参照完整性:外键的值必须存在
(3)用户定义完整性:满足用户要求
2,关系五大基本运算
选择 σ:选行
投影 π:选列
笛卡尔积:两张表全组合
连接:条件匹配拼接除运算:用于包含查询
三,SQL语句
-
DDL 数据定义:create、alter、drop (库、表、索引、视图)
-
DML 数据操作:insert、update、delete
-
DQL数据查询:select
-
DCL 数据控制:grant 授权、revoke 回收权限
-
视图
-
索引
四,数据库范式
1,依赖的分类
(1)部分函数依赖
主键为复合主键时,非主属性仅依赖主键其中一部分,不依赖完整主键(只要主键里的某一小部分,就能单独决定 Y,不需要整个主键。)
案列:
主键:(学号,课程号)
学生姓名 → 只靠【学号】就能确定,不需要课程号
姓名部分依赖于 (学号,课程号)
(2)完全函数依赖
非主属性必须依赖完整复合主键 ,缺少任意一个主键字段无法确定(必须整个主键一起,才能决定 Y,少一个都不行)
案列:
主键:(学号,课程号)
成绩 依赖于 (学号 + 课程号)
- 只知道学号 → 查不出某一门课成绩
- 只知道课程号 → 不知道是谁的成绩
- 成绩 完全依赖于 (学号,课程号)
(3)直接依赖
A -> B(A是主键,B直接由A决定)
(4)传递依赖
A -> B -> C(A是主键,B依赖于A,而C又依赖于B,导致C间接依赖于A)
2,范式基本概念
候选码 :是一个或多个属性的集合,它能够唯一地、最小地 标识表中的每一行数据。
主属性:出现在候选码里的字段,一个表就一个主码
非主属性:不在候选码里的字段
| 特性 | 候选码 | 主码 |
|---|---|---|
| 数量 | 一个表可以有多个 | 一个表只能有一个 |
| 来源 | 根据数据本身的特性确定 | 从候选码中人为选定 |
| 作用 | 所有能唯一标识记录的"备选人" | 被选中的、用于实际操作的"负责人" |
| 关系 | 主码的"候选池" | 候选码的"最终代表" |
假设有一个 学生 表,包含以下字段:学号、身份证号、姓名、手机号。
学号:可以唯一确定一个学生,且没有多余属性,所以它是一个候选码。身份证号:同样可以唯一确定一个学生,它也是一个候选码。手机号:如果规定每个学生的手机号也必须唯一,那么它也是一个候选码。(姓名, 手机号):虽然这个组合也能唯一确定一个学生,但它不是 候选码。因为单独的手机号已经足够了,姓名在这里是多余的,不满足"最小性"。
我们有 学号、身份证号、手机号 三个候选码 。设计者通常会选择 学号 作为主码,因为它简短、稳定且是业务上的自然标识
3,判定候选码
| 类型 | 特征 | 说明 |
|---|---|---|
| L 类 | 只出现在依赖箭头左边(→的左边),从未出现在右边 | 这类属性,一定是候选码的一部分 |
| R 类 | 只出现在依赖箭头右边(→的右边),从未出现在左边 | 这类属性,一定不是候选码的一部分 |
| N 类 | 既不在左边,也不在右边 | 这类属性,一定是候选码的一部分 |
| LR 类 | 既在左边,也在右边 | 可能是候选码的一部分,需要验证 |
4,范式
(1)1NF:列(字段)具有原子性 ,所有字段不可再拆分,不能一列存多个数据。
(2)2NF:每一个非主属性完全依赖 于任何一个候选码,不能存在部分函数依赖
(3)3NF:所有非主属性 ,既无部分依赖,也无传递依赖 于候选码。(普通字段,只能直接依赖主键)
五,事务和并发控制
1,事务的四大特性
- 原子性:要么全执行,要么全回滚
- 一致性:事务前后数据完整一致
- 隔离性:事务之间互不干扰D
- 持久性:提交后数据永久保存
2,事务并发三大问题
- **脏读:**一个事务读取了另一个事务尚未提交的修改数据。
- 不可重复读:同一事务内,多次读取同一数据,结果不一致
- 幻读:在同一个事务内,两次执行相同的范围查询,返回的记录行数不一致。
3,封锁机制
- 共享锁 S:读共享、写排斥
- 排他锁 X:读写都排斥