九、数据库
1,概述、三级模式两级映像、数据库设计步骤
三级模式:
内模式(物理模式、存储模式。文件)
模式(概念模式、逻辑模式、模式。面向数据库的设计人员。表结构)
外模式(视图)
两级映像:
模式和内模式 物理独立性
外模式和模式 逻辑独立性
一个数据库可以有多个外模式,只有一个模式和内模式
数据库设计:
1需求分析--数据流图、数据字典、需求说明书。
2概念结构设计--得到ER图
ER图合并的时候会产生的三类冲突:
属性冲突 学生--姓名 学院--姓名 同一个属性在不同
命名冲突 同一个含义不同名字
结构冲突 同一个实体在不同对象里有不同的属性
3逻辑结构设计--将ER图变为关系模式(表)
4物理设计--存储结构
5数据库实施阶段--建库建表
6数据库运行和维护阶段
2,数据模型:
数据模型分为
1概念模型(ER图)
2关系模型(二维表形式的ER图) 元组(行) 属性(列)
3网状模型:形成一张网
4面向对象模型: 对象
数据库模型三要数:数据结构、数据操作、数据的约束条件
3,代数关系:
并(加法) 交(共有部分) 差(减法)A-B B-A不一样 被减数独有部分
笛卡尔积:S1XS2(全排列) (列名相加数据相乘)
投影:Π 选择要展示的列select
选择:σ 按条件选择某行where no=1
自然连接:(列名去重复相加,筛选共有元素相同的行保留)选择属性列并集的行 ABC ACD ---> ABCD
4,函数依赖
函数依赖:X-->Y X决定Y Y依赖X
两种规则:
部分函数依赖,传递函数依赖

设关系模式R(U,F),其中U为属性集,F是U上的一组函数依赖。
函数依赖的公理系统:(阿姆斯特朗公理)
自反律:对于任意属性集合X和Y,有Y属于X,X属于U,则X→Y被F逻辑蕴含。也就是说如果属性集Y属于X,则X可以决定Y,又可以说属性集X可以决定他的属性子集。
增广律:对于任意属性集合X、Y和Z,如果X →Y,那么XZ →YZ
传递律:任意属性集合X、Y和Z,如果X →Y且Y →Z,那么X → Z。
可推导
合并律: 对于任意属性集合X、Y和Z,如果X →Y和X → Z,那么X →YZ
分解律:对于任意属性集合X、Y和Z,如果X→YZ,则X→Y和X→Z。
合成律:对于任意属性集合X、Y和Z,如果X →Y且Y →Z,那么XZ →YZ。
5,键
超键(码):唯一标识记录的属性集合
候选键:最小的超键去掉冗余
主属性:有代表意义的,不是有其他属性推导出来的属性。候选键的并集
主键: 候选键中选的一个属性或者属性集。
候选关键字:根据依赖集,从未出现过在右边,必然是候选键,然后看能遍历所有属性。只有出度没有入度
6,约束:
外键:是指一个表中的属性,它引用另一个表中的主键。外键用于建立表之间的关系。
实体完整性约束:即主键约束,主键值不能为空,也不能重复。
参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值,或者为空。
用户自定义完整性约束:自定义表达式约束,如设定年龄属性的值必须在0到180之间。
7,范式
概念设计中ER模型转关系模型
1NF 不可以拆分出小表,不满足exel(无小表)
2NF 有联合主键 (联合主键 ) 每一个非主属性完全依赖于某一个候选键
3NF 有传递依赖 (每个列都和主键有关) 每一个非主属性不依赖于其他非主属性
BCNF 数据冗余,解决更新操作不正确的问题
8,反规范化
反规范化技术:规范化设计后,数据库设计者希望牺牲部分规范化来提高性能
具体方式:
1增加余列:在多个表中保留相同的列
2增加派生列:在表中增加可以由本表或其它表中数据计算生成的列。
3重新组表:把这两个表重新组成一个表来减少连接而提高性能。
4水平分割表:根据一列或多列数据的值,把数据放到多个独立的表。
5垂直分割表:对表进行分割,将主键与部分列放到一个表中
9,模式分解
有损连接:R1交R2>R1-R2或R2-R1
是否保持函数依赖分解:对于关系模式R,有依赖集F,若对R进行分解,分解出来的多个关系模式,保持原来的依赖集不变,则为保持函数依赖的分解。另外,注意要消除掉冗余依赖(如传递依赖)
有损无损分解:分解后的关系模式能够还原出原关系模式,就是无损分解,不能还原就是有损
是否保持函数依赖案例:设原关系模式R(A,B,C),依赖集F(A->B,B->C,A->C),将其分解为两个关系模式R1 (A,B)和R2(B,C),此时R1 中保持依赖A->B,R2保持依赖B->C,说明分解后的R1 和R2是保持函数依赖的分解,因为A->C这个函数依赖实际是一个冗余依赖,可以由前两个依赖传递得到,因此不需要管。
定理:如果R的分解为p={R1 ,R2},F为R所满足的函数依赖集合,分解p具有无损连接性的充分必要条件是R1∩R2->(R1 -R2)或者R1 ∩R2->(R2-R1 )。
10,并发控制和封锁协议
事务ACID特性:
操作原子性A:银行转账,要么全做要么全不做
数据一致性C:A减少,B就应该收到
执行隔离性I: 在提交之前对其他事务都不可见
改变持续性D: 结果改变是持续的
加锁是解决事务并发造成的更新丢失,数据复读,读脏数据
X排它锁(写锁)不能加任何锁
S共享锁(读锁)只能加读锁
一级封锁协议:修改之前加X,解决丢失更新
二级封锁协议:一的基础上,读的时候加S,解决不可重复读,读脏数据
三级封锁协议:加X S
11,SQL语句包括:
DDL数据定义语言
DML数据操作语言
DQL数据查询语言
TCL事务控制语言
DCL数据控制语言
1数据定义语言(DDL):用于定义数据库对象,如表、视图、索引等。包括CREATE、ALTER、DROP等语句。
2数据操作语言(DML):用于对数据库中表的数据进行增删改操作。包括INSERT、UPDATE、DELETE等语句。
3数据查询语言(DQL):用于查询数据库中表的记录。主要是SELECT语句及其子句
排序order by,默认为升序(ASC),降序要加关键字DESC:select * from t1 order by sno
分页limit,limit startIndex,pageSize,startIndex代表从第几项开始,pageSize代表展示多少项数据,startIndex从0开始算:select * from t1 limit 0,1 0
分组查询group by,分组时要注意select后的列名要适应分组,having为分组查询附加条件:select sno,avg(score) from student group by sno having(avg(score)>60)
字符串匹配:like,%匹配多个字符串,_匹配任意一个字符串:select * from t1 where snamelike'a_'
4事务控制语言(TCL):用于管理数据库事务。包括COMMIT、ROLLBACK、SAVEPOINT等语句。
5数据控制语言(DCL):用于管理数据库的权限和安全性。主要是GRANT和REVOKE语句。
12,应用程序与数据库交互:
应用程序通过程序接口来访问数据库
包括
1 库函数级别访问接口 OCI
2 嵌入SQL访问接口
3 通用数据接口标准:为不同的数据库提供统一的接口(ODBC)
4 ORM访问接口:使用框架技术让对象和数据库中的表产生映射
ODBC--->JDBC
ORM访问接口:myBAtis,JPA,Hibernate
13,nosql非关系型数据库
NOSQL:非关系型数据库(易拓展、大数据、高性能、高可用、灵活的数据模型)不保证ACID
Nosql框架分层(从下到上):数据持久层、数据分布层、数据逻辑模型层、接口层
列式存储数据库:行列存储数据,分布式海量数据。HBase
键值对数据库:简单易部署Key-Value redis
文档型数据库:键值对升级版,允许嵌套 MongDb
图数据库:图形 Neo4J
NoSQL的特征:易拓展、大数据量、高性能、灵活的数据模型、高可用
NoSQL的框架分层(从下至上):数据持久层、数据分布层、数据逻辑模型层和接口层,层次之间相辅而成,协调工作。
NoSQL适用于哪些场景:数据模型比较简单、需要灵活性更强的系统、对数据性能要求高、不需要高度的数据一致性。
评论交流
欢迎留下你的想法