关系数据库管理系统(RDMS)
概念:通过数据、关系和对数据的约束三者组成的数据模型来存放和管理数据。
RDMS的数据存储在被称为表的数据库对象中的特点:
1.数据以==表格==的形式出现
2.每==行==为各种==记录名称==
3.每==列==为记录名称所对应的==数据域==
4.许多的==行和列==组成一张==表单==
5.==若干==的表单组成==数据库==
基本结果映射
主键的生成
1.类型:
(1)候选键:是由表中某些属性构成的属性集,能够唯一标示表中的记录。组成候选键的属性集是最小的,即从中去掉任何一个属性都将破坏其唯一性。在候选键中,任何属性的值都不能为空。
(2)主键:是任选一个候选键,它用来标示数据库表中的记录。
(3)外键:是对候选键的引用。它要么是空值,要么包含每个属性的相应值。外键经常用来实现关联关系和泛化关系。
2.定义主键的两种方法
(1)将对象标识符映射为主键
优点:主键只由表中的一个属性构成,大小相同
开发时考虑到了对象之间关系的可维护性
缺点:在数据库维护时,很难看出基于对象标识符的主键具有什么内在含义
(2)将对象的某些属性映射为主键
优点:为数据库的调试和维护提供了方便
缺点:修改可能要涉及到许多外键的修改
3.属性类型到域的映射(不是很懂)
(1)枚举字符串
(2)为每个枚举值定义标示
(3)枚举表
(4)对枚举值进行编码
4.属性到列的映射
泛化关系的映射
1.所有类的映射
将所有的类都映射为数据库中的表。
优点:
1.支持多态;
2.易于修改父类和子类;
3.针对对象可能充当每个角色,只需要在合适的表中保存相应的记录即可。
缺点:
1.每个类都需要映射为数据库中的表,因此导致数据库中存放着大量的表;
2.由于数据库中存在大量的表,因此会导致数据读取和写入的时间过长;
3.除非添加一些视图来模拟所需要的表,否则数据库的报表生成会相当困难。
2.除无属性外类的映射
将具有属性的类才映射为数据库表,无属性的类不进行映射。
缺点同所有类的映射一样,只是表稍微减少了部分。
3.父类属性下移
指不将父类映射为数据库表,只映射子类。这时,每个子类对应的数据库中不仅包含子类特有的属性,还要包含该子类所继承的父类的属性。
优点:
1.减少数据库表的数量;
2.易于生成报表(这是因为所需要的有关类的所有数据都存储在同一张表中)。
缺点:
1.当修改某个类时,必须修改与它对应的表和所有子类对应的表。
2.很难在支持多个角色的同时仍维护数据完整性,这种情况可能存在,只是比原来的要复杂一点。
4.子类属性上移
将所有子类的属性都存放在父类所对应的数据库表中。
优点:
1.减少数据库表的数量;
2.易于生成表单。
缺点:
1.增加类层次结构的耦合性。每次在类层次结构的任何地方添加一个属性时,都必须将一个新属性添加到表中;
2.浪费数据库中许多空间。这对于单一角色的对象很有效,否则可能浪费数据库中的许多空间。
关联关系的映射
1.一对一关联的映射
在这种情况下,可以在两个类中任意选择一方,在其所对应的类表中添加一个外键,指向另一方所对应类表中的主键,从而实现两张类表之间的连接。
2.零或一对一关联的映射
一般会在对象个数为0或1的那一方,所对应的表中添加一个外键,指向另一方类所对应的类表中的主键,建立两表之间的连接。
3.一对多关联的映射
实现一对多关联的映射时,需要将外键放置在“多”的一方。
4.多对多关联的映射
在实现多对多关联时,通常需要引入一个关联表,映射关联对象,从而将多对多关联转化为两个一对多关联。在实现多对多关联时,需要在新建的关联表中设置一个对象标识符,即主键,同时增加两个外键,它们分别指向初始关联的两个类对应表的主键。如果不增加主键,那么只引用表的两个外键时,会将这两个外键作为联合主键。
5.聚合和组合关系的映射
1.一种是聚集关系较为紧密的情况下,可以将其映射在一张表中;
2.另一种是聚集关系较为松散的情况下,可以用一对多关联的映射方法实现,需要在子类的类表中增加一个外键,指向父类的类表的主键;
3.组合中子类与父类的实例有相同的生命周期,因此,子类所对应的子表中的外键不能为空。
6.映射时应避免的情况
1.合并
三大范式:
第一范式:确保每列的原子性;
第二范式:在第一范式的基础上,更进一层,其目标是确保表中的每列都与主键相关;
第三范式:在第二范式的基础上,更进一步,其目标是确保每列都与主键列直接相关,而不是间接相关。
2.在实现一对一关联时将外键放置在两张表中
开发者在实现一对一关联时,应该避免将外键放在两张表中,使两张表中都包含外键,即外键出现两次。
3.并行属性
并行属性是指关系平等的属性。不能列出来,这不仅增加了程序的复杂性,也会阻碍数据库应用程序的扩展性。因此,不要在数据表中实现具有并行属性的关联的多个角色。