数据库实践10—逻辑数据库设计步骤2.ppt
数据库设计,Database Solutions,第10章,逻辑数据库设计 步骤2,本章主题,将ER模型映射为一组表使用规范化方法检查表结构检查表是否支持用户所需的事务定义和存档完整性约束,本节主题,将ER模型映射为一组表使用规范化方法检查表结构检查表是否支持用户所需的事务定义和存档完整性约束,步骤2-将ER模型映射为一组表,目标为ER模型建表,并检查这些表的结构。,步骤2 任务,步骤2.1 建表步骤2.2 用规范化检查表结构步骤2.3 检查表是否支持用户事务步骤2.4 检查业务规则步骤2.5 同用户讨论逻辑数据库设计模型,步骤2.1-建表,为ER模型创建表来代表实体、关系、属性和约束。表结构来源于ER模型所描述的信息,这些信息包括ER图、数据字典和任何其他相关的文档。,步骤2.1 本章用例的ER图,如何描述实体,对ER模型中的每个实体,创建一个包含实体的所有简单属性的表。对复合属性,仅包含表中组成复合属性的简单属性。如果可能,标识每个表中组成主键的列。,如何描述实体,在某些情况下,我们还不能标识出组成表的所有列,原因是还需描述实体间的关系。特别地,这意味着在ER模型中没有表达出关系之前我们不能标识出组成弱实体的主键的列。,实体的初始表结构,如何描述关系,使用主键/外键机制。为了决定将外键属性放在哪里,首先必须标识关系中包含的“父”实体和“子”实体。父实体指的是把自己的主键拷贝到代表子实体的表中作为外键的实体。,如何描述关系,考虑如何表示如下关系:一对多(1:*)二元关系一对多(1:*)递归关系一对一(1:1)二元关系一对一(1:1)递归关系多对多(*:*)二元关系复杂关系还有,要考虑多值属性。,1:*二元关系,关系“一”端的实体被指定为父实体,“多”端的实体被指定为子实体。父实体主键的拷贝,被放置在子实体的表中,作为外键。,1:*关系(a)ER 图(b)表,1:*递归关系,1:*递归关系的表示与1:*二元关系是相似的。然而,在这种情况下,父实体和子实体是同一个实体。,1:*递归关系(a)ER 图(b)表,1:1 二元关系,不能使用元组的数目来标识关系中的父实体和子实体。而是,需要使用参与过程来决定是把实体结合为一个表来表示关系好,还是建两个表由外键来表示关系好。,1:1 二元关系,考虑如何建表来表示如下参与约束:1:1关系的两边都是强制参与1:1关系的一边是强制参与1:1关系的两边均是可选参与,1:1关系的两边都是强制参与,将有关的实体组合为一个表,并选择初始实体中的一个主键作为新表的主键,其他的主键用作备用键。,1:1关系的两边都是强制参与(a)ER 图(b)表,1:1关系的一边是强制参与,使用参与约束来标识父实体和子实体。可选参与的实体被设计为父实体,强制参与的实体被设计为子实体。父实体主键的拷贝被放置在描述子实体的表中。,1:1关系的一边是强制参与(a)ER 图(b)表,1:1关系的一边是强制参与(第个例子),1:1关系的两边均是可选参与,在这种情况下,父实体和子实体之间的指派是任意的,除非你可以得到关于关系的更多信息来帮助你作出决定(使用哪种指派方案)。,1:1关系的两边均是可选参与(a)ER 图(b)表,1:1 递归关系,应遵循上述的1:1关系的“参与”规则。在这种情况下,关系两边的实体是相同的。,1:1递归关系的两边均是强制参与,应该用主键的两个拷贝来把这个递归关系描述为一个表。主键的一个拷贝代表外键,并且应该将它重新命名来表示它代表的关系。,1:1递归关系的一边是强制参与,可以用主键的两个拷贝创建一个新表,也可以创建一个新表代表关系。新表有两列,都是主键的拷贝,作为外键。必须重新命名来表示在表中的意思。,1:1递归关系的两边均是可选参与,应该像前面所描述的那样创建一个新表。,*:*二元关系,创建一张表来表示关系同时该表包括属于该关系的任何属性。把参与关系的实体的主键属性的拷贝放到新表中,作为外键。外键中的一个或者两个形成新表的主键,可能与关系的某些属性结合在一起。,*:*二元关系(a)ER 图(b)表,复杂关系,创建一张新表代表关系。把参与关系的实体的主键属性的拷贝放到新表中,作为外键,同时该表包括任何与该关系相关的属性。外键中的一个或者多个形成新表的主键,可能与关系的某些属性结合在一起。,复杂关系 ER 图,复杂关系 表,多值属性,创建一张新表来包含多值属性,父实体放置主键的拷贝到新表中,作为外键。除非多值属性本身是父实体的备用键,否则新表的主键由多值属性和原始的父实体的主键构成。,多值属性 ER图和表,实体、关系和多值属性表示为表,StayHome的Branch用户视图的表,本节主题,将ER模型映射为一组表使用规范化方法检查表结构检查表是否支持用户所需的事务定义和存档完整性约束,步骤2.2使用规范化方法检查表结构,用规范化的方法检查每个表的组成来避免不必要的数据重复。每个表至少是第三范式(3NF)。如果所标识的表不是3NF,可能表明ER模型的某部分是错误的。如有必要,可能需要重建数据模型或者表。,本节主题,将ER模型映射为一组表使用规范化方法检查表结构检查表是否支持用户所需的事务定义和存档完整性约束,步骤2.3 检查表是否支持用户所需的事务,检查所建的表是否如用户需求说明中所要求的那样。确保建表时,没有错误发生。一个方法是检查是否支持事务的数据需求,以确保数据在一个或多个表中存在。如果事务所需求的数据在多个表中,则应该检查这些表是否能够通过主键/外键机制连接起来。,步骤2.3 检查表是否支持用户所需的事务,步骤2.3 检查表是否支持用户所需的事务,步骤2.3 检查表是否支持用户所需的事务,本节主题,将ER模型映射为一组表使用规范化方法检查表结构检查表是否支持用户所需的事务定义和存档完整性约束,步骤 2.4 检查业务规则,业务规则是一系列的约束,你希望利用这些约束来防止数据库不完整、不准确或者不一致。考虑如下类型的业务规则:需要的数据属性域约束实体完整性多样性参照完整性其他业务规则,步骤 2.4 检查业务规则 参照完整性,关于外码的两点注意点:外码允许空值(null)吗?如何保证参照完整性?,如何保证参照完整性?,必须指定存在约束(existence constraints),该约束定义了主键和外键在什么条件下能够被插入、更新和删除。考虑如下六种情况:Case 1:向子表中插入记录;Case 2:从子表中删除记录;Case 3:更新子表记录中的外键;Case 4:向父表中插入记录;Case 5:从父表中删除记录;Case 6:更新父表记录中的主键;,如何保证参照完整性?,对Case 5 有几种策略:NO ACTION CASCADE SET NULL SET DEFAULT NO CHECK,表中的参照完整性约束,步骤 2.5 同用户讨论逻辑数据库设计,确保逻辑数据库设计是数据库所支持的公司数据需求的真实表现。,