目录
数据模型
关系数据库
Access数据库
SQL基础
关系数据库的设计
数据模型
现实世界中的数据要转换为抽象的数据库数据,需要经过以下阶段:
·数据模型基本可以分为:概念模型(信息模型)、逻辑模型、物理模型
·概念模型 相关术语:
属性:一个实体可以有多个属性
码(键、关键字):在实体型中能够唯一标识一个实体的属性或属性集称为实体的码。
·实体形之间的联系:
一对一
一对多
多对多(分两个方向,从1出发)
·E-R图是概念模型
E-R图提供了表示实体、属性和联系的方法
图素:
矩形 表示实体
椭圆 表示属性
菱形 表示联系
无向边 + 联系类
·逻辑模型
层次模型 联系:一对多(树型结构)
网状模型 联系:多对多 (图/网)
关系模型 联系:一对一、一对多、多对多三种均有(表格)
关系数据库
·关系模型
1. 关系:二维表
2. 属性 :列=字段; 元数(列的个数)
3. 域:值域
4. 元组 :行=记录(标题那行不算)
5. 分量:属性值
如,( 01001 ,赵乾,女,讲师,计算机, 6000 ) 中“ 01001 ”为一个分量
6. 关系模式 :二维表结构 表名(列名...)
如, T ( TNo , TN , Sex , Prof , Dept , Sal )
元数:6
元组:5(标题那行不算)
· 关系的性质
列是同质的,每一列中的分量必须来自同一个域且必须是同一类型的数据。
不同的属性可来自同一个域,但不同的属性有不同的名字。
关系中不允许出现相同的元组。关系中的一个元组表示现实世界中的一个实体或一个实体间的联系。
关系中的每个分量必须是不可再分的数据项。
· E-R图和关系模式的转换
1. 一对一联系的转换
规则 :选择一个合适的实体,在其中加入另一实体的码。
关系模式转换步骤:
①分别写出每个实体对应的关系模式: 学生(学号,姓名,性别,系别) 身份证(身份证号,签发机关,有效时间)
②选择其中一个实体,加入另一实体的码 学生(学号,姓名,性别,系别, __________
③得出最终答案 【不唯一】 学生(学号,姓名,性别,系别,身份证号) 身份证(身份证号,签发机关,有效时间)
2. 一对多联系的转换
规则 :在“多”的那端实体中加入“一”的那端实体的码。
关系模式转换步骤:
①分别写出每个实体对应的关系模式
班级(班级编号,学院,系别,人数)
学生(学号,姓名,性别,系别)
②在多的那端实体中加入一端实体的码
学生(学号,姓名,性别,系别, ________ )
③得出最终答案
班级(班级编号,学院,系别,人数)
学生(学号,姓名,性别,系别,班级编号)
3. 多对多联系的转换
规则 :联系也需要转换,码为两个实体的码的 组成
关系模式转换步骤:
①分别写出每个实体对应的关系模式
学生(学号,姓名,性别,系别)
课程(课程编号,课程名称,学分)
②增加联系的关系模式,同时加上两个实体的码
选课( ____________________ ,成绩)
③得出最终答案
学生(学号,姓名,性别,系别)
课程(课程编号,课程名称,学分)
选课(学号,课程编号,成绩)
·关系模型的完整性约束
有 3 类:实体完整性、参照完整性、用户定义完整性
实体完整性和参照完整性是关系模型 必须 满足的完整性约束条件。
不同的关系数据库系统由于应用环境不同,需要用户自己定义一些特殊的约束条件,即 用户自定义完整性 。
实体完整性 :指每个关系都必须具有主码,且主码对应的所有属性值均不可为空。
参照完整性:指如果关系R2的外码X与关系R1的主码相对应,则X的每个值或等于R1的主码的某一个值或取空值。
·关系的码
候选码可以有多个,主码只能一个,都可以唯一决定这个表格。
学生( 学号 , 身份证号 ,姓名,班级编号) 候选码2个 从中任意选一个为主码/主键
班级( 班级编号 ,学院,系别,人数)
选课( 学号,课程编号 ,成绩) 学号和课程编号共同决定 属性集 联合主键
班级编号是学生表的外键(外码)一般用波浪线表示
参照完整性: 约束外键的取值范围 值应该在主键里选。
实体完整性:约束的是 主键 , 不能空着也不能重复。
用户定义完整性:看用户自定义的值域
学号 课号 成绩
01 yw01 98
01 sx02 98
02 yw01 97
候选码里的属性都是主属性
· 关系代数
1、传统的集合运算
并
差
交
广义笛卡尔积
3列2行 4列3行
列数相加,行数相乘
列:3+4
行:2*3
R m列 x行
S n列 y行
R*S=m+n列,x*y行
1. ( 2022 上 · 高 中 ) 已 知 R ={a1 ,a2 ,a3 } , S ={1,2} , T =R × S 。 那 T 关 系 中 的 元 组 数为
( )。
A. 2 B. 3 C. 5 D. 6
元组 行和行间做乘法
D
并集会变多,交集变少。
2、专门的代数运算
投影和选择都针对一个表。
选择 【根据条件得到 行 】
投影 【根据条件得到列】
连接
①等值连接
②自然连接(特殊等值连接)
规则 :①两表有相同的属性 ②结果(字段 - 相同属性列只保留一列)(记录 - 相同属性做等值连接)
默认相同属性做等值连接 结果去掉重复的一个
( 2022 上 · 初中) 在关系代数中,从两个关系的笛卡尔积选取它们属性间满足一定条件元组
的操作称为( )。
A. 投影
B. 选择
C. 自然连接
D. 等值连接
D
投影(列)和选择(行)针对一个表
选取属性间满足一定条件元组 最终结果要和笛卡尔积中的元组个数一样
自然连接:(在等值连接的基础上去掉重复的)相同属性(列)做等值连接+去掉重复
Access数据库
·数据类型和字段属性
1、数据类型
文本 255
备注
数字 字段大小可以设置为1、2、4、8、16
日期时间
货币 计算时禁止四舍五入
自动编号 一个表只能由一个自动编号字段
是/否
OLE文件 通常用附件字段代替OLE对象字段 它不允许将多个文件附加到一条记录中
超链接
附件
2、字段属性
字段大小
格式 控制数据显示或打印的格式
输入掩码
默认值 添加新记录时,自动加入字段中的值
有效性规则 设置限定该字段所能
有效性文本 当数据不符合有效性规则时所显示的信息
必须 设置该字段是否必须填入数据
允许空字符串
文本对齐
小数位数
数据表之间的联系
表格是逻辑模型是由概念模型(E-R图)转换过来
两个 SNo和CNo共同组成的主键
创建查询
宏观(可视化)
条件查询
考试一般考Access
SOL中 下划线 =一个 %=多个
【例 3-1 】查询考试 成绩区间在[75,80] 之间的学生的 学号、姓名、课号和成绩 ,并按
成绩降序 排列。
也可以用 between 75 and 80
因为CNo这一列是文本 所以要加”“
分组查询
男 女 按性别分组
数学号的个数 学号不会重复
性别 个数 年龄 显示出来
D
SQL基础
·数据定义
1、创建数据表
CREATE TABLE S
(
SNo varchar(6) PRIMARY KEY,
SN varchar(10) NOT NULL,
Age int
)
常用约束类型:
NOT NULL
UNIQUE 取值唯一
PRIMARY KEY 约束 用于定义数据表中的主码,起到唯一标识的作用,其值不可为空。
当表的主码由多个列组成时:
PRIMARY KEY(SNo,CNo)
2、修改数据表
ALTER TABLE
①增加列
ALTER TABLE S
ADD
ClassNo varchar(6)NOT NULL
②删除列
ALTER TABLE S
DROP COLUMN ClassNo
③修改列
将学生表S中的属性SN加宽到12个字符
ALTER TABLE S
ALTER COLUMN
SN varchar(12) NOT NULL
④删除数据表
DROP TABLE SC
3、数据操纵
①插入数据
INSERT INTO S VALUES('11001','冯明','男','计算机',18)
②修改数据
将学生冯明转入自动化系
UPDATE S
SET Dept=‘自动化’
WHERE SN='冯明'
3、删除数据
DELETE FROM S
WHERE SN='冯明'
单表查询
格式:
SELECT [ALL|DISTINCT] < 列名 > [ AS < 列别名 >]
FROM < 表名 >
[WHERE < 条件 1>]
[GROUP BY < 列名 1> [HAVING < 条件 2>] ]
[ORDER BY < 列名 2> [ASC|DESC]]
说明:
① DISTINCT 代表在结果中,去除重复值
②若查询全部列, < 列名 > 可以用 * 代替
③可以通过 AS 给列名和表起别名
④ GROUP BY 进行分组, HAVING 根据条件进行分组
⑤ ORDER BY 进行排序; ASC 升序(可省)、 DESC 降序
条件查询
SELECT [ALL|DISTINCT] < 列名 > [ AS < 列别名 >]
FROM < 表名 >
WHERE < 条件 1>
说明:
①若查询全部列, < 列名 > 可以用 * 代替
②查询条件及运算符对应表格
【例 8-2 】从选课表 SC 中查询选修了课程“ C0201” 并且
成绩高于 80 分的学生的学号与成绩。
*************************************************
SELECT SNo, Grade
FROM SC
WHERE CNo='C0201' AND Grade>80
BETWEEN AND 是闭区间
【例 8-3 】从学生表 S 中查询年龄在 [16,19] 之间的学生
学号、姓名和年龄。
*************************************************
SELECT SNo, SN, Age
FROM S
WHERE Age BETWEEN 16 AND 19
也可以 用Age>=16 And Age<=19
【例 8-5 】从课程表 C 中查询课号以“ C ”开头的的所有
课号及课程名 。
*************************************************
SELECT Cno, CN
FROM C
WHERE CNo like 'C*'
聚集函数
AVG
SUM
MAX
MIN
COUNT(*) 统计元组个数
【例 9 】从学生表 S 中查询计算机系学生的人数,以及这
些学生年龄的总和及平均值 。
*************************************************
SELECT COUNT(*) As 个数, SUM(Age) As 年龄和, AVG(Age) As 平均年龄
FROM S
WHERE Dept=' 计算机 ';
分组查询
SELECT [ALL|DISTINCT] < 列名 > [ AS < 列别名 >]
FROM < 表名 >
[ WHERE < 条件 1> ]
GROUP BY < 列名 1>
[ HAVING < 条件 2> ]
说明:
① GROUP BY 进行分组
②分组之 前 有条件进行过滤,用 WHERE
③分组之 后 有条件进行过滤,用 HAVING
学号 课号 成绩
01 yw 98
01 sx 98
01 yy 70
02 yw -
02 yy 77
03 sx -
把01、02、03的同学筛选出来后 再选出其中选修两门以及上课程的同学
排序查询
SELECT [ALL|DISTINCT] < 列名 > [ AS < 列别名 >]
FROM < 表名 >
[WHERE < 条件 1>]
ORDER BY < 列名 2> [ASC|DESC]
说明:
① ORDER BY 进行排序;
② ASC 升序(可省)、 DESC 降序
【例 11 】从学生表 S 中查询学生的学号、姓名和年龄,并
按年龄降序排列 。
*************************************************
SELECT SNo, SN, Age
FROM S
ORDER BY Age DESC;
C
多表查询p239
关系数据库的设计
21年考过一次
学号——>姓名 学号是一个学生的主键可以决定姓名
(学号,课号)——>成绩 不能拆开
学号——>系号——>系主任 所以学号——>系主任
候选码的求解
关系模式
R表名
A,B,C,D 列
四类:L类、R类、LR类、N类
UL:所有L类的集合
UR:所有R类的集合
UB=U-UL-UR
B的闭包:B+=BD(B能决定B,能决定D)
A:L类
B:LR类
【例 1 】设有 R ( A , B , C , D ),它的函数依赖集
F={D → B , B → D , AD → B , AC → D} ,求
R 的候选码。
A:L
B:LR
C:L
D:LR
UL=AC,UR=空集,UB=BD
UL+=AC+=ACDB=U
AC是唯一的候选码
【例 2 】设有 R ( A , B , C , D ),它的函数依
赖集 F={AB → C , D → B , C → A , C→D} ,求 R
的候选码。
A:LR
B:LR
C:LR
D:LR
①UL=空集,UR=空集,UB=ABCD
②UL+=空集
A+=A B+=B C+=CADB=U 所以C为候选码 D+=DB
因为候选码中还未包含全部非R(ABCD)属性 所以还得组合
所有带C的组合也不可以
AB+=ABCD=U 所以AB也为候选码 AD+=ADBC=U 所以AD也为候选码
一个关系里候选码可以有多个 因为候选码中包含全部非R属性 所以停止组合
( 2021 下 · 高中)关系模式 R ( A , B , C , D , E ),
根据语义有如下函数依赖集: F={A→C , BC→D ,
CD→A , AB→E} 。关系模式 R 的规范化程度最高达到
( )。
A:LR
B:UL
C:LR
D:LR
E:LR
①UL=B UR=E UB=ACD
②UL+=B+=B ×
③BA+=BACED=U BA
BC+=BCDAE=U BC
BD+=BD ×
接着拿B和ACD两两组合
BAC
BAD
BCD
有BA BC都去掉
所以候选码为 BA BC
范式 向下兼容
BC范式(主属性不依赖于非主属性):
不允许非主属性在左边,主属性在右边。
主属性:A、B、C
非主属性:D、E
因为CD决定A 存在这种情况 所以不是BC范式
候选码可以唯一决定其它
AB可以决定D AB可以决定E BC可以决定D BC决定E
找不到AB决定xx xx决定D 所以不传递依赖
同理BC也是
所以是3NF