物理数据库设计 –chap10将ER模型映射为表
《物理数据库设计 –chap10将ER模型映射为表》由会员分享,可在线阅读,更多相关《物理数据库设计 –chap10将ER模型映射为表(57页珍藏版)》请在装配图网上搜索。
1、,,,,,,,Click to edit Master title style,,Click to edit Master text styles,,Second level,,Third level,,Fourth level,,Fifth level,,*,*,*,Chapter 10,逻辑数据库设计,,–,步骤,2,,将,ER,模型映射为表,,1,Chapter 10,–,,目标,如何将,ER,模型映射为表集合,,,如何使用规范化方法检查表结构,,如何检查所建的表是否支持用户需要的事务,,,如何定义和存档完整性约束,,2,,步骤,2,将,ER,模型映射为表,,根据,ER,模型创建表,并检
2、查这些表的结构。,,步骤,2.1,创建表,,步骤,2.2,用规范化方法检查表结构,,步骤,2.3,检查表是否支持用户事务,,步骤,2.4,检查业务规则,,步骤,2.5,与用户讨论逻辑数据库设计,3,,步骤,2.1,创建表,为,ER,模型创建表,表达实体、关系、属性和约束,,,每个表的结构来源于,ER,所描述的信息,这些信息包括,ER,图、数据字典和任何其他相关的文档,,,格式:,,表名称(属性,1,,属性,2,,,…,),,主键,,备用键,,外键(包括被引用主键的表),,4,,StayHome,ER,模型,5,,如何表达实体,对,ER,模型中的每个实体,创建一个包含实体的所有简单属性的表。,,
3、对复合属性,仅包含表中组成复合属性的简单属性。,,如果可能,标识每个表中组成主键的列。,,,在某些情况下,还不能标识出组成表的所有列,原因是还要描述实体间的关系。这意味着在,ER,模型中没有表达出关系之前,不能标识出组成弱实体的主键的列。,,6,,实体的初始表结构,7,,如何表达关系,用主键,/,外键机制表达,,,为了决定将外键属性放在那里,首先必须标识关系中包含的“父”实体和“子”实体,,,父实体指的是把自己的主键拷贝到代表子实体的表中作为外键的实体,,关系从父实体贡献外键到子实体,8,,如何表达关系,考虑如何标识下列关系,,一对多,(1:*),二元关系,,一对多,(1:*),递归关系,,一
4、对一,(1,:1),二元关系,,一对一,(1,:1),递归关系,,多对多,(,*,:*),二元关系,,复杂属性,,多值属性,9,,一对多(,1:*,)二元关系,关系“一”端的实体被设计为父实体,“多”端的实体被设计为子实体,,,父实体主键的拷贝,被放置在子实体的表中,作为外键,,,关系中的任何属性也复制到“多”端的表中,,10,,一对多(,1:*,)二元关系,11,,一对多(,1:*,)递归关系,1:*,一对多的递归关系的表示类似于,1:*,一对多的二元关系,,父实体和子实体是相同的实体,,代表实体的表有一个主键拷贝,这个拷贝是被重命名(称为角色名),并且有关系的其他属性,12,,一对多(,1
5、:*,)递归关系,13,,一对一(,1:1,)二元关系,不能使用元组的数目来标识一个关系中的父实体和子实体。,,而是需要使用参与过程(强制参与还是可选参与)来决定是把实体结合为一个表来表示关系好,还是建两个表由外键来表示关系好。,,14,,一对一(,1:1,)二元关系,考虑如何建表来表示如下的参与约束,,1:1,关系的两边都是强制参与,,1:1,关系的一边都是强制参与,,1:1,关系的两边均为可选参与,15,,两个实体均是强制参与的,1:1,关系,将实体组合为一个表,并选择初始实体中的一个主键作为新表的主键,其他的主键用作备用键。,,,注意仅当两个实体之间没有其他关系的时候,才有可能把两个实体
6、合并到一张表中。如果还存在其他关系,则应该用主键,/,外键机制创建表来描述这些关系。,16,,两个实体均是强制参与的,1:1,关系,,17,,1:1,关系的一边是强制参与,可以使用强制约束来标识,1:1,关系的父实体和子实体,,,关系中的可选参与的实体被设计为父实体,关系中的强制参与的实体被设计为子实体,,父实体主键的拷贝,被放置在描述子实体的表中,18,,1:1,关系的一边是强制参与,19,,1:1,关系的一边是强制参与,20,,1:1,关系的两边均为可选参与,在这种情况下,父实体和子实体之间的设计是任意的,除非你可以得到关于关系的更多信息来帮助你判断使用哪个设计。,,21,,1:1,关系的
7、两边均为可选参与,22,,一对一(,1:1,)递归关系,遵循上面所描述的对,1:1,关系的“参与”规则,,但是,在这种特殊的,1:1,关系情景中,关系两边的实体是相同的,,分为以下三种情况,,两边有强制参与的,1:1,递归关系,,一边强制参与的,1:1,递归关系,,两边是可选参与的,1:1,递归关系,23,,1:1,两边强制参与一对一递归关系,应该用主键的两个拷贝来把这个递归关系描述为一个表,,,主键的一个拷贝代表外键,并且应该将它重新命名来表示它代表的关系,,24,,一边是强制参与的,1:1,递归关系,方法,1,:可以用主键的两个拷贝建一个表,以描述递归关系。,,方法,2,:也可以创建一个新
8、表来代表关系,这个新表只有两个列,都是主键的拷贝,主键的拷贝作为外键,并且必须重新命名来表示在表中的意思。,,25,,两边是可选参与的,1:1,递归关系,对于两边是可选参与的,1:1,递归关系,应该向前面那样创建一个新表,这个新表只有两个列,都是主键的拷贝,主键的拷贝作为外键,并且必须重新命名来表示在表中的意思。,,,,,26,,多对多(,*:*,)二元关系,创建一个表达关系的表,这个表包含关系的任何属性。,,,将参与关系的实体的主键属性拷贝到新表中,使之作为外键。,,,一个外键或全部外键将组成新表的主键,可能要结合此关系的一些属性。,,,27,,多对多(,*:*,)二元关系,28,,复杂关系
9、,创建一个表达关系的表。,,将参与复杂关系的这些实体的主键复制到新表中,并作为外键,此表还包含于关系相关的全部属性。,,,一个或多个外键将组成新表的主键,还可以加上关系中的一些其他属性。,29,,,复杂关系(三元关系),– ER,模型,30,,,复杂关系(三元关系),–,对应的表,31,,多值属性,遵守,1:*,关系中所描述的规则,在“一”端的实体被指定为父实体,在“多”端的多值属性被指定为子体。,,创建一个新的表包含这些多值属性,并将父实体的主键拷贝过来作为外键。,,,除非多值属性自己本身是父实体的备用键,否则新表的主键由多值属性和父实体的原始主键组成。,,,32,,多值属性,– ER,模型
10、和对应的表,,33,,如何将实体、关系和多值属性表达为表的总结,实体,/,关系,/,属性,表达为表,强实体或弱实体,创建包含所有简单属性的表;对复合属性,仅包含表中组成复合属性的简单属性。如果可能,标识每个表中组成主键的列。,,1:*,二元关系,将“一”端实体的主键复制到表达“多端”实体的表中,关系中的任何属性也复制到“多端”的表中,1:*,递归关系,两个实体是一样的,代表实体的表有一个主键拷贝,这个拷贝是被重命名(称为角色名),并且有关系的其他属性,*,:*,二元关系,/,,复杂关系,创建表达关系的表,此表中包含任何与关系有关的属性,将每个父实体中的主键复制到新表中作为外键,多值属性,创建一
11、个表达多值属性的表,并将父实体的主键复制到新表中作为外键,34,,如何将实体、关系和多值属性表达为表的总结(续,1,),实体,/,关系,/,属性,,表达为表,1:1,二元关系,两端都是强制参与,将实体组合为一个表,并选择初始实体中的一个主键作为新表的主键,其他的主键用作备用键。,,一端是强制参与,可选参与实体为父实体,强制参与实体为子实体,将有可选参与的实体的主键复制到表达有强制参与的实体的表中,关系的属性也被复制到该表中。,,两端都是可选参与,没有更多的信息,将一个实体的主键拷贝到另一个实体中。但如果信息是可获得的,则将更具有强制参与的实体作为子实体。,35,,如何将实体、关系和多值属性表达
12、为表的总结(续,2,),实体,/,关系,/,属性,,表达为表,1:1,递归关系,两端都是强制参与,两个实体是一样的,代表实体的表有一个主键拷贝,这个拷贝是被重命名的,并且有关系的其他属性,,一端是强制参与,方法,1,:同上,方法,2,:创建一个新表来代表关系,只有两列,都是主键的拷贝,作为外键,必须重新命名来表示在表中的意思。,,两端都是可选参与,同方法,2,36,,StayHome,,数据库的,Branch,视图中的表,37,,步骤,2.2,用规范化方法检查表结构,用规范化方法检查每个表的组成来避免不必要的数据重复,,,确保每个表至少是第三范式(,3NF,)的,,如果所标识的表不是第三范式的
13、,可能表明,ER,模型的某部分是错误的,或者由模型创建表时产生了错误,,,如果必要的话,可能需要重新构建数据模型或者表,,38,,步骤,2.3,检查表是否支持用户事务,检查所建的表是否如用户需求说明中所要求的那样,支持用户所需的事务。,,确保在建表的时候,没有错误发生。,,检查表是否支持事务的一种方法是检查是否支持事务的数据需求,以确保数据在一个或多个表中存在。,,,如果事务所需求的数据在多个表中,则应该检查这些表是否能够通过,主键,/,外键,机制连接起来。,,下表中黑体显示了事务所需要的列,必要时还包括了连接表中的列。,39,,StayHome,的,Branch,视图的更新,/,删除事务所需
14、的表,40,,,StayHome,的,Branch,视图的,查询,事务所需的表,41,,StayHome,的,Branch,视图的,查询,事务所需的表,(续),42,,回顾,ch09,检查支持用户事务,描述事务,,根据每个事务的需求描述,检查模型中是否提供了事务所需的所有信息(实体、关系和属性)。,事务(,o,)根据分公司号,列出每个分公司的每个经理的名字。,每个经理的名字均包含在实体,Staff,中,而分公司的具体情况包含在实体,Branch,中,通过这两个实体之间的关系,Manages,,可以完成上述事务的任务。,43,,使用路径,(r)按照片名顺序列出某分公司指定导演的录像名称、种类和租
15、借状态,导演信息在,Director,实体中,分公司信息在,Branch,实体中,从,Director,实体开始,使用关系“,Directs”,找到,Video,实体,然后通过关系“,IS”,找到,VideoForRent,实体,再通过关系“,IsAllocated,”,找到,Branch,实体。即可完成此事务。,44,,SQL,语句,(r)按照片名顺序列出某分公司指定导演的录像名称、种类和租借状态,/***,使用候选键(通常是主键),/,外键连接表***,/,,SELECT Video.*,VideoForRent.*,,FROM Director,Video,VideoForRent,
16、Branch,,WHERE (Director.directorNo = Video.directorNo) and,,(Video.catalogNo = VideoForRent.catalogNo) and,,(VideoForRent.branchNo = Branch.branchNo) and,,(Director.directorNo = 'D1001') and,,(Branch.branchNo = 'B001'),45,,SQL,语句,(r)按照片名顺序列出某分公司指定导演的录像名称、种类和租借状态,SELECT Video.*,VideoForRent.*,,FROM
17、 Director INNER JOIN,,Video ON Director.directorNo = Video.directorNo INNER JOIN,,VideoForRent ON Video.catalogNo = VideoForRent.catalogNo INNER JOIN,,Branch ON VideoForRent.branchNo = Branch.branchNo,,WHERE Director.directorNo = 'D1001' and Branch.branchNo = 'B001',/***,使用候选键(通常是主键),/,外键连接表***,/,,
18、另外一种形式的,SQL,语句,46,,SQL,语句,(r)按照片名顺序列出某分公司指定导演的录像名称、种类和租借状态,/***,使用候选键(通常是主键),/,外键连接表***,/,,/****,简化形式 ****,/,,SELECT Video.*,VideoForRent.*,,FROM Video,VideoForRent,,WHERE (Video.catalogNo = VideoForRent.catalogNo) and (Video.directorNo = 'D1001'),,and (VideoForRent.branchNo = 'B001'),,47,,步骤,2.
19、4,检查业务规则,业务规则是用于防止数据库不完整、不准确或不一致的约束,,,考虑下面几种的业务规则,,需要的数据,,列的值域约束,,实体完整性,,多样性,,参照完整性,,其他业务规则,,48,,步骤,2.4,检查业务规则,需要的数据,,某些列必须要包含值,即不允许有空值。例如,每个员工必须有一个职位(经理,主管、助理),,列的值域约束,,每个列都有一个值域(一组对该列合法的值)。指定数据类型。,,实体完整性,,实体的主键不能为空,且唯一。,,多样性,,表达了数据库中数据间的关系的约束。例如,分公司必须有会员和员工。,,参照完整性,,外键包含与父表相匹配的主键值。,,外键允许为空吗?如果子表是强
20、制参与的,外键就不允许空,如果是可选参与的,就允许为空。,49,,如何保证参照完整性,?,,应该指定存在约束,(,existence constraints,),,该约束定义了主键和外键在什么条件下能够被插入、更新或删除,,,下面以,1:*,关系,Branch Has Staff,为例,说明如何保证参照完整性。(,branchNo,在,Staff,表中是外键),50,,如何保证参照完整性,?,考虑如下六种情况,.,,Case 1:,向子表插入记录,,Case 2:,从子表中删除记录,,Case 3:,更新子表记录中的外键,,Case 4:,向父表中插入记录,,Case 5:,从父表中删除记录,
21、,Case 6:,更新父表的主键,51,,如何保证参照完整性,?,Case 1:,向子表(,Staff,)插入记录,,检查新的,Staff,外键,branchNo,是为空还是为一个,Branch,表中已存在的记录的值。,,Case 2:,从子表(,Staff,)中删除记录,,如果一个子表中的一个记录被删除,参照完整性不受影响。,,Case 3:,更新子表(,Staff,)记录中的外键,,同,Case1,52,,如何保证参照完整性,?,Case 4:,向父表(,Branch,)中插入记录,,向父表中插入记录并不影响参照完整性。只是分公司没有成员。,,Case 5:,从父表(,Branch,)中删
22、除记录,,若父表中的一个记录删除了,如果有子记录引用这个被删除的父记录,则参照完整性就丢失了。可以考虑以下几种操作:,,NO ACTION,(不操作):不删除(缺省)。,,CASCADE,(级联):自动删除相关的子记录。如果被删除的子记录在其他关系中充当父记录,其相关的子记录也被删除。,,SET NULL,(置空):相关子记录的外键置空,,SET DEFAULT,(置预定值):相关子记录的外键置为预定值,,NO CHECK,(不检查):不进行完整性检查(可以用,alter table,命令)。,53,,如何保证参照完整性,?,Case 6:,更新父表(,Branch,)的主键,,若父表中的一个
23、记录被更新了,如果有子记录引用这个被更新的父记录,则参照完整性就丢失了。,,可以考虑,Case5,的几种策略,在,CASCADE,情况中,更新父记录主键的同时也更新了子记录的外键值。,,54,,StayHome,的,Branch,视图的表的参照完整性约束,55,,步骤,2.5,与用户讨论逻辑数据库设计,,确保局部逻辑数据模型与描述模型的文档确实表达了用户视图,56,,小结,逻辑设计步骤,2,的主要目的是为,ER,图创建表的结构。,,使用规范化方法检查表的结构。,,检查表的结构以确保它们支持用户所要求的事务。,,业务规则可以防止数据库不完整、不准确和不一致。这些规则包括完整性约束、需要的数据、列值约束、实体完整性、多样性、参照完整性和其他业务规则。,,已有约束通过定义条件确保了参照完整性,可以根据这些条件插入、更新和删除主键或外键。,,当一个子记录引用了要删除,/,更新的父记录时,可以考虑使用如下几种策略:,NO ACTION,、,CASCADE,、,SET NULL,、,SET DEFAULE,和,NO CHECK,。,57,,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。