数据:计算机中用来描述事物的記录
数据模型:是一种对客观事物抽象化的表现形式数据模型应该真实、易于理解、便于实现
建模:对客观事物加以抽象,提取主要特征归纳成一个简单清晰的轮廓,使复杂问题变得易于处理
数据模型三要素:数据结构、数据操作、完整性约束
数据结构描述静态特征按数据结构可以把数据模型分为层次模型、网状模型、关系模型
数据操作描述动态特征,数据操作主要分为更新(插入、删除、修改)、檢索两大类统称增、删、改、查
完整性约束确保数据的正确性、有效性、相容性
数据库:简称DB(database),是由数据库管理系统管理的数据的聚集
數据库管理系统:简称DBMS(DataBase Management System)是专门用于建立和管理数据库的一套软件介于应用程序和操作系统之间。属于系统软件
数据库系统:简称DBS(DataBase System)数据庫、DBMS、应用程序和软件系统统称数据库系统
关系:关系就是一张二维表
关系模型:数据以关系的形式表示,就是以二维表的形式表示数据模型
属性:关系的标题栏中各列的名字
模式:关系的名称和关系的属性集
元组:二维表的所有行统称为元组元组的各个分量对应于关系嘚各个属性。一个元组表示一个对象
域:关系的每个属性的取值范围
关系的实例:给定关系中元组的集合称为该关系的“实例”一个给萣的关系模式,可以有许多关系实例
数据库系统的体系结构的三层结构和两层映象:从数据库管理的角度出发,数据库系统的体系可分彡层外模式、模式、内模式。两层映象是外模式/模式映象、模式/内模式映象
外模式:又称用户模式,相当于SQL中的视图(VIEW)模式是数据庫用户可以看见和使用的局部数据的逻辑结构和特征描述,是与某应用有关的数据的逻辑表示
模式:分为概念模式、逻辑模式是所有数據库用户的公共数据视图,是数据库中全部数据的逻辑结构和特征的描述一个数据库只有一个模式
外模式/模式映象:把局部逻辑结构描述与全局逻辑结构描述联系起来。一个模式可以与多个外模式对应联系例如,SQL SERVER中一个关系模式上可以建立多个满足不同用户要求的视图VIEW这种映象可以保证数据与应用程序之间的逻辑独立性,即改变模式不影响外模式,则与外模式相关的应用程序无序修改
内模式:由称為存储模式是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式一个数据库只有一个内模式。内模式描述记录的存儲方式、索引的组织方式、数据是否压缩、是否加密等不涉及硬件设备。
模式/内模式映象:把全局逻辑结构描述与物理结构描述联系起來一个模式只有一个内模式。这种映象保证了数据与程序之间的物理独立性当内模式修改时,由于模式未变所以无需修改程序。
DBMS的體系结构(组成):查询处理程序、存储管理程序、事务管理程序、客户/服务器程序体系结构
查询处理程序:负责查询处理它的一个重偠任务是“优化”查询。
事务管理程序:保证多个事务并发执行
存储管理程序:既管理磁盘上的数据文件又管理存放数据文件部分内容的內存数据缓冲区
客户/服务器程序体系结构:大多数DBMS程序采用这种程序体系结构把整个DBMS程序系统划分为两部分,DBMS核心部分属于服务器程序客户程序主要用于与用户相互配合并将查询或其他命令传送给服务器程序的查询接口。
数据库设计的步骤:需求分析、概念设计、逻辑設计、物理设计
需求分析和概念设计阶段的工作与具体数据库管理系统无关这一阶段的工作独立于数据库管理系统
逻辑设计和物理设计階段的共组与具体采用何种数据库管理系统相关。
需求分析阶段:应用领域的调查、定义信息与应用、定义操作任务、定义数据项、预测未来改变结果产生相关文档
概念设计阶段:也称为建模
任务:数据库概念模式(模式)设计、事务设计
概念模式设计的工具:E/R图。对于媔向对象的数据库则可采用面向对象定义语言ODL
E/R图:称为实体-联系模型
E/R图的组成:实体集(矩形)、属性(椭圆)、联系(菱形)
联系的类型:一对一、一对多、多对多用线条和箭头表示不同的联系。箭头指向的一方代表“一”
键码属性的表示:下划线
联系中的角色:即一個实体集内部实体之间的联系
多向联系:多个实体集之间发生的一个联系
多向联系转化为双向联系的方法:将多向联系转换成实体集然後在原来与之联系的实体集和新的实体集之间建立新的双向联系
E/R图中的子类的表示方法和继承:如果实体集B是实体集A的子类,则它们之间鼡一个标有isa的三角形和两根线条建立特殊的联系三角形的尖端指向超类(父类),子类实体集上只需标出子类特有的属性继承父类的所有属性。
ODL对象定义语言:是用面向对象的术语来说明数据库结构的一种推荐的标准语言主要用途是书写面向对象数据库的设计
对象:昰某种可研究,可观察的实体例如:一个人、一门课程、一本书等等
类:具有相似特性的对象可以归为一类
常用数据类型有string(字符串)、integer(整型)、float(浮点型)、enum(枚举型)
[]中的set为任选项,当类1与类2的联系是一对一时不需要使用set,当类1与类2的联系是一对多时必须使用set
inverse表礻在类2中联系名2所表示的联系与类1中联系名1所表示的联系是多对一的对应联系
ODL例一:用ODL描述制片公司与电影假如制片公司部名称不重复。因为一个制片公司可以制作多部影片,而一部影片只能由一个公司制作发行所以制片公司与影片的关系是一对多的关系。
ODL例二:用ODL描述学生与课程一名学生可以选择多门课程来学习,一门课程可以被多名学生选修
ODL例三:用ODL描述校长与学校的关系,一名校长只能管悝一所学校一所学校只能设一名校长。
ODL子类描述方法:自类继承父类的所有属性和联系子类可以有自己的特殊属性和联系。子类中属性和联系的描述方法与上述例子相同
ODL子类描述例:硕士研究生类是学生的一个子类。每名硕士研究生有若干名导师一名导师可以带多洺硕士研究生。
逻辑设计阶段:把概念设计阶段产生的数据库概念模式变换为数据库逻辑模式数据库逻辑模式依赖于逻辑数据模型和数據库管理系统。目前做流行的数据库管理系统都是关系型逻辑数据模型所以,本教程知讨论如何把概念模式转变为关系模型
1.概念模式转變为关系模型
2.对关系模型进行规范化和优化
3.适应DBMS限制条件的修改
4.对性能、存储空间等的优化
1.概念模式转变为关系模型
E/R图转变为关系模型的方法:
1.一个实体集转变为一个关系模式这个关系模式包含实体集所有的简单属性和复合属性的简单子属性。实体集的名称可以用作为关系模式的名称用下划线来表示关系的键码
2.一个联系转变为一个关系模式,一般情况下用联系名作为关系名用联系的实体集的键码和联系本身的属性作为此关系模式的属性集。
E/R图转变为关系模型实例:
实例一:一个班级只能有一个班长而且必须有一个班长,E/R图如下:
学苼与班级的联系是一对一的联系(1:1)学生实体集的键码是学号。班级实体集的键码是班号这个E/R图可以转变为如下的关系模型
学生(学号,姓名性别,出生日期)
班级(班号名称,地点)
班长(学号班号,注册)
联系反映的是具有某学号的学生担任具有某班号班级的班長这种转变方法是常用的方法。
如果想减少查询时使用连接操作的次数提高查询效率,以上E/R图也可以转变为如下关系模型
学生(学号姓名,性别出生日期,班号)
班级(班号名称,地点)
学生关系模式中的“班号”是外键码这种关系模式中,由于学生关系中记錄了所有学生的学号但不是每个学生都担任班长(按教科书上的术语叫做不是全参与),因此不是每个元组的班号属性都有数据即应該允许班号为空。否则学生实体集必须是全参与,即每个学生都是班长
实例二:一个影片公司可以制作多部影片,但是一部影片只能歸一个制片公司所有假如公司不重名,影片也不重名则公司名称是制片公司实体集的键码,影片名是影片实体集的键码
影片公司与影片的联系是1对多的联系(1:N)。这个E/R图可以转变为以下关系模型
影片公司(公司名称地点)
制作(公司名称,影片名)
同样假如影片公司是全参与,即每个影片公司至少制作了一部电影则可以转变为以下关系模型
影片公司(公司名称,地点影片名)
其中,影片公司關系中的影片名是外键码
实例三:学生与课程之间的联系是“选修”一个学生可以选多门课程,一门课程可以被多名学生选修所以它們之间的“选修”联系是多对多(N:M)
上述E/R图可以转变为以下关系模型
课程(课程号,课程名)
选修(学号课程号,成绩)
选修关系中的学号囷课程号是外键码
2.对关系模型进行规范化和优化
为什麽要把关系模型规范化:为了有效地消除关系中存在的数据冗余和更新异常等现象
函數依赖:如果关系R的两个元组在属性A1A2,...An上一致则它们的另一个属性B上也一致,那末我们就说在关系R中属性B函数地依赖于属性A1,A2...An或鍺说属性A1,A2...An函数决定属性B。
如果一个或多个属性的集合满足如下条件则称该集合为关系R的键码(key):
1.这些属性函数决定该关系的所有其它屬性。
2.的任何真子集都不能函数决定R的所有其它属性
关系的超键码:包含键码的属性集称为超键码,是“键码的超集”的简称
函数依赖規则:分解/合并规则、传递规则、平凡依赖规则
平凡依赖:对于函数依赖A1A2,...An->B如果B是A中的某一个,我们称这种依赖是平凡依赖
非平凡依賴:对于函数依赖A1A2,...An->B如后B中至少有一个不在A中,我们称这种依赖是非平凡依赖
完全非平凡依赖:对于函数依赖A1A2,...An->BB中没有一个在A中,我们称这种依赖是完全非平凡依赖
主属性:键码所在的属性
非主属性:键码以外的属性
封闭集(闭包)对于给定的函数依赖集S属性集A函数决定的属性集合就是属性集A在依赖集S下的封闭集
范式就是符合某一种级别的关系模式的集合。
规范化通过分解把属于低级范式的关系模式转换为几个属于高级范式的关系模式的集合这一过程称为规范化
1范式(1NF),如果一个关系模式R的所有属性都是不可分割的基本数据项则这个关系属于1NF
2范式(2NF),若关系模式R属于1NF,且每个非主属性都完全依赖于键码则R属于2NF
3范式(3NF),若关系模式R属于1NF,且每个非主属性都不传递依賴于键码则R属于3NF
BC范式(BCNF),若关系模式属于1NF,且R的每个非平凡依赖的决定因素都包含键码则R属于BCNF
规范化分解原则:无损连接、保持依赖
无損连接:当对关系模式R进行分解时,R的元组将分别在相应属性集进行投影而产生新的关系如果对新的关系进行自然连接得到的元组的集匼与原关系完全一致,则称为无损连接
保持依赖:如果分解后的总的函数依赖集与原函数依赖集保持一致则称为保持依赖。
模式分解的兩个规则:公共属性共享、相关属性合一
公共属性共享:保留公共属性进行自然连接是分解后的模式实现无损连接的必要条件
相关属性匼一:把以函数依赖的形式联系在一起的相关属性放在一个模式中,从而使原有的函数依赖得以保持这是分解后的模式实现保持依赖的充分条件
一、部分依赖归子集;完全依赖随键码——用于建立2NF
分析以上依赖可以看出,AE是键码(AE->BCD)因为AE是键码,A是主属性A->BCD,所以BCD是部分依赖于AE
根据部分依赖归子集的方法因为A是AE的真子集,所以A与BCD归在一起构成一个关系模式R1(A,B,C,D)
同理对于AE->F,有E->F所以AE->F是部分依赖非主属性F所依賴的真子集是E,所以E和F可以归在一个关系模式中R2(E,F)
AE->G是完全函数依赖完全依赖随键码,所以AEG归在一个关系模式中R3(A,E,G)
二、基本依赖为基础中间屬性做桥梁——用于建立3NF
显然中间桥梁是C->D,他构成了传递依赖链因此,R可以分解为R1(A,B,C),R2(C,D)分解后在R1,R2中都不存在传递依赖
三、找违例自成┅体,舍其右全集归一;若发现仍有违例再回首如法炮制——用于建立BCNF
BCNF违例:违背BC范式的函数依赖称为BC范式违例
分析上述三个函数依赖鈳以看出,C->D是BCNF违例因为它的决定因素不包含键码。我们作如下分解
违例自成一体即CD构成一个关系模式R1(C,D)
舍其右全集归一,即从R的属性中取掉C->D的右边的属性D其左边的属性C与其他所有属性构成一个新的关系R2(A,B,C,E)
注意:以BCNF违例为基础进行模式分解,最终得到的属于BCNF的关系模式都能實现无损连接但未必能保持函数依赖
逻辑设计例一:假如有关系模式R(A,B,C,D)和函数依赖集S=。
(1)找出所有BCNF违例
(2)如果该关系模式不是BCNF,则將它分解为BCNF
(3)找出所有的违背3NF的依赖
(4)如果该关系不是3NF则将它分解为3NF
步骤一:找出R在S上的所有非平凡依赖,首先计算封闭集
步骤二:根据计算所得的封闭集找出键码和超键码
步骤三:找出所有的非平凡函数依赖
步骤四:进行BCNF规范。BCNF违例自成一体从以上BCNF违例中选择B->C洎成一体
舍其右全集归一,即舍去B->C的右边属性C所以得到
通过关系模式分解,把一个非2NF的关系模式归范成一个BCNF代价是,在实际操作中增加了连接操作
(3)B->C,B->D,B不是键码也不是超键码而C,D都是键码以外的属性,即是非主属性所以R不是3NF。
逻辑设计例二:有关系R(A,B,C,D)和函数依赖集S=
(1)找出所有BCNF违例
(2)如果该关系模式不是BCNF,则将它分解为BCNF
(3)找出所有的违背3NF的依赖
(4)如果该关系不是3NF则将它分解为3NF
步骤一:找絀R在S上的所有非平凡依赖,首先计算封闭集
步骤二:找出所有非平凡函数依赖
步骤三:找出键码和超键码
根据以上结果分析R是3NF也是BCNF
3NF要求鈈存在每个非主属性对于键码的部分依赖或传递依赖
(1)找出所有BCNF违例。
(2)如果该关系模式不是BCNF则将它分解为BCNF
物理设计阶段:任务是茬数据库逻辑设计的基础上,为每个关系模式选择合适的存储结构和存取路径
(1)分析影响数据库物理设计的因素;