数据库
-
三级模式两级映像
- 外模式(用户模式 子模式)=》视图、概念模式(模式)=》基本表、内模式(存储模式)=》存储文件
- 外模式/模式映像(逻辑独立性)、模式/内模式映像(物理独立性)
-
关系模式
- 元组(行)一条记录、属性(列)第一行是属性名,后面是属性值(数据项)
- 候选码(候选键)能够唯一地标识一个元组
- 主码(主键)候选码中,从中选一个作为主码(有时候主码等于候选码)
- 主属性:包含在候选码中的属性,不包含为非主属性
- 外码:不是本关系中的主码,确是另外一个关系的主码
- 全码:所有属性组成才是这个关系模式的候选码
- 超码:在原有的候选码的基础上加一个属性作为候选码
- 关系模型由关系数据结构、关系操作集合、关系完整性约束
- 完整性约束
- 实体完整性=》主属性的值不能为空或者部分为空
- 参照完整性
- 关系1的外码x与关系2的主码必须相对应,外码x的值必须在关系1中找到,或者为空
- 用户自定义完整性
- 完整性约束
-
关系代数运算符
- 集合运算符:并交差(1-2属于1不属2)笛卡尔积
- 专门的关系运算符:选择(出来满足的行)投影(出来列)连接除
- 都要先笛卡尔积后在筛选 theat连接 等值连接(符号=)
- 自然连接
- 先笛卡尔积后,挑共同属性的列当列都相等的时候,然后去除其中一个关系中的列,剩下的就是
- 左(右)外连接,先自然连接,然后左(右)记录保存,没有的为null
- 全外连接,先自然连接后左右连接
- 转SQL语句
- 投影就是select xx from xx
- 选择就是where xxx
- 笛卡尔积 select xxx from R,S
- 自然连接 select xxx from R,S where xx and xx 把一样的列杀掉
-
SQL
- SQL语言的分类
- DDL数据定义语言
- create创建 alter修改 drop删除
- DML数据操纵语言
- insert into S values xxx、delete from S、update S set xxx
- DQL数据查询语言
- distinct去掉重复列 as给列取别名 跟在列后面 表格的别名则直接取
- between x and x在x x之间 where x in (xxx)中选一个
- (not) like 模糊查询 %任意长度 _单个字符
- order by xxx desc降序 默认升序asc 需要是最后一个语句
- 聚合函数
- avg平均 sum求和 max最大 min 最小
- count(*)行数 空的不计算进去
- group by 分组 having 分组后的条件 分组后面的要在select后出现
- 等值连接 select * from S where S.x=C.x
- 左右连接 from C left join S on 条件
- 内外连接 inner join outer join
- 子查询 where exists (select xxx)
- union 并 intersect 交 except 差 对查询结构的操作
- DCL数据控制语言
- 授权 grant 权限(insert) on table S to 用户
- with grant option
- 移除 remove 权限 on table 用户(public全部)
- DDL数据定义语言
- SQL语言的分类
-
视图
- 视图是一个或者从多个基本表或视图中导出的表,是一个虚表
- 创建 create view 视图名 as select xxx
- 最后如果加了这句 with check option后 对视图就是update insert delete的时候要遵守 定义视图的时候where后的条件所有条件
-
创建索引改变的数据库的内模式
-
关系模式
- X->Y Y依赖于X 如果Y不包含X,那么是非平凡依赖(正常) 有包含则是平凡
- X–f–>Y Y完全函数依赖 X里面的子集都不可以单独推出Y 一推一 一定是完全
- X–p–Y Y部分(局部)函数依赖 X里面的子集就可以推出来Y
- X->Y Y->Z 得到X->Z 传递函数依赖
-
闭包 找只有左边的字符看能不能推出U,不行再加左右都有的字符,直到推出U
-
范式
- 第一范式:每个原子项都是不可分割的数据项
- 不能排除数据冗余和更新异常等问题(插入删除),可能存在函数部分依赖
- 第二范式(第一分解后):满足第一范式,且每个非主属性都完全函数依赖于候选码(消除非主属性对候选码的部分依赖)
- 不能排除数据冗余和更新异常等问题(插入删除),可能存在函数传递依赖
- 第三范式(第二继续分解):满足第二范式,且每个非主属性都非传递函数依赖于候选码(消除非主属性对候选码的传递依赖)
- 可能存在主属性对码的部分函数依赖和传递依赖(消除了就是BCNF)
- 第四范式:X->->Y多值依赖。X都包含了R的一个候选码,则就是第四范式
- 消除非平凡且非函数依赖的多值依赖
- 第一范式:每个原子项都是不可分割的数据项
-
数据库设计
- 六个步骤
- 用户需求分析(了解用户需求确定系统边界)
- 作为概念结构设计的依据、建立需求说明文档、数据字典、数据流图
- 概念设计(E-R图)
- 复合属性 ps:地址 可以分省市县 不可再分就是简单属性
- 多值属性 ps:一个属性对应一组值 亲属多个 一对一就是单值属性
- null属性,没有值或者未知就是null,表示无意义或者不知道
- 派生属性 ps:年限年龄 通过别的属性操作得来 年龄=今年-出生日期
- 选择局部应用:设计局部视图=》合并取消冲突=》修改重构消除冗余
- 合并冲突种类:属性冲突(同一属性存在不同的E-R图) 、命名冲突(相同意义的属性在不同的E-R图上有着不同的命名,或者是名称相同的属性在代表着不同的意义)、结构冲突(同一实体在不同的E-R图有着不同的属性,在这里是实体在那边是属性)
- 逻辑设计(关系模式、关系规范化)
- 将E-R图转换为指定的数据模型、确定完整性约束和确定用户视图
- 物理设计、数据库实施阶段、数据库运行维护阶段
- E-R图转关系模式
- 1-1的时候,第一种:联系变成独立的模式,加入联系的属性,跟两实体的码,主码为任一实体的码。第二种,把一方的实体的码跟联系属性加到另外一方的实体里面进去。
- 1-n的时候,第一种:联系变成独立的模式,加入联系的属性,跟两实体的码,m边的玛为实体的码。第二种,把一方的实体的码跟联系属性加到多方的实体里面进去。
- m-n的时候,联系变成独立的模式,加入联系的属性,跟两实体的码,两边的玛构成实体的码。
- 用户需求分析(了解用户需求确定系统边界)
- 六个步骤
-
事务
- 原子性(要么都做要么都不做)、一致性(一个一致性状态变成另外一个一致性状态)、隔离性(相互隔离,多个事务执行,对其他事务是不可见的)、持久性(事务成功提交,对数据库操作也永久有效)
-
封锁
- 排他锁(X锁或者写锁),加X锁后不可以加其他锁了X也不行,可读可修改
- 共享锁(S锁或者读锁),加S锁后还可以加S锁,只读不可修改
-
分布式数据库