目录
数据模型
关系数据库
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