关系模式
对关系的描述称为关系模式
关系模式(Relation Schema)是数据库设计中最基本的理论基础之一,其描述了数据在关系型数据库中的结构和组织方式。一个关系模式需指出该关系的结构,包括构成属性、属性所属的域、属性和域之间的映射关系等。1970年,英国数学家爱德加·科德(E. F. Codd)在其经典论文中首次提出关系模型的概念,奠定了关系数据库的理论基础,在关系模型中,关系是用于描述数据的主要结构,关系模式则是对关系的简洁表示。1972年,为支持基于关系模型的数据库设计,E. F. Codd博士提出了规范化技术。在20世纪80年代,范式化设计作为一种评价和规范关系模式设计的方法,被广泛应用于设计更加规范和高效的数据库模式。同时,随着数据库应用场景的扩大和复杂化,为了平衡数据冗余和一致性的同时提高系统查询效率和简化数据模型,人们在设计数据库时开始更多的关注反范式化设计的使用。而20世纪末到21世纪初,随着大数据的兴起和应用以及复杂数据结构的需求,对象关系模型(ORM)和NoSQL(Not Only SQL)数据库的出现提供了更加灵活和可扩展的数据存储方案,使得数据的存储和操作更加灵活和方便。关系模式定义了数据库中包括表名、列名、数据类型、主键、外键等关于表的结构的信息以及主键约束、唯一约束、外键约束、检查约束等各种约束条件,为数据存储提供了规范和结构化的基础,减少了如文件系统等传统的数据管理方法存在的数据冗余、一致性维护困难等问题。
发展演变
1970年,英国数学家E. F. Codd在论文《A Relational Model of Data for Large Shared Data Banks》中提出了关系模型的概念,包括关系、元组、属性等,并首次将数据组织为一组二维表格(关系)的形式。关系模式则指出了该关系的结构,描述了数据在关系型数据库中的结构和组织方式。因此,在关系数据库中,一张表结构可称为一个关系模式,表中的内容称为一个关系,关系模型则是由若干个关系模式组成的集合。1972年,科德在《Further Normalization of the Data Base Relational Model》中提出了规范化技术。规范化通常作为对表结构的一系列测试来决定它是否满足或符合给定范式。Codd的范式化设计作为一种评价和规范关系模式设计的方法,成为了数据库设计的重要技术之一,包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。1974年,科德和美国科学家Raymond F. Boyce 在《Recent Investigations into Relational Data Base Systems》中对原来的3NF作了进一步的修正,提出了更为严格的定义,即Boyce-Codd范式(BCNF)。范式化技术通过分解不符合要求的关系模式,得到符合范式要求的更小的关系模式,以达到减少数据冗余、提高数据一致性和完整性的目的。1985年,科德在“计算机 Worold”杂志上提出的完全关系型的12条严格标准,即科德十二定律(Codd's12 rules),其确立了关系模式在数据库系统中应该如何被处理和实现的标准。Codd's12 rules包括准则0、信息准则、保证访问准则、空值的系统化处理、基于关系模型的动态的联机数据字典、统一的数据子语言、视图更新准则、高级的插入、修改和删除操作、数据的物理独立性、数据逻辑独立性、数据完整的独立性、分布独立性和无破坏准则。这些规则被认为是关系数据库的基本要求,奠定了关系数据库理论的基础,并对数据库管理系统的发展产生了深远影响。20世纪80年代末和90年代初,随着关系数据库系统的发展和应用的深入,人们意识到范式化设计在某些场景下可能导致性能下降问题,反范式化设计也在实际应用中的意识逐渐增强。反范式化设计,即有意放弃范式要求,以提高查询效率、减少联接的复杂性或简化应用程序代码等为目的。常见的反范式化技术包括冗余设计、使用非规范化表等,其具体操作为在一个表中增加另一个表的冗余字段,减少了两个表查询时的关联,即减少连接运算,从而提高查询效率。20世纪90年代末,对象/关系数据库出现,其表示对某些初始的SQL产品向上兼容的扩展,如DB2和Informix。面向对象的方法和技术对计算机各个领域,包括程序设计语言、信息系统设计等方面都产生了深远的影响,同时促进了数据库中面向对象数据模型的研究和发展。许多关系数据库厂商为了支持面向对象模型,对关系模型做了扩展从而产生了对象关系数据模型,其将数据库中的关系模式映射为面向对象的模型,使数据的存储和操作更加灵活和方便。20世纪末至21世纪初,NoSQL(Not Only SQL)数据库的出现提供了更加灵活和可扩展的数据存储方案。随着互联网应用的发展和大数据兴起,传统的关系数据库模型在某些场景下显得力不从心,无法应对很多PB级及以上数据库处理任务。2009年在亚特兰大举行的“no:SQL(east)”讨论会强调NoSQL是传统关系型数据库的有益补充,其放宽了关系模式对数据一致性和完整性的要求,以获取更高的性能和可伸缩性。
基本语法
概述
在关系数据库中,关系模式和关系实例共同组成一个关系,关系实例是一个表,关系模式则为对该表的描述。关系模式的定义包括模式名、属性名、值.ch及模式的主关键字,其仅仅是对数据特性的描述,与物理存储方式没有关系。即关系模式是静态的,只描述数据库中数据的结构和组织方式。而关系实例是关系模式某一时刻的具体数据,是动态的。
关系模式的构成
在关系数据库中,关系为值,关系模式为型。对关系的描述称为关系模式,关系是元组的集合,其实质上是一张二维表,表的每行为一个元组,表的每列为一个域,对每列起一个名字称为属性。因此一个关系模式需指出该关系(即这个元组集合)的结构,包括构成属性、属性所属的域、属性和域之间的映射关系。
约束
在关系模式中,约束是用于确保数据的完整性和一致性的重要机制之一,可以单独或组合使用。通过合理地使用约束条件,可以有效地管理和维护数据库,并减少数据错误和不一致性的发生。
主键约束
主键约束用于唯一标识表中的每一行数据,确保每个实体都具有唯一的标识。主键可以由一个或多个列组成,组成主键的列称为主键字段,主键字段的值不能为空(即不允许NULL值),且在整个表中必须唯一。
外键约束
外键约束用于定义表之间的关联关系,确保引用完整性。外键是一个表中的列,其值必须对应另一个表中的主键或唯一键,常用于创建表之间的关联,并确保关联的数据一致性。
唯一约束
唯一约束确保指定列或列组合中的值是唯一的,用于确保某些列或组合列的取值不重复,但允许其中某些行的值为空(即允许NULL值)。
检查约束
检查约束用于限制列中的值必须满足指定的条件,用于确保列中的数据满足特定的规范或约束条件。
默认约束
默认约束用于为列指定默认值,当插入新行时如果未指定该列的值,则自动使用默认值,用于确保某些列始终具有预定义的默认值。
范式和反范式化
规范化是一种用来产生具有符合要求的属性并能支持用户或公司的需求的表的集合的技术,用于基于关系模型的数据库设计,通过分解关系模式来消除其中不合适的数据依赖。
范式
范式是关系数据库设计中的一种规范化技术,通过分解不符合要求的关系模式,得到符合范式要求的更小的关系模式,以达到减少数据冗余、提高数据一致性和完整性的目的。范式以函数依赖为基础,包括第一范式、第二范式、第三范式和Boyce-Codd范式。在关系数据库中,第一范式为最基本要求,不满足第一范式条件的关系为非规范化关系。第二范式消除了非主属性对码的部分函数依赖,在一定程度上解决了数据冗余、插入异常和删除异常的问题。第三范式消除了非主属性对码的传递函数依赖,避免了冗余度大等问题。BCNF通常被认为增强型的第三范式,消除了主属性对码的部分和传递函数依赖,满足BCNF的关系模式在函数依赖范畴内实现了彻底的分离,即消除了插人异常和删除异常。
反范式化
数据库规范化的程度越高,数据冗余和操作异常越少,但同时分解得到的关系也随之增加,导致进行查询操作时通常涉及两个或多个关系模式的属性,即系统通常需要做过多的连接运算,降低了查询速度。为了提高查询效率,对于查询经常用的的数据需要降低范式标准,适当保留冗余,反范式化由此产生。反范式化通过在表中增加冗余或重复的数据来提高数据库的读取性能,其具体操作为在一个表中增加另一个表的冗余字段,即通过减少连接运算来提高查询效率。
关系模式的设计规则
避免数据冗余的设计原则
数据的冗余是指在数据库中存储了同一信息的多个副本,其可能引起冗余存储、更新异常、插入异常和删除异常等问题。一个好的关系模式应避免发生这些问题,即减少冗余。冗余存储:信息被重复存储。更新异常:当重复信息的一个副本被修改,所有的副本都必须进行同样的修改,否则就会造成不一致性。插入异常:只有当一些信息事先已经存储在数据库中时,另外一些信息才能存入到数据库中。删除异常:在删除某些信息时可能会丢失其他的信息。
关系模式应满足的基本要求
元组的每个分量必须是不可分的数据项。数据库中的数据冗余应尽可能的少。关系数据库不因数据更新操作引起数据不一致问题。执行数据插入操作时,数据库中的数据不会产生插入异常现象。执行数据删除操作时,数据库中的数据不会产生删除异常现象。
关系模式示例
下面是一个学生信息表的关系模式示例:
其中,“Students”为表名,包含四个列:StudentID、Name、age和Major。StudentID列被定义为主键,Name列具有唯一约束,Age列有一个检查约束限制年龄大于等于18岁。
关系代数与关系模式
关系实质上是一张二维表,关系模式为对该表的描述,关系代数操作则定义了如何对这些表进行操作。投影(Project):投影操作符用符号表示,投影操作的含义是从关系R中取出A指定的一列或多个列。即在给定的关系中按给定的属性及顺序组成一个新的关系。选择(Select):选择操作符用符号表示,选择操作的返回的结果关系中的元组是从关系R中选择出满足条件F 的元组。即在给定的关系中选择出满足条件的元组组成一个新的关系。并(Union):并操作符用符号表示,并操作表示将R与S合并为一个关系,并且去掉重复元组。差(Difference):差操作符用符号表示,差操作表示在R中去掉S中存在的元组。勒内·笛卡尔积(Cartesian Product):笛卡尔积操作符使用符号表示,其运算的结果是两个关系的元组的所有可能的连接。表示用R中的每个元组与S中每个元组相结合组成一个新的关系。新的关系度为R与S度之和,元组数为R与S元组数相乘积。连接:连接操作为从两个关系的笛卡尔积中选取属性满足一定条件的元组,常用的为条件连接和自然连接两种连接,条件连接用符号表示,自然连接则使用符号表示。
相关概念
关系数据库
关系型数据库是一种基于关系模型的数据库管理系统,它将数据存储在表中,表中的每一行都代表一个实体,而每一列代表实体的一个属性。
关系模型
关系模型是由若干个关系模式组成的集合,由数据结构、数据操作和完整性约束构成。其中数据结构为模型中所操作的对象、类型的集合;数据操作为对模型对象所允许执行的操作方式;完整性规则指保证数据有效、正确和相容的特定的语义约束条件。
关系
关系是关系模型中用于描述数据的主要结构。在关系数据库中,关系也是一张二维表,表的每行对应一个元组,每列对应一个域。
关系数据库模式
关系数据库的型也称为关系数据库模式,是对关系数据库的描述,其包括若干域的定义以及在这些域上定义的若干关系模式。
目录
概述
发展演变
基本语法
概述
关系模式的构成
约束
主键约束
外键约束
唯一约束
检查约束
默认约束
范式和反范式化
范式
反范式化
关系模式的设计规则
避免数据冗余的设计原则
关系模式应满足的基本要求
关系模式示例
关系代数与关系模式
相关概念
关系数据库
关系模型
关系
关系数据库模式
参考资料