一、基本概念
1.基础名词
①数据(data):Data
是数据库中存储的基本对象,是描述事物的符号记录
②数据库(DB):DataBase
是 长期 储存在计算机内、有组织的、可共享的大量数据的集合
③数据库管理系统(DBMS):DataBase Management System。
是一个基础软件系统,位于用户与操作系统之间的一层数据管理软件。组织和存储数据、获取和维护数据。
④数据库系统(DBS):DataBase System,
数据库系统由数据库、数据库管理系统(及其应用开发工具)、应用程序、数据库管理员四部分构成。
⑤数据库管理员(DBA):DataBase Administrator。
二、数据模型
数据模型是对现实世界数据特征的抽象。
1.数据模型的分类1
概念数据模型——E-R图
结构数据模型
2.概念数据模型
按 用户的 观点对数据和信息建模,更接近与人的思维,与计算机无关,主要用于数据库的设计。
其中最常用的是:实体-关系模型(E-R模型)。
2.1. E-R图的基本元素
实体
客观存在
并可以相互区别
的事物(包括人、事、物):学生、社团、课程表等。
弱实体
这种实体对另一些实体具有很强的依赖关系,即,一个实体的存在必须以另一个实体为前提
。如:职工与家属,家属总是属于职工。
属性
实体的某一个特性,实体可以有多个属性。比如学生的学号、专业、姓名、电话等
属性值和域
属性值:属性的具体取值;
域:属性的取值范围,比如性别(男、女)
属性的分类
1、简单属性、复合属性
简单属性:原子的、不可再分的;
复合属性:可以细分为别的属性;
例如:通信地址属性,可以再分为:邮编、省、市、街道。
2、单值属性、多值属性
单值属性:定义的属性对于特定的实体,只有一个单独的值;
如:特定的职工,只对应一个职工号、职工姓名。
多值属性:一个属性对应一组值。
如:职工可能有多个亲属,则职工的亲属姓名可能有多个数目。
3、NULL值属性
4、派生属性
从其他属性得来;
如:工作年限的值 = 当前时间 - 入职时间,工作年限就是派生属性。
键
可以唯一标识每个实体的属性称为键,比如学生学号
主键和外键:
主键是一张表唯一的。
外键主要用来关联,产生两个表的关系。
比如,课程表的主键是课程编号,老师的主键是工号,课程编号和工号是外键产生两个表的联系。
实体集
具有相同属性的实体的集合称为实体集。比如全体学生,九(三)班的学生们等
联系
实体之间的对应关系
(1)1对1的联系(1:1)。如:班和班长之间的联系。
(2)一对多的联系(1:n)。如:班和学生之间的联系。
(3)多对多的联系(m:n)。如:课程和学生之间的联系。
两个实体集的联系-示例:
三个及三个实体集以上的联系-示例:
同一个实体集的二元联系:
画E-R图例题
假设教学管理规定:
一个学生可选修多门课,一门课有若干学生选修;
一个教师可讲授多门课,一门课只有一个教师讲授;
一个学生选修一门课,仅有一个成绩。
学生的属性有学号、学生姓名;教师的属性有教师编号,教师姓名;课程的属性有课程号、课程名。
1.确定实体
学生,课程,教师
2.确定每个实体的属性
学生(学号、学生姓名);课程(课程号,课程名);教师(教师编号、教师姓名)
3.联系,注意备注关系类型
3.数据模型的三要素
数据结构、数据操作、数据的约束条件
4.结构数据模型(数据模型)
直接面向数据库的逻辑结构,任何一个DBMS都以某个结构数据模型为基础。
4.1常见的数据模型
- 层次模型
- 网状模型
- 关系模型 (二维表)
- 面向对象模型
三、三级模型结构
数据库的产品很多,他们支持不同的数据模型(层次模型、网状模型、关系模型、面向对象模型),用不同的数据库语言,建立在不同的操作系统之上。数据的存储结构也各不相同,但 体系结构 基本上都有相同的特征,采用:三级模式和两级映像。
1.三级模式
概念模式(模式)
是数据的逻辑结构
对应的是 DBMS的 基本表
内模式(用户模式/子模式)
对应 视图
外模式(存储模式)
是数据的 物理结构
对应的是 存储文件
外模式——模式——内模式 分别对应:视图——基本表——文件
2.两级映像
数据的独立性(数据和程序独立。) 是由 DBMS的两级映像功能 来保证的。
①模式/内模式映像:存在于概念级和内部级之间,实现了模式和内模式之间的相互转换。保证了数据的 物理独立性。
当数据库的内模式(存储文件)变化时,数据的逻辑结构不变。应用程序处理的只是数据的逻辑结构。
所以,数据的物理独立性保证:当数据的物理结构改变时,应用程序不用改变。
但是,为了保证应用程序能够正确执行,需要修改:概念模式和内模式之间的映像。
用户的应用程序与数据库的物理结构是相互独立的。
②外模式/模式映像:存在于外部级和概念级之间,实现了外模式和模式之间的相互转换。保证了数据的 逻辑独立性。
用户的应用程序与数据库的逻辑结构是相互独立的。
数据的逻辑结构变化后,用户程序也可以不用修改。
但是,为了保证应用程序能够正确执行,需要修改:外模式和概念模式之间的映像。
四、关系模式
关系模式是指数据库中 数据 的 逻辑表示 ,用于描述数据之间的关系。
1.关系模式的基本术语
1.1 关系
一个关系就是一张二维表,每个关系都有一个关系名。
1.2 元组:
表中的一行即为一个元组,对应存储文件中的一个记录值。
1.3 属性:
表中的列称为属性,每一列有一个属性名。属性值相当于记录中的数据项或者字段值。
1.4 域
属性的取值范围。
比如 性别(男、女)
1.5 关系模式
对关系的描述称为关系模式,由 关系名
和其 属性集合
构成,关系模式格式为:
关系名(属性名1,属性名2,…,属性名n)
比如:学生关系模式 S(Sno,Sname,SD,Sage,Sex)
1.6 候选码(候选键)
不冗余
,属性或属性组合,其值能够唯一
的标识一个元组。
1.7 主码(主键)
在一个关系中可能有多个候选码,从中选择一个作为主码。
1.8 主属性
包含在任何候选码中的属性称为主属性,不包含在任何候选码中的属性称为:非主属性。
1.9 外码(外键)
子数据表中出现的父数据表的主键,称为子数据表的外键。
1.10 全码
关系模式的所有属性组是这个关系模式的候选码
1.11 超码(超键)
一个包含码的属性集称为超码。唯一标识
例如:学号是码,则(学号,姓名)就是一个超码。
例子
学生成绩信息表中有(学号、姓名、性别、年龄、系别、专业等)
超码:
(学号)、(学号,姓名)、(学号,性别),如果姓名唯一,(姓名)等
候选键:
学号唯一,而且没有多余属性,所以是一个候选键
姓名唯一,而且没有多余属性,所以是一个候选键
(姓名,性别)唯一,但单独姓名一个属性就能确定这个人是谁,所以性别这个属性是多余属性,故·(姓名,性别)不是候选键
外键:
教师表里面的教师编号就是学生表的外键
假如名字可能重复
1
候选码 (学号)、(身份证号)
主关键字:学号
主属性:学号,身份证号
非主属性:姓名、系别
2
候选码:(学号、课程号)
主关键码:(学号、课程号)
非主属性:成绩
外部关键字:学号(引用学生信息表中的学号),课程号(引用课程信息表中的课程号)
3
候选关键字1个:(课程号)
主关键字:(课程号)
主属性1个:课程号
非主属性2个:课程名,学分
2.关系模式的定义
D 和DOM 意义不大,常将关系模式定义为R(U,F)
3.函数依赖
设关系R(U,F),U是属性集,F是函数依赖集,令X、Y是U的两个子集
对于任意R的一个关系r,X的每一个具体值,Y都有唯一值与之对应
则,X决定函数Y,或Y函数依赖于X,记作X→Y。
(1)平凡函数依赖和非平凡函数依赖
如果X——>Y,但是X包含Y,则称X——>Y是平凡的函数依赖。
如果X——>Y,但是X不包含Y,则称X——>Y是不平凡的函数依赖。
(2)部分依赖和完全依赖
若想查某位学生的某一门课的成绩Grade,必须同时知道他的学号Sno和课程号Cno。只知道Sno或Cno是不行的
此时 Y[Grade]完全依赖于 X[Sno,Cno]。
若想查某位学生的姓名Sname,只需知道他的学号Sno就可以了。
Y[Sname]只依赖于X[Sno,Cno]中的子集x[Sno]
此时称Y部分函数依赖于X。
(3)传递依赖
A得到B,B得到C,C得不到B,B得不到A,那么A得到C
比如 学号->系名,系名->系主任,并且(系名不能决定学号),所以系主任传递函数依赖学号。
(4) 函数依赖的公理系统
(5)属性闭包的计算
求关系R的闭包,就是求关系R的主键
因为A的闭包不能得到U的所有属性,所以A不是主键!
4.关系模式的范式
(1) 范式的定义
范式的标准定义是:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。
通俗地讲,范式可以理解为一张数据表的表结构所符合的某种设计标准的级别。
使用范式的根本目的是:减少数据冗余,尽量让每个数据只出现一次,获取数据时通过 join 拼接出最后的数据。
(2)规范化要解决的问题
一个第一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合。这个过程叫做规范化。
第一范式(1NF)
第二范式(2NF)
2NF的关系模式R也存在问题:数据冗余、更新异常
。因为:传递函数依赖。
如果存在某些属性只依赖混合主键
中的部分属性,那么不符合二范式。
第三范式(3NF)
3NF 在 2NF 的基础之上,消除了非主属性对于主键(复合主键)的传递依赖。
巴斯范式(BCNF)-扩充的3NF
若一个关系达到了第三范式,并且它只有一个候选键,或者它的每个候选键都是单属性,则该关系自然达到BC范式。
一个满足BC范式的关系模式R已消除了插入和删除异常。
第四范式(4NF)-多值依赖
5. 关系模式的组成
关系模式由 关系数据结构、关系操作集合 和 关系完整性约束 三部分组成。
关系数据结构:
一张二维表
关系操作集合:
常用的关系操作有:选择、投影、连接、除、并、交、差等查询操作和增加、删除操作等。
关系完整性约束:
实体完整性
关系中,主码的值不能为空或部分为空。多个属性构成的主码,不能部分为空
例如:
学生(学号,姓名,性别)
这里的学号作为唯一标识符,也就是主属性(主码)不能取空值
参照完整性
如果关系R2的外码X与关系R1中的主码相对应,则外码X的每个值必须在关系R1中主码的值中找到,或者为空值。
例如:一对多关系模式中
学生(学号
,姓名,性别,专业号)
专业(专业号
,专业名)
学号和专业号都是主码
专业号
是学生关系
的一个外码
专业关系是被参照关系
学生关系为参照关系
学生关系中专业号这个外码可以有两种取值情况:
1.空值
2.等于专业关系中的专业号
例:多对多关系:
学生(学号
,姓名,课程号,…)
课程(课程号
,课程名称,学分)
选修(学号,课程号
,成绩)
学号和课程号是选修关系的外码
学生关系和课程关系均为被参照关系
选修关系为参照关系
参照完整性:
1.选修关系的主属性不能取空值(按照实体完整性原则)
2.选修关系的学号和课程号与学生关系的学号和课程关系的课程号相等。
用户定义的完整性
用户对某一具体数据指定的约束条件进行检验。
学生的性别只能取“男”,“女”
五、关系代数的运算
(一)关系代数
关系代数是介于关系之上的集合代数运算。
关系代数包括:
- 传统的集合运算;
- 专门的集合运算。
1.传统集合运算
并
要求:
参与并运算的两张关系表必须具有相同的属性(列名);
运算方法:选取R、S关系表中的所有元组合并,建立新表;
交
要求:
参与交运算的两张关系表必须具有相同的属性(列名);
运算方法:选取R、S关系表中的所有相同元组,建立新表;
差
要求:
参与交运算的两张关系表必须具有相同的属性(列名);
运算方法:选取R表中与S表中任意元组不同的元组,建立新表;
笛卡尔积
若是集合R有m个元素,集合S有n个元素,则:
笛卡尔积:RS的列数:m + n;RS的行数:m * n
2.专门的集合运算
2.1 选择(筛选行)
2.2 投影(筛选列)
2.3 连接
连接
等值连接(按某属性)
自然连接
查询S表中Sno字段的值 = SC表中Sno字段的值,然后将两张表拼在一起,去掉重复的列Sno。
2.4 除
3.外连接
3.1 左外连接(左边的表数据是全的)
3.2 右外连接(右边的表数据是全的)
3.3 全外连接(自然连接+左外连接+右外连接 = 全外连接 )
六、SQL语言
(一)SQL概述
1、什么是 SQL
SQL(Structured Query Language)(结构化查询语言),它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、SQL Server(不同数据库管理系统) 等。
2.语法要求
SQL 语句可以单行或多行书写,以 分号
结尾;
可以用空格和缩进
来来增强语句的可读性;
关键字不区分
大小写,建议使用大写;
(二)SQL分类
分DDL(数据定义语言)、DML(数据操作语言)、DCL(数据控制语言)、DQL(数据查询语言)
1.数据库对象
数据库对象就是数据库的组成部分,主要的数据库对象包含:表(Table)、视图(View)、索引(Index)、、图表(Diagram)、用户(User)等。
(三)DDL
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
1.创建数据对象(CREATE)
1.1 建立数据表
CREATE DATEBASE 数据库名;
CREATE DATABASE MYDB; //创建MYDB的数据库。
1.2 建立基本表
常用数据类型
int:整型
double:浮点型,例如 double(5,2)表示最多 5 位,其中必须有 2 位小数,即最大值为 999.99;
char(n):长度n字符串类型;(当输入的字符不够长度时会补空格)
varchar:固定长度字符串类型;
完整性约束
(1)表级完整性约束的3种子句:
- 主键子句:PRIMARY KEY (实体完整性)
- 检查子句:CHECK (用户定义完整性)
- 外键子句:FOREIGN KEY (参照完整性、引用完整性)
Create table t1(
id int primary key,
name varchar(100)
);
(2)列级完整性约束的3种子句:
not null
unique:唯一(可以为空)
not null unique
default
2.修改基本表结构-ALTER
基本表创建完成后,可以:增加列(ADD),修改列(ALTER),删除列(DROP)
增加一个列
ALTER TABLE 表名 ADD 列名 类型;
给 stu 表添加 classname 列
ALTER TABLE stu ADD classname varchar(100);
修改一个列
ALTER TABLE 表名 ALTER COLUMN 列名 新类型;
修改 stu 表的 gender 列名为 sex
ALTER TABLE stu ALTER COLUMN gender sex char(2);
删除一个列
ALTER TABLE 表名 DROP COLUMN 列名;
删除 stu 表的 classname 列
ALTER TABLE stu DROP COLUMN classname;
查看表的结构
DESC 表名;
查看stu表;
DESC stu;
删除表
DROP TABLE 表名;
删除stu表
DROP TABLE stu;
(四)DML
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)
1 INSERT插入语句
向SQL的基本表中插入数据有两种方式:直接插入元组值;插入一个查询的结果值。
1.1直接插入元组值
注意:所有字符串数据必须使用单引用
第一种情况:列名可写
INSERT INTO stu(id,name,age,sex) VALUES('001'、'小美','12'、'女');
第二种情况:
若是无特殊要求,则可以不写列名序列,按创建表时列的顺序插入所有列的值:
INSERT INTO stu VALUES('002', 'liSi', 32, '女');
1.2插入一个查询的结果值
2.DELETE删除语句
若是没有写where条件,直接:delete from 表名
则是将该表中的记录全部删除
DELETE FROM stu WHERE sid='s_1001'003B;
DELETE FROM stu WHERE sname='chenQi' OR age > 30;
DELETE FROM stu;
3 UPDATE修改语句
UPDATE stu SET sname=’zhangSanSan’, age=’32’, gender=’female’ WHERE sid=’s_1001’;
UPDATE stu SET sname=’liSi’, age=’20’WHERE age>50 AND gender=’male’;
UPDATE stu SET sname=’wangWu’, age=’30’WHERE age>60 OR gender=’female’;
UPDATE stu SET gender=’female’WHERE gender IS NULL
UPDATE stu SET age=age+1 WHERE sname=’zhaoLiu’;
(五)DCL
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;(很少用)
GRANT (授权)
REVOKE (取消权限)
(六)DQL
DQL(Data Query Language):数据查询语言,用来查询记录(数据)
1. 投影查询SELECT
select若要查询多个列,用逗号隔开;
from子句若出现多个表,用逗号隔开。
form子句中出现多个基本表或视图时,系统首先执行笛卡尔积操作。
SELECT * FROM stu; //从表中查询所有列
DISTINCT 关键字
AS关键字
为了改变查询结果中显示的列名,可以在select语句的列名后面用“AS 标题名”来显示新的列名。
2. 选择查询WHERE
WHERE 子句表达式中可以用的运算符
BETWEEN…AND值在什么范围
字符串的匹配运算-模糊查询like
字符串的匹配运算- % 和_ 通配符
-- 查询姓‘李’的学生的学号、姓名和所在系
SELECT Sno, Sname, Sdept FROM Student
WHERE Sname LIKE '李%'
-- 查询姓名中第二个字是‘冲’的学生的学号、姓名和所在系
SELECT Sno, Sname, Sdept FROM Student
WHERE Sname LIKE '_冲%'
集合的比较运算 IN或NOT IN
-- 查询‘计算机系’和‘机电系’学生的学号、姓名和所在系
SELECT Sno, Sname, Sdept FROM Student
WHERE Sdept IN ('计算机系', '机电系')
-- 查询不在‘计算机系’和‘机电系’学生的学号、姓名和所在系
SELECT Sno, Sname, Sdept FROM Student
WHERE Sdept NOT IN ('计算机系', '机电系')
排序查询 ORDER BY
-- 将‘C01’号课程的成绩按升序排列
SELECT Cno, Grade FROM SC
WHERE Cno='C01' ORDER BY Grade ASC
-- 将‘1001’号学生的成绩按降序排列
SELECT Cno, Grade FROM SC
WHERE Sno='1001' ORDER BY Grade DESC
聚合函数
聚合函数 实现 数据统计
的功能,返回一个单一
的值。
聚合函数一般与select语句的group by子句
一起使用。
-- 统计学生总数
SELECT COUNT(*) 学生人数总数 FROM Student
-- 统计学生‘1001’的总成绩
SELECT SUM(Grade) 总成绩 FROM SC WHERE Sno='1001'
-- 统计学生‘1001’的平均成绩
SELECT AVG(Grade) 平均成绩 FROM SC WHERE Sno='1001'
-- 注:类型与Grade一致,如果是Grade是整型那么平均值也是整型
-- 统计课程‘C01’的最高分数和最低分数
SELECT MAX(Grade) 最高分, MIN(Grade) 最低分
FROM SC WHERE Cno='C01'
数据分组 GROUP BY
与聚合函数一起使用
-- 统计每门课程的选课人数,列出课程号和选课人数
SELECT Cno 课程号, COUNT(Sno) 选课人数
FROM SC GROUP BY Cno
-- 统计每个学生的选课门数,列出学号,选课门数和平均成绩
SELECT Sno 学号, COUNT(Cno) 选课门数, AVG(Grade) 平均成绩
FROM SC GROUP BY Sno
HAVING
HAVING子句用于对分组后的统计结果再进行筛选,它的功能与WHERE类似,但它用于组而不是单个记录。在HAVING中能使用聚合函数,但在WHERE不能。
-- 查询选课门数不超过3门的学生的学号和选课门数
SELECT Sno, COUNT(*) 选课门数 FROM SC
GROUP BY Sno HAVING COUNT(*) > 3
-- 查询‘计算机系’和‘机电系’每个系的学生人数,有两种写法
SELECT Sdept, COUNT(*) FROM Student
GROUP BY Sdept
HAVING Sdept IN ('计算机系', '机电系')
SELECT Sdept, COUNT(*) FROM Student
WHERE Sdept IN ('计算机系', '机电系')
GROUP BY Sdept
-- 其中第二种效率更高
/*
关于WHERE、GROUP BY、HAVING
- WHERE 用来筛选FROM 中指定的数据源所产生的行数据
- GROUP BY 用来对经过WHERE 筛选的结果数据进行分组
- HAVING 用来对分组后的统计结果再进行筛选
在分组前用先WHERE 进行筛选可以减少分组后的数据量,所以效率更好。
*/
##3 表的连接查询(多表查询)
表的连接来实现若干个表数据的联合查询
在SQL SERVER中,连接分为:内连接INNER JOIN和外连接OUTER JOIN
5.3.1 内连接-INNER JOIN(默认)
内连接的分类:等值连接 非等值连接 自连接
等值链接
指表之间通过“等于”关系连接起来,产生一个连接临时表,然后对该临时表进行处理后生成最终结果。
查询每一个员工的姓名 , 及关联的部门的名称
select emp.name , dept.name from emp , dept where emp.dept_id = dept.id ;
非等值查询
自连接
将同一个表进行连接,这种连接称为自连接。
5.3.2 外连接 OUT JOIN
外连接的分类:
左外连接 left join
左外连接相当于查询表A(左表)的所有数据和中间绿色的交集部分的数据。
左边表的所有行都要,右边表中匹配的行才要。
表1的位置为左表,表2的位置为右表
右外连接 right join
右外连接相当于查询表B(右表)的所有数据和中间绿色的交集部分的数据。
右边表的所有行都要,左边表中匹配的行才要。
表1的位置为左表,表2的位置为右表
全外连接-full join
此运算符包含两个表中的所有的行。
5.3.3 子查询
子查询是一种嵌套在其他 SELECT 语句中的 SELECT 语句
在WHERE子句中使用子查询
找出所有在grades表中有记录的学生的姓名。
SELECT name
FROM students
WHERE id IN (SELECT student_id FROM grades);
子查询从grades表中选择所有的student_id
然后外层查询从students表中选择那些id在子查询结果中的学生的姓名。
带EXISTS测试的子查询
5.4 查询结果的交、并、差运算
5.4.1 UNION 并
5.4.2 INTERSECT 交
SELECT Nsum FROM T1
INTERSECT
SELECT Nsum FROM T2
5.4.3 EXCEPT 差
两个表中的数据,我们要获取#T1中有,但#T2中没有的数据,这时候就用到EXCEPT方法了,使用方法如下:
SELECT * FROM #T1
EXCEPT
SELECT * FROM #T2
(七)视图
1.视图的定义
视图是从一个或多个基本表或视图中导出的表,是一个虚拟表
。
对视图进行插入、删除,就是对基本表进行插入、删除。
2. 视图的删除
DROP VIEW 视图名;
(八)索引
索引改变的是内模式,或者说,索引改变的是存储文件的内容。
删除索引
DROP INDEX 索引名;
七、数据库的设计流程
(一) 数据库的设计步骤
步骤如下:
需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、数据库实施阶段、数据库运行维护阶段
(二)需求分析阶段
逻辑设计、物理设计
均以需求分析
的设计为依据
。
需求分析阶段的工作以及形成的相关文档,作为概念结构设计阶段的依据。
需求分析阶段的相关文档:
需求说明文档;
数据字典(系统需求说明书)
数据流程图(数据流图)(系统需求说明书)
(三) 概念设计阶段
概念结构设计阶段:
1、选择局部应用;
2、逐一设计局部E-R图;
3、局部E-R图的合并;
合并的过程中要解决分E-R图之间存在的冲突。
局部E-R图冲突的分类
1.属性冲突
2.命名冲突
异名同义
同名异义
3.结构冲突
同一实体,在不同的分E-R图中有不同的属性;
同一对象,在一个分E-R图中被抽象为实体,在另一个分E-R图中被抽象为属性。
(四)逻辑结构设计
在概念设计基础上进行数据模型设计
,可是:层次模型、网状模型、关系模型。
在数据库逻辑结构设计阶段,需要 需求分析 阶段 产生的 需求说明文档、数据字典和数据流图 作为设计依据
E-R图和关系模式的转换
1、实体向关系模式的转化
实体名 = 关系模式名;
实体属性 = 关系模式属性;
实体标识符 = 关系的码
2、联系向关系模式的转化
一对一联系的转化
方法:
将联系
归并到关联的两个实体的任意一方,
给待归并的一方实体属性集中增加另一方实体的码和该联系的属性。
被增加一方其他不变,被删减一方删减联系的属性和对方的码就行
一对多联系的转化
方法:
将联系归并到关联的两个实体的多方
,
给待归并的多方实体属性集中增加另一方实体的码和该联系的属性。
被增加一方其他不变,被删减一方删减联系的属性和对方的码就行
多对多联系的转化
方法:
将实体集的码加上联系的属性形成另外一个独立的关系模式
联系转换成一个独立的关系模式:
关系模式的名称 = 联系的名称;
关系模式的属性 = 该联系所关联的两个实体属性的键 + 联系的属性
关系的码 =多方实体的码构成的属性组。
(五)物理结构的设计
八、数据库的控制功能
(一)事务管理
1.事务的定义
事务是一个操作序列,这些操作,要么都做,要么都不做。
事务和程序是两个不同的概念,一般一个程序可以包含多个事务。
2.事务定义的语句
- 事务开始:BEGIN TRANSACTION
- 事务提交:COMMIT
- 事务回滚:ROLLBACK
3.事务的四个特性
原子性
一致性
隔离性
持久性
(二) 数据库的备份与恢复
(1)数据库的备份
数据库出现故障
后,恢复的原理是:建立数据冗余
(重复存储)。
建立冗余数据的方法:
进行·数据转储·和·登记日志文件·。
数据的转储分为:
静态转储和动态转储;
海量转储和增量转储;
日志文件。
(2)数据库的恢复
(三)并发控制
(1) 并发控制技术
并发控制的主要技术:封锁。
基本封锁的类型:
排它锁(X锁、写锁)
共享锁(S锁、读锁)
排它锁(X锁、写锁)
加了排它锁,则任何类型的锁都加不了!
共享锁(S锁、读锁)
加了共享锁,只能再继续加共享锁。
九、分布式数据库
分布式数据库是一种把数据分散存储在不同物理位置的数据库。