关系数据库设计

一、基本概念

1关系模型

:和数学上的关系这个概念密切相关,关系数据库是表的集合。表中的一行代 表了一系列值之间的联系。

属性:表的列首被称为属性。

:属性所允许的值。

数学上的描述

关系:可以代替“表”这个概念的数学名词。关系是元组的集合。

元组:可以代替“行”这个概念的数学名词。

元组变量:代表元组的变量,以所有元组集为域的变量。

原子的域:域的元素被看做是不可再分的单元。

超码:一个或多个属性的集合。这些属性的组合可以在一个关系中唯一标识一个元组。

候选码:最小的超码,它的任意真子集都不能构成超码。

主码:被数据库设计者选中的,用来在同一个关系中区分不同元组的候选码。

外码:一个关系模式r1的某个属性是另一个关系模式r2的主码,这个属性被称为外码。

参照关系:称r1为外码依赖的参照关系。

被参照关系:称r2为外码的被参照关系。

数据库模式:数据库的逻辑设计。

数据库实例:给定时刻数据库中数据的一个快照。

与程序设计语言类比

关系模式:相当于程序设计语言中类型定义的概念。其与关系的区别在于,关系相当于程序设计语言中变量的概念。

关系实例:对应于程序设计语言中变量的值得概念

2 实体-联系模型(E-R模型)

实体-联系模型(E-R数据模型):基于对现实世界的这样一种认识,世界由一组称为实体的基本对象及这些对象间的联系组成。E-R模型的三个基本概念:实体集,联系集,属性。

实体:现实世界中可区别于其他对象的“事件”或“物体”。

实体集:具有相同类型及共享相同性质的实体集合。

  实体集有可能相交。

  数据库包括一组实体集,每个实体集中包括一些相同类型的实体。

  实体集可能有多个属性。

  实体集中的实体可以用一个(属性,数据值)对的集合来表示。

实体集的外延:组成实体集的各实体。

属性:实体集中每个成员具有的描述性性质。。

属性的域(属性的值集):属性都有一个值,属性的可取值的集合为属性的域。

简单属性:不能划分为更小的部分的属性。

复合属性:可再划分为更小的部分的属性。

单值属性:对特定实体都只有单独的一个值的属性。

多值属性:可能对应一组值的属性。

派生属性:可以从其他的相关属性或实体派生出来的属性。派生的属性不存储,可在需要时计算出来。

基属性(存储的属性):被派生的属性。

联系:多个实体间的相互关联。

联系集:同类型联系的集合。

参与:实体集之间的关联称为参与。

联系实例:表示所模拟的现实世界的命名实体间的一个关联。

实体的角色:实体在联系中的作用。

联系集的度:参与联系集的实体集的数目。

映射基数(基数比例):通过一个联系集能同时与另一个实体相联系的实体数目。

对实体集A与B之间的二元联系集,其映射基数为:

一对一:A中的一个实体至多同B中的一个实体相联系,B中的一个实体也至多同A中的一个实体相联系。

一对多:A中的一个实体可以同B中的任意数目的实体相联系,而B中的一个实体至多同A中的一个实体相联系。

多对一:A中的一个实体至多同B中的一个实体相联系,而B中的一个实体可以和A中的任意数目的实体相联系。

多对多:A中的一个实体可以同B中的任意数目的实体相联系,B中的一个实体也可以同A中的任意数目的实体相联系。

实体集E全部参与联系集R:实体集E中的每个实体都参与到联系集R的至少一个联系中。

实体集E部分参与联系集R:实体集E中只有部分实体参与到联系集R中。

:用以区别实体和联系,并惟一地标识联系。

超码:一个或多个属性的集合,这些属性的组合可以使我们在一个实体集中惟一地标识一个实体。

候选码:最小的超码,其任意真子集都不能成为超码。

主码:用来在同一实体集中区分不同实体的候选码。

  应该选择那些从不或极少变化的属性作为主码。

  联系的主码结构依赖于联系集映射基数。一对一的联系中,可使用两个主码中的任何一个作为联系的主码。多对多的联系中,联系的主码由两个主码共同构成。一对多的联系中,联系的主码由其中之一决定。

弱实体集:属性不足以形成主码的实体集被称为弱实体集。

强实体集:有主码的实体集。

标识实体集(属主实体集):弱实体集所依赖的强实体集。

标识性联系:将弱实体集与其标识实体集相联系的联系集。标识性联系是从若实体集到标识实体集的多对一联系,且弱实体集全部参与联系。

分辨符:能够区分若弱实体的属性集合。

特殊化:在实体内部分组的过程。

一般化:高层实体集与一个或多个低层实体集间的包含关系。

超类:即高层实体集。

子类:即低层实体集。

属性继承:由特殊化和一般化所产生的高层实体和低层实体的一个重要特性,高层实体集会被低层实体集继承。

二、规范化原则

第一范式

  如果一个关系模式R的所有属性域都是原子的,称关系模式R属于第一范式。更一般地表达方式为,所有属性都是简单属性,这样的实体集符合第一范式。

第二范式

  如果实体集符合第一范式,并且非主码完全依赖于主码,这样的实体集符合第二范式。

第三范式

  如果实体集符合第二范式,并且其非主码均不依赖于其他任何非主码,这样的实体集符合第三范式。

 

三、设计过程(非关系型数据库可用)

第一阶段,需求分析。和领域专家、数据库用户广泛交流,获得较详细的规格说明,最终提交的产品为用户需求规格说明

第二阶段,概念设计。选择数据模型,将需求转换为数据库的概念模式。

  若为关系型数据库设计,那么必定选择关系模型,最终提交的产品为实体-联系图和功能需求规格说明。本阶段的具体工作就是:定义数据库中表示实体,实体属性,实体之间的联系和实体上的限制;描述在数据上进行的各类操作(增删改查)或事物。

获得E-R模型后使用上面介绍的范式进行检验和优化。

第三阶段,逻辑设计。将概念模式映射为将被使用的数据库系统的实现数据模型。

  若为关系数据库设计,要实现数据模型就是关系数据模型,通常将E-R模型定义的概念模式映射为关系模式,所以最终提交的产品为关系模式

获得关系模式后,使用上面介绍的范式对模式检验和优化。

第四阶段,物理设计。定义数据库的物理特征,完成设计。

 

四、设计过程详解

1概念设计要点

1)应该选择实体还是属性?

实体和属性的概念并不是非常精确的,其区别取决于被建模的现实中的事物的特征或结构。

一般的原则是,根据被建模的现实事物的特征,要使用属性前先要判断此属性是否可以再次分割,即此属性是否有包含了其他一些“属性”,这些属性能够更精确地描述它,这个时候应该使用实体而不是属性。

2)一个实体集的主码可以作为另一个实体集的属性吗?

一般来讲,在建模的过程中,将一个实体集属性作为另一个实体集的属性是不合适的,最明显的缺点就是造成数据的重复存储,况且将一个实体集的主码作为另一个实体集的属性更不恰当,因为,如果在建模的过程中,发现两个实体似乎有着共同的属性,那么这两个实体之间必然存在联系,这时应抽象出两个实体集的联系,将他们的关系用联系明确的表达出来,而不是将关系隐藏起来。

3)可以将相关实体集的主码属性作为联系集的属性吗?

由于联系集中隐含了相关实体集的主码属性,所以不要将相关实体集的主码属性作为联系集的属性。这样做常常是由于概念不清导致的。

4)是否可以将两个实体集的联系集也设计为实体集?

具体情况具体分析。

若相关实体集与联系集都是一对一的关系,那么用联系集比较好。此外,描述实体间的行为时用联系比较好。

若不上述假设不成立,那么应考虑将两个实体集的联系集设计为实体集。

5)避免使用四元或高于四元的联系集

一些看起来非二元联系集通常可以转换为多个二元联系集,但将有些高元联系生硬地转换成多个二元也是不恰当的。

6)尽可能将两个实体集间的多对多的联系转换为一对一或一对多的联系

7)联系属性的布局

将描述性属性放到联系集还是实体集取决于业务特点。

一对一的联系集,联系的属性可以放到任一参与联系的实体中。

一对多的联系集,联系的属性仅能放到参与联系的“多”的那边的实体集中。

多对多的联系集,联系的属性一般放在联系集中

8)应该选择那些从不或极少变化的属性作为主码

9)弱实体集与多值属性

如果弱实体集只参与标识性联系,并且属性不多,可以将弱实体集表示为属主实体集的一个复合属性。

10)特殊化还是一般化

采用的特化是为了表达实体集所包含的子集之间的差异,突出强调子集的特征,以满足业务的需要。

采用一般化的原因是凸显实体集间的相似性隐藏他们之间的差异,以满足业务的需要。

11)使用聚集

E-R模型无法表达联系间的联系。聚集表达了更复杂的关系。当需要表达联系间的联系或联系与实体间的联系时使用聚集。

2逻辑设计要点

逻辑设计就是要将ER模型转换为关系模式

1)由强实体集导出的关系模式

强实体集的主码就是生成的关系模式的主码。强实体集的描述属性就是关系模式的属性。

2)由弱实体集导出的关系模式

有弱实体集A和强实体集B,A依赖于B。

由弱实体集A导出的关系模式的主码由B的主码和A的分辨符组合而成。

在关系A上指明外码约束,

3)由联系集导出的关系模式

有联系集R,参与R的所有实体集的主码的并集为C,由并集构成的属性集合P={p1,p2,p3,......}

R的描述性属性为D ={d1,d2,d3,......}

联系集导出的关系模式的属性对应于P与D的并集中的各个属性。

关系的主码的确定规则为:

一对一的二元联系集,关系模式的主码是是参与联系的实体集中任意一个的主码。

多对一的二元联系集,关系模式的主码是联系集中“多”的一方的实体集的主码。

多对多的二元联系集,关系模式的主码是参与联系的实体集的主码的并集。

4)模式冗余

一般地,参与联系的实体中,包含了弱实体集及其依赖的强实体集,那么由此联系集导出的关系模式极可能是冗余的。

5)关系模式的合并

一对一的联系,联系集的关系模式可以和参与联系的任一实体集的关系模式合并。

部分参与到联系中的情形,可以通过使用空值进行模式合并。

合并之后的模式的外码约束要做相应的调整。

6)复合属性与多值属性

复合属性的处理方式:为每个子属性创建单独的属性。

多值属性的处理方式:为多值属性M创建关系模式R。

R具有的属性包括:对应M的属性A,以及M所在的实体集的主码。

R的主码由模式中所有属性构成。

7)一般化

为高层实体集创建一个模式,为此高层实体集的每个低层实体集创建一个模式,模式中的属性包括对应于低层实体集的每个属性和对应于高层实体集的主码的每个属性。高层实体集的主码属性也是低层实体集的主码属性。

也可以不为高层实体集创建模式,只为每个低层实体集创建模式,这样低层实体集的属性为对应的低层实体集的属性以及对应的高层实体集的属性。

8)由聚集导出的关系模式

表示聚集不需要单独导出关系模式,聚集关系模式是定义该聚集的联系集的关系模式。

9)聚集与实体集间的联系导出的关系模式

这种联系导出的关系模式,属性包括对应实体集的主码中的每个属性、联系集主码中的每个属性、联系集(聚集与实体集间的联系集)的描述性属性。

五、设计实例

下面仅对部分关键建模问题加以分析。

应用背景描述:

提供在线文献阅读和下载的网站,有普通的用户和网站的管理员,如果平台对外开放API服务,那么还有开发者,即授权调用API的用户。

文献按种类可分为:期刊,会议,报纸,博士硕士论文,图书等。

若将文献按行业分类为:建筑建材,水利水电,石油化工,信息产业等。

若将每个行业细分,比如:电讯、电话、印刷、出版、新闻、广播等。

为方便用户阅读,所以还要提供导航,导航类似于将每个行业细分的结果。

系统将用户的行为呈现给用户,例如下载量,阅读量,浏览历史。

可以订阅喜欢的刊物,实时跟踪最新文章动态。

用户可以自定义主题,按照自定义主题检索相关文献。系统也会提供默认的主题。

用户可以收藏喜欢的文章,还可以下载文献。

根据上述描述获得实体:

普通用户(读者),用户所属的机构,网站管理员,API开发者,文献,行业,导航,主题,统计信息。

E-R建模分析与导出关系模式:

可以将用户的账号作为主码,但在实际使用过程中,却常使用自增的Id作为主码,称为UserId,虽然自增的Id不是构成实体所必须的,原因是自增Id是整型而账号一般为字符串,且一般关系数据库默认建立索引,整型上的索引有一定的优势。

统计信息只与普通用户有联系,可以将统计信息和普通用户合并为一个实体,即统计信息成为复合属性,但这是不好的设计。虽然这样可以减少实体数量,但是普通用户的基本信息,例如账号,密码,邮箱等是不经常变化的。而统计信息是随着用户的行为经常变化的。所以这里用实体而不用属性。这里没有将弱实体集转换为强实体集的复合属性。

统计信息构成弱实体集,它依赖强实体集,即由所有普通用户构成的实体集。弱实体集分辨符取自增Id,称为StaticId。导出关系模式的主码是分辨符即StaticId与用户UserId

收藏是用户的一种行为,一个用户可以收藏多篇文章,一篇文章也可被多个用户收藏,他们是多对多的关系。通过收藏这种行为用户和文献建立起了关系。

收藏时间是关系的描述性属性,由于是多对多的关系,所以收藏时间应该放在联系集中。导出的关系模式的主码为用户实体集与文章实体集的主码的并集。

导航和用户之间的关系也是多对多的。客户端页面的导航要有一个显示顺序,而且是可以调整的。那么导航顺序这个属性也应该放在联系集中。

平台的用户包括普通的用户和API使用者,他们都是用户,有共性又有差别。根据API接口的访问权限可以对使用API的用户细分,例如:超级用户可以调用涉及修改操作的API接口,而一般用户只能调用涉及查询操作的API接口,但这种细分不构成一般化与特殊化的概念。这里并未采用为高层实体创建模式的方式实现一般化的过程。而是为每个低层实体创建一个模式。

 

参考书目:

数据库系统概念 (原书第5版)

作者:(美)Abraham Silberschatz/(美)Henry F.Korth/(美)S.Sudarshan

出版社: 机械工业出版社
译者: 杨冬青/马秀莉/唐世渭

 

原文地址:https://www.cnblogs.com/hdwgxz/p/8409063.html

时间: 2024-10-31 13:13:26

关系数据库设计的相关文章

关系数据库设计理论

关系数据库设计理论 函数依赖 记 A->B 表示 A 函数决定 B,也可以说 B 函数依赖于 A. 如果 {A1,A2,... ,An} 是关系的一个或多个属性的集合,该集合函数决定了关系的其它所有属性并且是最小的,那么该集合就称为键码. 对于 A->B,如果能找到 A 的真子集 A',使得 A'-> B,那么 A->B 就是部分函数依赖,否则就是完全函数依赖. 对于 A->B,B->C,则 A->C 是一个传递函数依赖. 异常 以下的学生课程关系的函数依赖为 {

关系数据库设计三大范式【转】

原文:http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 在实际开发中最为常见的设计范式有三个: 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第

数据库设计 Step by Step (1)——扬帆启航

引言:一直在从事数据库开发和设计工作,也看了一些书籍,算是略有心得.很久之前就想针 对关系数据库设计进行整理.总结,但因为种种原因迟迟没有动手,主要还是惰性使然.今天也算是痛下决心开始这项卓绝又令我兴奋的工作.这将是一个系列的文 章,我将以讲座式的口吻展开讨论(个人偷懒,这里的总结直接拿去公司培训新人用). 系列的第一讲我们先来回答下面几个问题 数据库是大楼的根基 大多数程序员都很急切,在了解基本需求之后希望很快的进入到编码阶段(可能只有产出代码才能反映工作量),对于数据库设计思考得比较少. 这

规范化-数据库设计原则

关系数据库设计的核心问题是关系模型的设计.本文将结合具体的实例,介绍数据库设计规范化的流程. 摘要 关系型数据库是当前广泛应用的数据库类型,关系数据库设计是对数据进行组织化和结构化的过程,核心问题是关系模型的设计.对于数据库规模较小的情况,我们可以比较轻松的处理数据库中的表结构.然而,随着项目规模的不断增长,相应的数据库也变得更加复杂,关系模型表结构更为庞杂,这时我们往往会发现我们写出来的SQL语句的是很笨拙并且效率低下的.更糟糕的是,由于表结构定义的不合理,会导致在更新数据时造成数据的不完整.

数据库设计准则(第一、第二、第三范式说明)

数据库设计准则(第一.第二.第三范式说明) I.关系数据库设计范式介绍 1.1 第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性.如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系.在第一范式(1NF)中表的每一行只包含一个实例的信息.简而言之,第一范式就是无重复的列. 说明:在任何一个关系数据库中,第一范式(1NF)是对

数据库设计中的四个范式

在创建一个数据库的过程中,必须依照一定的准则,这些准则被称为范式,从第一到第六共六个范式,一般数据库设计只要遵循第一范式,第二范式,和第三范式就足够了.满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息. I.关系数据库设计范式介绍 1.1 第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割

数据库设计中的四个范式(转)

http://blog.sina.com.cn/s/blog_4f925fc30102e9ze.html 在创建一个数据库的过程中,必须依照一定的准则,这些准则被称为范式,从第一到第六共六个范式,一般数据库设计只要遵循第一范式,第二范式,和第三范式就足够了.满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息. I.关系数据库

数据库设计三范式理解

数据库设计的第三范式 关系数据库中的关系必须满足一定的要求.满足不同程度要求的为不同范式.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出高效率.优雅的数据库,否则可能会设计出错误的数据库. 目前,主要有六种范式:第一范式.第二范式.第三范式.BC范式.第四范式和第五范式.满足最低要求的叫第一范式,简称1NF.在第一范式基础上进一步满足一些要求的为第二范式,简称2NF.其余依此类推. 范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦,但是操作困难

数据库系统原理(第三章数据库设计 )

一.数据库设计概述 数据库的生命周期  数据库设计的目标: 满足应用功能需求(存.取.删.改), 良好的数 据库性能(数据的高效率存取和空间的节省 共享性.完整性.一致性.安全保密性) 数据库设计的内容  数据库设计的方法 直观设计法( 最原始的数据库设计方法) 规范设计法:(新奥尔良设计方法:需求分析.概念结构设计.逻辑结构设计.物理结构设计 : 基于E-R模型的数据库设计方法 :基于第三范式的设计方法,是一类结构化设计方法) 计算机辅助设计法( 辅助软件工程工具) 数据库设计的过程 二.数据