六、数据库
1.概念模型和数据模型
- 概念模型实际上是现实世界到机器世界的一个中间层次,一种表示方法:实体-联系方法,E-R模型
- 数据模型有层次模型,网状模型,关系模型(数据结构是一张规范化的二维表)等
2.数据库的三级模式结构和两级映像
-
三级模式:外模式-视图,模式-基本表,内模式-存储文件
-
两级模式
- 外模式/模式映像,保证了逻辑独立性
- 模式/内模式映像,保证了物理独立性,因为存储文件是真实存在的
3.关系模式
- 主属性:包含在任何候选码中的属性称为主属性
- 关系模型中的关系完整性约束
- 实体完整性:关系中主码的值不能为空或部分为空。也就是说,主码中属性即主属性不能取空值
- 参照完整性:如果关系R2的外码X与关系R1的主码相对应(基本关系R1和R2不一定是不同的关系,即它们可以是同一个关系),则外码X的每个值必须在关系R1中主码的值中找到,或者为空值。
- 用户定义的完整性:指用户对某一具体数据指定的约束条件进行检验
4.关系的数学定义
-
数学代数
-
投影:列,符号的左下角是条件
-
选择:行,符号的左下角是条件
-
连接
- 等值连接可以由基本的关系运算笛卡儿积和选取运算导出
-
自然连接是除去重复属性的等值连接,这个等值比较的是同名属性的等值。
-
左外连接
-
右外连接
-
全外连接
-
这些连接很好去思考,就是先把是等值连接的全部写好,然后根据是左外还是右外还是全连接去留下需要的元素
5.SQL语言
可以去这里学习一下https://blog.csdn.net/znyyjk/article/details/52717336
- 投影
-
选择
-
笛卡尔积
-
等值连接
-
DESC降序,默认升序ASC,distinct去重复列
-
聚合函数
where后面不能用聚合函数
having后面才能
count就是数属性里面的元素,如果分了组,就按组中的元素个数计数
-
数据分组
order by属性:根据这个属性排序
group by 属性:按照这个属性进行分组
- 连接查询
https://blog.csdn.net/weixin_41404773/article/details/79876316
-
内连接
内连接是等值连接,它使用“=、>、”等运算符根据每个表共有的列的值匹配两个表中的行
查询语句:
select * from pro_dish pd inner join pro_dish_standard pds
on pd.id = pds.dish_id
-
左连接(left join 或 left outer join)
左连接又称左向外连接,查询的结果集包括SQL语句中左表的所有行,右表中匹配的行。如果左表的某行在右表中没有匹配行,则用空值表示。如果左表数据,在右表中有多行匹配,则查询结果左表为多行显示。
查询语句:
select * from pro_dish pd left join pro_dish_standard pds
on pd.id = pds.dish_id
-
右连接(right join 或 right outer join)
右连接也成右向外连接,查询的结果集包括SQL语句中右表的所有行,左表中匹配的行。如果右表的某行在左表中没有匹配的行,则左表数据为空。
查询语句:
select * from pro_dish pd right join pro_dish_standard pds
on pd.id = pds.dish_id
-
权限
grant 权限 on 对象 对象名 to 用户 with grant option
with grant option:加上这个,这个权限,用户也可以给别人
例子:grant 权限 on 表 表名 to 用户
-
视图
crate view 视图名
as select 查询子句
[with check option]
删除视图:drop view 视图名
-
索引
索引建立在物理存储文件,内模式上
create [unique]index 索引名
on 表名
6.关系模式规范化
-
函数依赖
- 完全函数依赖:X->Y,并且X中真子集不能确定Y,只有X能确定Y,就是完全函数依赖
- 部分函数依赖:X->Y,X能确定Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖
- 传递依赖:X->Y,Y->Z,有X->Z,则是完全函数依赖
-
码
- 主属性:包含在任何候选码中的属性称为主属性,主属性不能为空值
- 软考题目中,主属性不会出现在->的右边
- 非主属性:不包含在任何候选码中的属性称为主属性
- 主属性:包含在任何候选码中的属性称为主属性,主属性不能为空值
-
推理规则
-
范式
- 1NF:属性值都是不可分的原子值
- 1NF->2NF:消除非主属性对候选码的部分依赖
- 2NF->3NF:消除非主属性对候选码的传递依赖
- 3NF->BCNF:消除主属性对候选码的传递依赖和部分函数依赖
-
无损连接和保持函数依赖
- 无损连接:就是分解后的通过自然连接,所有属性都在
- 保持函数依赖:分解后的可以推导出所有的函数依赖
7.数据库设计
- 需求分析
- 用户需求
- 产生:系统需求说明书,主要包括**需求说明文档、数据流图、数据字典、**各种说明性表格、统计输出表和系统功能结构图等。
- 概念设计
- E-R图
- 逻辑设计
- 关系模式,规范化
- 物理设计
8.概念设计阶段
- 派生属性:可以从其他属性得来
- 弱实体:对另一些实体具有很强的依赖性
- 冲突
- 属性冲突:对属性的类型、取值范围和数据单位等可能会不一致
- 命名冲突:属性同一个名字,不同的意义
- 结构冲突:第一种是同一个实体在不同的分E-R图中有不同的属性,另一种是同一对象一个作属性,一个作实体
9.逻辑结构设计
- E-R图关系模式的转换
- 实体向关系模式的转换
- 1对1 ,合并,如果转换成一个独立的关系模式,码选任意一方
- 1对多 ,合并到多一方,如果转换成一个独立的关系模式,码选多一方
- 多对多,只能转换成一个独立的关系模式,关系的码是多方实体的码,构成的属性组
- 实体向关系模式的转换
10.事务管理
ACID:原子性,一致性,隔离性,持久性
- 原子性:事务是原子的,要么都做,要么都不做。
- 一致性:事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。因此,当数据库只包含成功事务提交的结果时,称数据库处于一致性状态。
- 隔离性:事务相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的。
- 持久性:一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也将永久有效。
11.数据库备份和恢复
- 静态转储和动态转储。静态转储是指在转储期间不允许对数据库进行任何存取、修改操作;动态转储是在转储期间允许对数据库进行存取、修改操作。因此,转储和用户事务可并发执行。
- 海量转储和增量转储。海量转储是指每次转储全部数据;增量转储是指每次只转储上次转储后更新过的数据。
- 日志文件。**在事务处理的过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。**一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。因此,DBMS利用日志文件来进行事务故障恢复和系统故障恢复,并可协助后备副本进行介质故障恢复
12. 封锁
- 排他锁:写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。
- 共享锁:读锁若事务T对数据对象A加上S锁,则**只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。**这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A进行任何修改。
13.分布式数据库
-
分片透明:指用户或应用程序不需要知道逻辑上访问的表具体是怎么分块存储的
-
复制透明:指采用复制技术的分布方法,用户不需要知道数据是复制到哪些节点,如何复制的。
-
位置透明:指用户无须知道数据存放的物理位置
-
逻辑透明:指用户或应用程序无需知道局部场地使用的是哪种数据模型
-
共享性:指数据存储在不同的结点数据共享
-
自治性:指每结点对本地数据都能独立管理
-
可用性:指当某一场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪
-
分布性:指数据在不同场地上的存储