关系数据库模型设计「建议收藏」

关系数据库模型设计「建议收藏」本文从现实世界-概念世界(信息世界)-机器世界(数据世界)逐级抽象,旨在以浅显易懂的语言描述关系数据库应该如何建模,最后用简单名了的描述给出关系模型的设计范式的含义。

大家好,又见面了,我是你们的朋友全栈君。

目录

 

三个世界的划分

1.现实世界

2.概念世界(信息世界)

3.机器世界(数据世界)

模型

一、概念模型(信息世界)

(一)E-R图的三要素

(二)E-R图的设计方法

(三)E-R模型到关系模型的转换

(四)小结

二、数据模型(数据世界)

(一)层次模型

(二)网状模型

(三)关系模型


三个世界的划分

人们把客观存在的事物以数据的形式存储到计算机中,经历了对现实生活中事物特性的认识、概念化到计算机数据库里的具体表示的逐级抽象过程,即现实世界-概念世界-机器世界三个领域。有时也将概念世界称为信息世界;将机器世界称为存储或数据世界。

 

1.现实世界

人们管理的对象存于现实世界中。现实世界的事物及事物之间存在着联系,这种联系是客观存在的,是由事物本身的性质决定的。例如学校的教学系统中有教师、学生、课程,教师为学生授课,学生选修课程并取得成绩。

 

2.概念世界(信息世界)

概念世界是现实世界在人们头脑中的反映,是对客观事物及其联系的一种抽象描述,从而产生概念模型。概念模型是现实世界到机器世界必然经过的中间层次。涉及到下面几个术语:
实体:我们把客观存在并且可以相互区别的事物称为实体。实体可以是实际事物,也可以是抽象事件。如一个职工、一场比赛等。
实体集:同一类实体的集合称为实体集。如全体职工。注意区分”型”与”值”的概念。如每个职工是职工实体”型”的一个具体”值。
属性:描述实体的特性称为属性。如职工的职工号,姓名,性别,出生日期,职称等。
联系:实体集之间的对应关系称为联系,它反映现实世界事物之间的相互关联。联系分为两种,一种是实体内部各属性之间的联系。另一种是实体之间的联系。

 

3.机器世界(数据世界)

存入计算机系统里的数据是将概念世界中的事物数据化的结果。为了准确地反映事物本身及事物之间的各种联系,数据库中的数据必须有一定的结构,这种结构用数据模型来表示。数据模型将概念世界中的实体,及实体间的联系进一步抽象成便于计算机处理的方式。三个世界中的术语对照关系如下:

关系数据库模型设计「建议收藏」

 

模型

模型就是对不能直接观察的事物进行形象的描述和模拟。即模型是对现实世界中复杂事物的抽象描述。

模型分为信息世界的概念模型和数据世界的数据模型:

概念模型:把现实世界转换为信息世界的模型,例如E-R模型。

数据模型:把信息世界转化为数据世界的模型,例如关系模型。

 

一、概念模型(信息世界)

实体联系模型,亦称实体关系模型,它是由美籍华裔计算机科学家陈品山(Peter Chen)发明,该模型直接从现实世界中抽象出实体类型和实体间联系,然后用实体联系图(E-R图)表示数据模型,是描述概念世界,建立概念模型的实用工具。所以,在信息世界中使用E-R图建立的数据模型称为E-R模型。

实体关系模型是现实世界到概念世界的第一层抽象,是数据库设计人员进行数据库设计的有利的数据建模工具,也是数据库设计人员和用户之间进行交流的语言。

 

(一)E-R图的三要素

实体(Entity):在E-R图中用矩形表示,矩形框内标注实体名称。实体表示一个离散对象。实体可以被(粗略地)认为是名词,如计算机、雇员、歌曲、数学定理等。

属性(Attribute):在E-R图中用椭圆形表示,并用无向连线将其与相应的实体连接起来,同时在无向连线旁标上联系的类型(1 : 1,1 : n或m : n)。属性描述实体的特性(特征性质),例如学生的姓名、学号、性别、都是属性。

 

联系(Relationship):在E-R图中用菱形框表示,框内标注联系名称,并用连线将菱形框分别与有关实体相连,并在连线上注明联系类型。联系可以被(粗略地)认为是动词,如:在公司和计算机之间的拥有关联,在雇员和部门之间的管理关联,在演员和歌曲之间的表演关联,在数学家和定理之间的证明关联等等。联系有三种类型:

① 一对一联系(1:1)
设A、B为两个实体集。若A中的每个实体至多和B中的一个实体有联系,反过来,B中的每个实体至多和A中的一个实体有联系,称A对B或B对A是1:1联系。注意,1:1联系不一定都是一一对应的关系。可能存在着无对应。例如,一个部门有一个经理,而每个经理只在一个部门任职,则部门与经理的联系是一对一的,但经理也可能暂缺。

② 一对多联系(1:n)
如果A实体集中的每个实体可以和B中的几个实体有联系,而B中的每个实体至少和A中的一个实体有联系,那么A对B属于1:n联系。例如,一个部门有多名职工,而一名职工只在一个部门就职,则部门与职工的联系是一对多的。

③ 多对多联系(m:n)
若实体集A中的每个实体可与和B中的多个实体有联系,反过来,B中的每个实体也可以与A中的多个实体有联系,称A对B或B对A是m:n联系。例如,一个学生可以选修多门课程,一门课程由多个学生选修,学生和课程间的联系是多对多的。
 

(二)E-R图的设计方法

E-R图通常都应经过以下两个阶段:

(1)针对每一用户画出该用户信息的局部E-R图,确定该用户视图的实体、属性和联系。需注意的是:能作为属性的就不要作为实体,这有利于E-R图的简化。

 

(2)综合局部E-R图,生成总体E-R图。在综合过程中,同名实体只能出现一次,还要去掉不必要的联系,以便消除冗余。一般来说,从总体E-R图必须能导出原来的所有局部视图,包括实体、属性和联系。

 

案例:工厂(包括厂名和厂长名)需要建立一个数据库系统,有以下情况:

 

1、该工厂生产若干产品,每种产品由不同的零件组成

2、有的零件可以用在不同的产品,这些零件由不同的原材料组成,不同的零件所用的原材料可以相同。

3、零件按照所属的不同产品分别放在仓库中,原材料按照类别分别放在若干仓库中。

 

相关性质如下:

工厂:长号,长名,长址,厂长名

车间:车间号,车间名,电话

产品:产品名,品种号,性能

零件:零件号,零件名,生产日期

原材料:材料号,产地,等级

仓库:库号,电话

 

(三)E-R模型到关系模型的转换

把E-R图转换为关系模型可遵循如下原则:

(1)对于E—R图中每个实体集,都应转换为一个关系,该关系应包括对应实体的全部属性,并应根据关系所表达的语义确定哪个属性或哪几个属性组作为“主关键字”,主关键字用来标识实体。

 

(2)对于E—R图中的联系,情况比较复杂,要根据实体联系方式的不同,采取不同的手段加以实现。下面着重讨论联系的转换方法。

A、两实体集间1:n联系

两实体集间1:n联系,可将“一方”实体的主关键字纳入“n方”实体集对应的关系中作为“外部关键字”,同时把联系的属性也一并纳入“n方”对应的关系中。

 

B、两实体集间m:n联系

对于两实体集间m:n联系,必须对“联系”单独建立一个关系,用来联系双方实体集。该关系的属性中至少要包括被它所联系的双方实体集的“主关键字”,并且如果联系有属性,也要归入这个关系中。

 

C、两实体集间的1:1的联系

假设A实体集与B实体集是1:1的联系,联系的转换有三种方法:

①把A实体集的主关键字加入到B实体集对应的关系中,如果联系有属性也一并加入;

②把B实体集的主关键字加入到A实体集对应的关系中,如果联系有属性也一并加入;

③建立第三个关系,关系中包含两个实体集的主关键字,如果联系有属性也一并加入。

 

(四)小结

(1)把现实世界转换成为计算机能够处理的数据世界,需经过两个阶段:

         第一个阶段需使用概念模型把现实世界抽象成信息世界,最常用的概念模型是E-R模型,E-R模型的三个基本要素是实体、

         属性和联系。

         第二阶段是使用数据模型把信息世界转换为数据世界,最常用的数据模型是关系模型。

 

(2)设计E-R图一般经过两个步骤,

        第一步是抽象出各相关对象的局部E-R图,

        第二步是把局部E-R图组合成全局E-R图。E-R图只是信息的一种抽象表示,还需把它转化成相应的实施数据模型才能转化为

        数据库中的数据。把E-R图转化为关系模型,不但要把实体转化成关系,而且在关系中还应反映出E-R图中各实体集之间的

        联系。

 

3E-R数据模型作为语义数据模型,是软件工程和数据库设计的有力工具,综合E-R数据模型的特点如下:
      (1) 有丰富的语义表达能力,能充分反映现实世界,包括实体和实体间的联系,能满足用户对数据对象的处理要求。
      (2) 易于交流和理解,因为它不依赖于计算机系统和具体的DBMS,所以,它是DBA、系统开发人员和用户之间的桥梁。
      (3) 易于修改和扩充。
      (4) 易于向其他各种数据模型(层次,网状,关系模型)转换。
      (5) 实体、属性和联系这三个概念是有明确区分的,但对于某个具体的数据对象,究竟是作为实体,还是作为属性或联系,

              则是相对的。这取决于应用背景和用户的观点。

 

二、数据模型(数据世界)

在用计算机处理信息世界的信息时,必须抽取局部范围的主要特征,模拟和抽象出一个能反映信息世界中实体和实体之间联系的模型,即数据模型。也就是说,数据模型是抽象描述信息世界的一种工具和方法,是概念模型在数据世界中的表示形式。

数据模型的三要素:模型结构、数据操作、完整性规则。

数据模型模型结构分为:层次模型、网状模型、关系模型、面向对象模型。

 

(一)层次模型

在现实世界中,许多实体集之间的联系就是一个自然的层次关系。例如,行政机构、家族关系等都是层次关系。下图就是学校中系的层次模型。

关系数据库模型设计「建议收藏」

层次模型是最早用于商品数据库管理系统的数据模型。其典型代表是于1969问世、由IBM公司开发的数据库管理系统

IMS(Information Management System)。

(1) 层次模型的定义:用树形结构表示实体之间联系的模型叫层次模型。

(2)层次模型的表示方法:树的结点表示记录(实体),每个记录可包含若干个字段(实体的属性),结点之间的连线表示相连两记录(实体)之间的关系,这种关系只能是“1-M”的。通常把表示1的实体集放在上方,称为父结点,表示M的实体集放在下方,称为子结点。

(3)层次模型的特点:①有且仅有一个根结点。②根结点以外的其它结点有且仅有一个父结点。

在层次模型中,记录的组织不再是一张杂乱无章的图,而是一棵树。例如,系记录型有:计算机系、电信系等记录值。而计算机系的下层记录值有软件、结构、应用等研究室和数据结构、操作系统、数据库等课程,软件研究室下层又有员工和项目记录值,如下图所示:

关系数据库模型设计「建议收藏」

根据层次模型的特点可知,层次模型只能表示“1-M”关系,而不能直接表示“M-M”关系。因此对于层次模型中实体集之间多对多的联系的处理,解决的方法是引入冗余结点。例如,学生和课程之间的多对多的联系,引入学生和课程的冗余结点,即转换为两棵树:一棵树的根是学生,子结点是课程,它表现了一个学生可以选多门课程;一棵树的根是课程,子结点是学生,它反映了一门课程可以被多个学生选。至于冗余结点可以用虚拟结点实现:在冗余结点处仅存放一个指针,指向实际结点。

 

(4)层次模型的优点

① 层次数据库模型比较简单。

② 层次模型对具有一对多的层次关系(例如部门和职员的关系)的描述非常自然、直观,容易理解。

③ 层次数据库模型提供了良好的完整性支持。

 

(5)层次模型的缺点

① 在现实世界中有很多的非层次性的联系,如多对多的联系,一个结点具有多个父结点等,层次模型表示这类联系的方法

很笨拙。

② 难以实现系统扩充,对于插入和删除操作时,限制比较多,涉及到大量链接指针的调整。

③ 查询子结点必须经过父结点。

④ 由于结构严密,层次命令趋于程序化。

 

(二)网状模型

在现实世界中,事物之间的联系更多的是非层次关系的,用层次模型表示非树型结构是很不直接的,网状模型则可以克服这一弊病。层次模型中的记录只能组织成树的集合而不能是任意图的集合,而网状模型则可以。

(1) 网状模型的定义:用网状结构表示实体之间联系的模型叫网状模型。

(2) 网状模型的表示方法:网的结点表示记录(实体),每个记录可包含若干个字段(实体的属性),结点之间的连线表示相连两记录(实体)之间的关系,这种关系可以是“1-M”的,也可以是“M-M”的。

(3) 网状模型的特点:①允许一个以上的结点无父亲结点。②一个结点可以有多于一个的父亲结点。

网状模型是一种比层次模型更具普遍性的结构,它去掉了层次模型的两个限制,允许多个结点没有父亲结点,允许结点有多个父亲结点,此外它还允许两个结点之间有多种联系。因此网状模型可以更直接地去描述现实世界,而层次模型实际上是网状模型的一个特例。网状模型示例如下:

关系数据库模型设计「建议收藏」

 

(4) 网状数据模型的优点

①能够更为直接地描述现实世界,如一个结点可以有多个父亲节点。

②具有良好的性能,存取效率较高。

 

(5) 网状数据模型的缺点

①结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握。

②难以实现系统扩充,对于插入和删除操作时,限制比较多,涉及到大量链接指针的调整。

③其DDL,DML语言复杂,用户不容易使用。由于记录之间联系是通过存取路径实现的,应用程序在访问数据时必须选择

适当的存取路径,因此,用户必须了解系统结构的细节,加重了编写应用程序的负担。

 

(三)关系模型

 

(1) 关系模型的定义:用二维表格数据来表示实体及实体之间联系的模型叫关系模型。

(2) 关系模型的特点:

① 每个表有多个列,每一列中的字段(属性)唯一且是类型相同的数据;

② 列的顺序可以是任意的;

③ 行的顺序可以是任意的;

④ 表中的字段(属性)是不可再分割的最小数据项,即表中不允许有子表;

⑤ 表中的任意两行不能完全相同。

在关系模型中,无论是从客观事物中抽象出的实体,还是实体之间的联系,都用单一的结构类型—关系(表)来表示。在对关系进行各种处理之后,得到的还是关系—一张新的二维表。如图所示:

关系数据库模型设计「建议收藏」

关系数据库采用关系模型作为数据的组织方式。关系数据库因其严格的数学理论、使用简单灵活、数据独立性强等特点,而被公认为最有前途的一种数据库管理系统。它的发展十分迅速,目前已成为占据主导地位的数据库管理系统。自20世纪80

年代以来,作为商品推出的数据库管理系统几乎都是关系型的,例如,Oracle,Sybase,Informix,Visual FoxPro,Mysql,Sqlserver等。

 

(3) 关系模型的设计范式

只有满足一定条件的关系模式,才能避免操作(例如插入、删除、修改)异常和数据异常(例如数据冗余),关系模式要满足的条件称为规范化形式,简称范式。 

 

① 第一范式(1NF)

第一范式是对表属性的原子性约束,要求属性具有原子性,不可再分解成其它属性;其目的是消除重复字段(列)。

 

②  第二范式(2NF)

第二范式是对表记录的惟一性约束,要求记录有惟一标识,能唯一地区分其它记录;其目的是消除重复记录(行)。

 

③ 第三范式(3NF)

第三范式是对表字段冗余性的约束,要求字段没有冗余,任何字段都不能由其他字段派生出来;其目的是消除字段冗余。

 

④  第四范式(4NF)

第四范式是对表记录冗余性的约束,要求记录没有冗余,同一表不存在一对多或多对多关系;其目的是消除记录冗余。

 

⑤  第五范式(5NF)

第五范式是将表分割成尽可能小的块,目的是消除表中所有的冗余。

 

在设计关系数据库表的时候,你应该总是要遵循这五大范式。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160195.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 12306站点及车次信息「建议收藏」

    12306站点及车次信息「建议收藏」仅供学习交流,勿非法使用一、获取全国所有车站信息直接查询12306:https://kyfw.12306.cn/otn/czxx/init本来想用selenium自动化获取页面元素得到车站信息,结果直接F12在network中找到了车站信息,而且没有加密。再用python处理一下,直接省事不少。利用百度地图API,可以得到详细的地理位置及经纬度,再写入EXCEL表https://api.map.baidu.com/place/v2/search?query=”+<车站名称>

  • clion2021.12.13激活(注册激活)

    (clion2021.12.13激活)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • docker 镜像构建_docker生成镜像

    docker 镜像构建_docker生成镜像前言如果我们已经安装了一个python3的环境,如果另一台机器也需要安装同样的环境又要敲一遍,很麻烦,这里可以配置Dockerfile文件,让其自动安装,类似shell脚本Dockerfile编写

  • i386 i586 i686 的意思「建议收藏」

    i386 i586 i686 的意思「建议收藏」代表intel系列的cpu386几乎适用于所有的x86平台,不论是旧的pentum或者是新的pentum-IV与K7系列的CPU等等,都可以正常的工作!那个i指的是Intel兼容的CPU的意思,至于386不用说,就是CPU的等级啦!i586就是586等级的计算机,那是哪些呢?包括pentum第一代MMXCPU,AMD的K5,K

  • aircrack和reaver破解路由器PIN码

    aircrack和reaver破解路由器PIN码使用aircrack,寻找附近开启wps的路由器,邪恶……嘻嘻airmon-ng start wlan0airodump-ng mon0CH 11 ][ Elapsed: 36 s ][ 2012-12-18 04:46                                          BSSID              PWR  Beacons    #Data

  • c/c++ 学习-open 函数

    c/c++ 学习-open 函数转自:http://blog.csdn.net/dong_007_007/article/details/16269021open函数用于打开和创建文件。以下是open函数的简单描述      #include       intopen(constchar*pathname,intoflag,…/*mode_tmode*/);   

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号