数据库的类型
1.关系型:MSSQL,基本数据结构是表
2.非关系型:noSQL,基本数据结构不是表
关系数据模型
1.关系数据结构
单一的数据结构--关系
数据的逻辑结构--二维表
域:相同数据类型的值的集合(一列)
属性:域的名字(列名)
码:特定的属性/属性集
主码:元组标识的候选键,一个关系必须指定一个主码(只能是一个;可以组合)
候选码:能唯一标识元组的属性(可能是多个;可以组合)
主属性:候选码的各个属性 ↑
主码是候选码的子集
元组:(一行)
笛卡尔积:域的积(域可以相同、也可以部分相同)
所有域所有取值的组合(排列组合),不能重复
可以以集合/二维表表示 {(元组1),(元组2)}
关系:笛卡尔积(D1XD2X...XDn)的子集称作关系
记作 R(D1,D2,...Dn) R:关系名 n:关系的目或度
查询表:查询结果对应的表
视图:导出的表(虚表,并不实际存储)
基本表:
列是同质的,每一列来自于同一个域
不同的列可以出自不同的域
列的顺序无所谓、行的顺序无所谓
任意两个元组不能完全相同
分量(单元格)必须取原子值(不可再分)
关系模式
对关系的描述,是型;关系是值
关系模式与关系的区别:
关系模式--对关系的描述、静态的、稳定的
关系--关系模式某一时刻的内容、动态的、不断变化的
关系数据库
所有实体和他们之间关系的集合构成了一个数据库(可能包含多个关系模式)
2.关系操作
常见操作:增删改查
特点:集合操作方式
语言种类: 关系代数预言
关系演算预言
同时具备上述特点的语言--SQL(结构化查询语言)
关系数据语言的特点
非过程化
能够嵌入高级语言中使用
3.完整性约束
分类:实体完整性、参照完整性(前两者由系统自动支持)、用户定义的完整性
实体完整性
主码唯一且不为空(主码可以是属性的组合)
主属性不能为空值
完整性约束条件
列级 | 元组 | 关系 | |
静态 | 列定义 类型 格式 域值 空值 | 元组值应满足的条件 | 实体完整性约束 参照完整性约束 函数依赖约束 统计约束 |
动态 | 修改列定义或列值 | 元组新旧值之间应满足的约束条件 | 关系新旧状态间应满足的约束条件 |
完整性约束机制
定义功能:允许用户自定义各种类型完整性约束
检查功能:立即执行的约束(语句结束完成后立刻检查)
延迟执行的约束(整个事务结束后再进行检查)
违约反应:拒绝该操作、其他处理方法
参照完整性
关系模式的引用:不同的表通过冗余属性进行连接(有意义的重复属性)
外码:关系R中的属性F对应着另一关系S的主码K,那么F就是R的外码
S是被参照关系、R是参照关系
规则(外码取值)
或者取空值,可以暂时为空
或者等于被参照表中某个元组的主码值
!!!外码不能凭空捏造一个主码中不存在的值
违约反应: 级联删除(删掉含有外码值的元组)受限删除(有外码值时不允许删除)、置空值删除(NULL)
关系代数
DBMS处理SQL查询时会将其转换为关系代数
关系代数是一种抽象的数据查询语言
用关系运算来表达查询
传统的集合运算符
并、交、差
所有运算对象必须具有相同的结构
专门关系运算符
选择、投影、笛卡尔积、连接、重命名
投影:从R中选择出若干属性列组成新的关系
πL(R) L为R中的属性列表,结果会去掉重复元组
例如:--从学生表中取出名字和年龄
选择:从R中昂选择满足给定条件的各元组
不会去掉重复项
--从学生列表中选择性别为男的学生(ssex还可替换为其列号--不推荐)
查询条件可以用逻辑运算符叠加
笛卡尔积
R X S 将R中的每个元组t1和S中的每个元组t2配对连接
R(m个属性、k1个元组) S(n个属性,k2个元组)
列数:n+m 前n列是关系R的一个元组
行数:k1*k2 R和S中有重名属性时,以R.A S.A表示
连接
R ∞ S
从两组关系的笛卡尔积中选择符合条件的元组
大于连接:
等值连接:从关系R和S的笛卡尔积中选取A、B属性相等的元组
自然连接:在公共属性上进行的等值连接。(必须具有公共属性、结果会把重复的属性去除)
例:
大于连接(C>D) 等值连接(C=D)
等于连接(R.B=S.B) 自然连接(有几个公共属性就要相等几个公共属性 )
等值连接(R.B=S.B) 自然连接
重命名 将R中的原列名改为新列名(表)
辅助运算符
比较运算符:< <= > >= = <>
逻辑运算符:非、与、或
运算符优先级(无括号情况下)
1.弹幕运算符得而优先级最高--select、project
2.笛卡尔积和连接运算
3.交
4.并与和