数据:数据是人们用各种物理符号,把信息按一定格式记载下来的有意义的符号组合。数据不仅仅是数字,还可以是文字、图象、声音等各种表现形式。数据经数字化后可以存入计算机中,是数据库中存储的基本对象。数据和它的语义是不可分割的。
数据库(DB):以一定的方式保存在计算机存储设备上的相互关联、可共享的数据的集合。
数据库管理系统 (DBMS):执行数据库管理任务所需的软件。
数据库管理员:数据库的建立、使用和维护只靠DBMS是不够的,还需要有专门的人员来完成,这些人员称为数据库管理员。
空值(NULL):表示某个属性取值为未知。由于查询语句中使用IS NULL会影响效率,设计数据库时应尽量避免使用NULL值。
数据模型 是现实世界数据特征的抽象。
数据模型通常由数据结构、数据操作和完整性约束三部分组成。
在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。
(1) 关系: 一个关系对应于一张二维表。
(2) 关系名: 如“Student” 。
(3) 元组: 表中的一行,对应于存储文件中的一个记录。
(4) 属性: 表中的一列。
(5) 属性名: 给每个属性起一个名字。对应于存储文件中的字段。
(6)候选码:如果在一个关系中,存在属性(或属性组合)能唯一地决定关系中其他所有属性的值,而其任何真子集无此性质,则这个属性(或属性组合)都称为该关系的候选码(或候选关键字)。
StuID |
StuName |
StuAge |
DepID |
12001 |
mary |
21 |
1 |
12002 |
tom |
20 |
2 |
12003 |
jack |
19 |
3 |
12004 |
nancy |
22 |
1 |
如果:姓名没有重名现象,则学号和姓名都是候选码。
(7)主码(主键):在若干个候选码中指定作为码的属性(或属性组合)称为该关系的主码(或主关键字 即 主键)。(可以有多个属性)
注:主键不允许存放空值,一张表只允许存在一个主键。
(8)全码: 如果一个关系模型的所有属性一起构成该关系的码(主键),则称为全码。Books(StuID,BookID,BorrowTime)
(9)主属性: 包含在候选码中的属性。如学号。(候选码,能唯一决定其他属性的值)
(10)非主属性: 不包含在任何候选码中的属性称为非码属性或非主属性。如性别和年龄。
(11)域:属性的取值范围。
如,性别域: (男、女),年龄域: 大于0的整数。
(12)分量:元组中的一个属性值。如“李明”。
(13)关系模式:对关系的描述。一般表示为:
关系名(属性1,属性2,…,属性n)
例如, “Student”表表示为:
Student(StuID,StuName,StuAge,DepID)
1.实体完整性
2.引用完整性
3.域完整性
每个关系运算将一到两个关系做为输入,并产生一个新关系做为输出。
关系运算主要有:
(1)并运算(Union):关系R和S具有相同的属性及域,它们的并运算将产生一个新关系,新关系具有和R,S相同的数据及域,新关系中包含R,S中所有元组(不重复)。记作:R ∪S
(2)交运算(Intersect): 关系R和S具有相同的属性及域,它们的交运算将产生一个新关系,新关系具有和R,S相同的数据及域,新关系包含同时出现在R,S中的元组。记作:
R ∩ S
(3)差运算(Difference):关系R和S具有相同的属性及域,它们的差运算将产生一个新关系,新关系具有和R,S相同的数据及域,新关系包含所有属于R但不属于S的元组。记作:R-S
(4)笛卡尔积(Product):设关系R为n列,k1行,关系S为m列,k2行,则关系R和S的笛卡尔积,是R中每个元组和S中每个元组连接产生的新关系。记作:R×S
注:新关系中属性的个数为n+m,元组的个数为k1×k2.
(5)除运算(Divide):
R ÷ S步骤:
1. 判断除法运算后关系的属性结构:
为R的关系属性与S的关系属性做差运算。
2. 针对步骤1获取的属性,找出属性在关系R中的取值情况:
R中所有取值情况
3.计算每种取值在关系R上的象集:
R上的象集:象集属性由关系R和关系S的交集组成
4. 计算关系R和S的属性交集在关系S上的取值情况:
属性交集在关系S上的取值情况
注:(当提出查询“全部”、“所有”、“至少”这样的关键字时可以考虑使用除法)
5. 判断哪个象集包含了步骤4的结果,则该取值满足结果:
即R上的象集属性值包含了步骤4的结果,就是R ÷ S(属性为步骤一)
注:当提出查询“全部”,“所有”,“至少”这样的关键字时可以考虑使用除法解决。
(6)选择运算
选择操作符是根据某个条件从给定的关系中抽取指定的元组或行。
σDepName= 'IS' AND StuAge < 20(Student)
(相当于where子句)
(7) 投影运算
投影操作符是给定关系中抽取指定的属性和列。删去某些元组(避免重复行)
πStuName,DepName(Student)
(相当于select子句)
(8)连接运算
连接运算符从两个指定的关系构建一个关系。此关系包括两个关系中满足指定条件的元组的所有可能组合。
自然连接还需要取消重复列
注:(能匹配的则匹配,匹配不上的不出现在结果集;连接运算最耗费代价,应以尽量少的数据参与连接运算)
E-R图称为实体-联系图,是一种用来描述实体与实体之间联系的数据模型。E-R模型是一种概念模型。
每一个实体可以用一个关系表来表示。
一个遵循E-R图的数据库在关系系统里可以表示为一组表。
弱实体:
这种实体不能存在,总是依附于某个实体,因此称之为弱实体。
(1)一对一关系的转换
规则:每个实体对应一张表,选中其中一个实体为其添加外键,该外键来自于另一实体的主键。
Student(StuID,StuName,StuAddress,ProjID)
Project(ProjID,ProjName)
(2)一对多关系的转换
规则:每个实体对应一张表,其中“多”对应的实体转换的表添加一个外键,这个外键来自于“一”对应实体的主键。
Department(DepID,DepName)
Student(StuID,StuName,StuAddress,DepID)
(3)多对多关系的转换
规则:每个实体对应一张表,其中“关系”也对应一张表,“关系”对应的表中选择两个实体的主键组合作为“关系”表中的主键。
Student(StuID,StuName,StuAddress)
Course(CourseID,CourseName,Credit)
SC(StuID,CourseID,Grade)
(4)弱实体的转换
规则:每个实体对应一张表,其中常规实体的主键成为弱实体的外键,同时这个外键也是弱实体的主键或主键的一部分。
Employee(EmpID,EmpName)
Child(EmpID,ChildName,ChildAge)
(5)超类与子类(超类与子类间用“十”字相连。)
规则:每个实体对应一张表,每个子实体引入父实体的主键为自己的外键,同时这个外键又是子实体的主键。
Employee(EmpID,EmpName,EmpAddr)
HourlyEmployee(EmpID,Wages,Hours)
SalariedEmployee(EmpID,Salary,Bonus)
1.冗余是数据的重复出现。
2.数据的冗余会导致一些问题:
更新异常:当插入、删除、修改数据时会导致数据的不一致性。
不一致性:当有冗余数据时会导致错误。
不必要的占用多余的空间 。
注意:在数据库设计中,应尽量避免数据冗余,但并不代表没有冗余的设计一定是一个好的设计,有时需要引入冗余提高效率。
好的关系模式:
不会发生插入异常、删除异常、更新异常,
数据冗余应尽可能少。
范式化:
范式化是一种科学方法,通过使用某些规则把复杂的表格结构分解为简单的表格结构。
可以降低表中的冗余和消除不一致和磁盘空间利用的问题。
范式用来保证各种类型的不规范和不一致性不会引入到数据库。
函数依赖:
定义1:属性Y函数依赖于X,当且仅当对每一个X,恰有一个Y的值与之对应。属性X被称为决定因子。
x,y满足函数关系y=f(x),记作:x ——>y。含义是x函数确定y,或y函数依赖于x。
定义2:在关系模式中,如果X——>Y,并且对于X的任何一个真子集X’,都有X’ —\—>Y, 则称Y完全函数依赖于X,记作:X—f—>Y。
定义3:若X——>Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X—P—>Y。
第一范式:
如果表中的每个单元格都是单值的,即表不包含表,则称该表满足第一范式。
第二范式:
每一个非主属性都完全依赖于码,而不是部分依赖于码。
第三范式:
每一非主属性都不传递依赖于关系的候选键,则关系模式为第三范式。
非范式化:
在一个表格中有意义地引入冗余以改进性能被称为非范式化。
Orders(OrderID,ProductId,Qty)
Products(ProductId,Desc,Cost)
1.首先对于给定的关系模式R(U)和函数依赖集F,可以将它的属性划分为4类:
L类,仅出现在F的函数依赖左部的属性。
R类,仅出现在F的函数依赖右部的属性。
N类,在F的函数依赖左部和右部均未出现的属性。
LR类,在F的函数依赖左部和右部两部均出现的属性。
2.对于给定的关系模式R及其函数依赖集F,根据以下定理和推论来求解候选码。
定理1:若X(X∈R)是L类属性,则X必为R的任一候选码的成员。
定理2:若X(X∈R)是R类属性,则X不在任何候选码中。
定理3:如果X是R的N类属性,则X必包含在R的任一候选码中。
定理4:如果X是R的LR类属性,则需要进一步判断是否是候选码的成员。
3.选中确定的候选码,判断是否能决定其他全部属性,如果是,则确定,否则加入LR类属性继续判断。
4.写出所有非主属性对主键的函数依赖关系。