1、数据库设计 数据库设计 普拉纳信息技术服务中心 方法、规范、技巧 方法、规范、技巧www.P 主题与课题安排 主题与课题安排 数据库设计过程 数据库设计过程 数据库设计范式 数据库设计范式 数据库设计技巧 数据库设计技巧 数据库设计规范 数据库设计规范www.P 数据库设计 数据库设计 数据库设计是指对于一个给定的应用环 数据库设计是指对于一个给定的应用环 境,构造最优的数据库模式,建立数据库 境,构造最优的数据库模式,建立数据库 及其应用系统,有效存储数据,满足用户 及其应用系统,有效存储数据,满足用户 信息要求和处理要求。 信息要求和处理要求。www.P 数据库设计过程 数据库设计过程 需
2、求分析阶段 需求分析阶段 :整合各个用户的应用需求 :整合各个用户的应用需求 (现实世界的需求) (现实世界的需求) 概要设计阶段 概要设计阶段 :形成独立于机器特点、独 :形成独立于机器特点、独 立于各个 立于各个 DBMS DBMS 产品的概念模式(信息世 产品的概念模式(信息世 界模型),用 界模型),用 E E - - R R 图或 图或 IDEF1X IDEF1X 图来描述。 图来描述。数据库设计应该完成的工 数据库设计应该完成的工 作 作www.P 需求分析阶段 需求分析阶段 需求收集:交流! 需求收集:交流! 收集方法:跟班作业、开调查会、请专人介 收集方法:跟班作业、开调查会、
3、请专人介 绍、询问、设计调查表请用户填写、查阅记 绍、询问、设计调查表请用户填写、查阅记 录。 录。 需求分析: 需求分析: 调查与分析用户在数据管理中 调查与分析用户在数据管理中 的信息要求、处理要求、安全性与完整性 的信息要求、处理要求、安全性与完整性 要求。 要求。 分析方法:自顶向下和自底向上两种结构化 分析方法:自顶向下和自底向上两种结构化 分析方法。(一般使用自顶向下) 分析方法。(一般使用自顶向下) 生成数据流图和数据字典 生成数据流图和数据字典www.P 结构化分析方法 结构化分析方法 结构化分析方法( 结构化分析方法( Structured Structured Analys
4、is Analysis ),简称 ),简称 SA SA 方法 方法 从最上层的系统组织机构入手,采用逐层 从最上层的系统组织机构入手,采用逐层 分解的方式分析系统,并把每一层用数据 分解的方式分析系统,并把每一层用数据 流图和数据字典描述。 流图和数据字典描述。www.P 数据流图 数据流图 数据流图表达了数据和处理过程的关系 数据流图表达了数据和处理过程的关系www.P 数据字典 数据字典 数据字典是各类数据描述的集合,它是关于数据库中数据 数据字典是各类数据描述的集合,它是关于数据库中数据 的描述,即元数据,而不是数据本身。 的描述,即元数据,而不是数据本身。 数据字典通常包括数据项、数据
5、结构、数据流、数据存储 数据字典通常包括数据项、数据结构、数据流、数据存储 和处理过程五个部分(至少应该包含每个字段的数据类型 和处理过程五个部分(至少应该包含每个字段的数据类型 和在每个表内的主外键)。 和在每个表内的主外键)。 数据项描述数据项名,数据项含义说明,别名,数据类型, 数据项描述数据项名,数据项含义说明,别名,数据类型, 长度,取值范围,取值含义,与其他数据项的逻辑关系 长度,取值范围,取值含义,与其他数据项的逻辑关系 数据结构描述数据结构名,含义说明,组成 数据结构描述数据结构名,含义说明,组成: : 数据项或数据 数据项或数据 结构 结构 数据流描述数据流名,说明,数据流来
6、源,数据流去向,组 数据流描述数据流名,说明,数据流来源,数据流去向,组 成 成: : 数据结构,平均流量,高峰期流量 数据结构,平均流量,高峰期流量 数据存储描述数据存储名,说明,编号,流入的数据流,流 数据存储描述数据存储名,说明,编号,流入的数据流,流 出的数据流,组成 出的数据流,组成: : 数据结构,数据量,存取方式 数据结构,数据量,存取方式 处理过程描述处理过程名,说明,输入 处理过程描述处理过程名,说明,输入: : 数据流,输出 数据流,输出: : 数据流 数据流, , 处理 处理: : 简要说明 简要说明www.P 概要设计阶段 概要设计阶段 对用户需求进行综合、归纳与抽象,
7、形成 对用户需求进行综合、归纳与抽象,形成 一个独立于具体 一个独立于具体 DBMS DBMS 的 的 概念模型 概念模型 概念模型设计方法: 概念模型设计方法: IDEF1X IDEF1X 方法 方法 生成实体 生成实体 - - 关系图即: 关系图即: E E - - R R ( ( Entity Entity - - Relation Relation )图(一般用 )图(一般用 E E - - R R 图表示概念模型) 图表示概念模型) 或 或 IDEF1X IDEF1X 图 图www.P 概念模型 概念模型 不依赖于某一个 不依赖于某一个 DBMS DBMS 支持的数据模型 支持的数据
8、模型 可以转换为计算机上某一 可以转换为计算机上某一 DBMS DBMS 支持的特 支持的特 定数据模型 定数据模型 概念模型特点: 概念模型特点: 具有较强的语义表达能力 具有较强的语义表达能力 简单、清晰、易于用户理解,是用户与数据库 简单、清晰、易于用户理解,是用户与数据库 设计人员之间进行交流的语言 设计人员之间进行交流的语言www.P IDEF1X IDEF1X 方法 方法 把实体 把实体 - - 联系方法应用到语义数据模型中的 联系方法应用到语义数据模型中的 一种语义模型化技术,用于建立系统信息 一种语义模型化技术,用于建立系统信息 模型 模型 创建步骤 创建步骤 初始化工程 初始
9、化工程 定义实体 定义实体 定义联系 定义联系 定义码 定义码 定义属性 定义属性 定义其他对象和规则 定义其他对象和规则www.P 初始化工程 初始化工程 从目的描述和范围描述开始,确定建模目 从目的描述和范围描述开始,确定建模目 标,开发建模计划,组织建模队伍,收集 标,开发建模计划,组织建模队伍,收集 源材料,制定约束和规范。 源材料,制定约束和规范。 通过调查和观察结果,业务流程,原有系 通过调查和观察结果,业务流程,原有系 统的输入输出,各种报表,收集原始数 统的输入输出,各种报表,收集原始数 据,形成了 据,形成了 基本数据资料表 基本数据资料表 。 。 收集源材料是这阶段的重点!
10、 收集源材料是这阶段的重点!www.P 定义实体 定义实体 实体就是有共同的特征和属性的集合。 实体就是有共同的特征和属性的集合。 从基本数据资料表中直接或间接标识出大部分实 从基本数据资料表中直接或间接标识出大部分实 体。 体。 根据基本数据资料表中表示对象的术语。 根据基本数据资料表中表示对象的术语。 具有 具有“ “ 代码 代码” ” 和 和“ “ 编号 编号” ” 结尾的术语,如客户代码、供应 结尾的术语,如客户代码、供应 商编号等。 商编号等。 名词部分代表的实体 名词部分代表的实体 初步找出潜在的实体,形成初步实体表 初步找出潜在的实体,形成初步实体表www.P 定义联系 定义联系
11、 根据实际的业务需求和规则,使用实体联系矩 根据实际的业务需求和规则,使用实体联系矩 阵来标识实体间的二元关系。 阵来标识实体间的二元关系。 如果是 如果是 N N 元联系必须定义为 元联系必须定义为 N N 个二元联系。 个二元联系。 根据实际情况确定出连接关系的势、关系名和 根据实际情况确定出连接关系的势、关系名和 说明,确定关系类型。 说明,确定关系类型。 标识关系与非标识关系 标识关系与非标识关系 强制关系与非强制关系 强制关系与非强制关系 分类关系 分类关系 非确定性关系 非确定性关系www.P 定义码(主键) 定义码(主键) 引入交叉实体除去上一阶段产生的非确定关 引入交叉实体除去
12、上一阶段产生的非确定关 系。从非交叉实体和独立实体开始标识侯选码 系。从非交叉实体和独立实体开始标识侯选码 属性,再从侯选码中确定主码。 属性,再从侯选码中确定主码。 为了确定主码和关系的有效性,通过非空规则 为了确定主码和关系的有效性,通过非空规则 和非多值规则来保证。找出误认的确定关系, 和非多值规则来保证。找出误认的确定关系, 将实体进一步分解,最后构造出 将实体进一步分解,最后构造出 IDEF1X IDEF1X 模型 模型 的键基视图。 的键基视图。www.P 定义属性 定义属性 从基本数据资料表中抽取说明性的名词开发出 从基本数据资料表中抽取说明性的名词开发出 属性表,确定属性的所有
13、者。 属性表,确定属性的所有者。 定义非主码属性,检查属性的非空及非多值规 定义非主码属性,检查属性的非空及非多值规 则。 则。www.P 定义其他对象和规则 定义其他对象和规则 定义属性的数据类型、长度、精度、非 定义属性的数据类型、长度、精度、非 空、缺省值、约束规则等。 空、缺省值、约束规则等。 定义触发器、存储过程、视图、角色、同 定义触发器、存储过程、视图、角色、同 义词、序列等对象信息 义词、序列等对象信息www.P 逻辑结构设计阶段 逻辑结构设计阶段 将概念结构转换为某个 将概念结构转换为某个 DBMS DBMS 所支持的数 所支持的数 据模型(例如关系模型),并对其进行优 据模
14、型(例如关系模型),并对其进行优 化。 化。 将 将 E E - - R R 图转换为关系模型实际上就是要将实 图转换为关系模型实际上就是要将实 体、实体的属性和实体之间的联系转化为 体、实体的属性和实体之间的联系转化为 关系模式( 关系模式( ORM ORM 图) 图)数据库设计范式 数据库设计范式www.P 数据库设计范式概述 数据库设计范式概述 关系数据库设计之时是要遵守一定的规则 关系数据库设计之时是要遵守一定的规则 的,特别要注意的就是 的,特别要注意的就是 设计范式 设计范式 ( ( Normal Form Normal Form ) ) 数据库设计范式包括: 数据库设计范式包括:
15、 第一范式( 第一范式( 1NF 1NF ) ) 第二范式( 第二范式( 2NF 2NF ) ) 第三范式( 第三范式( 3NF 3NF ) ) 第四范式( 第四范式( 4NF 4NF )(不常用) )(不常用) 第五范式( 第五范式( 5NF 5NF ) )www.P 第一范式( 第一范式( 1NF 1NF ) ) 对于表中的每一行,必须且仅仅有唯一的 对于表中的每一行,必须且仅仅有唯一的 行值,在一行中的每一列仅有唯一的值并 行值,在一行中的每一列仅有唯一的值并 且具有原子性(不可再分)。 且具有原子性(不可再分)。 例如:员工信息包括:员工号、员工名、 例如:员工信息包括:员工号、员工名
16、、 员工电话(单位电话、私人电话)等字 员工电话(单位电话、私人电话)等字 段。则我们根据 段。则我们根据 1NF 1NF 只能定义字段员工号 只能定义字段员工号 为主键,电话则要根据情况再进行拆分。 为主键,电话则要根据情况再进行拆分。www.P 第二范式( 第二范式( 2NF 2NF ) ) 非主键列是主键的子集, 非主键列是主键的子集, 非主键列活动必 非主键列活动必 须完全依赖整个主键 须完全依赖整个主键 。 。 主键必须有唯一性的元素,一个主键可以 主键必须有唯一性的元素,一个主键可以 由一个或更多的组成唯一值的列组成。一 由一个或更多的组成唯一值的列组成。一 旦创建,主键无法改变,
17、外键关联一个表 旦创建,主键无法改变,外键关联一个表 的主键。主外键关联意味着一对多的关系 的主键。主外键关联意味着一对多的关系www.P 第三范式 第三范式 非主键列互不依赖 非主键列互不依赖 例如:学员信息表包含:学员学号、学员 例如:学员信息表包含:学员学号、学员 名称、所在系编号、所在系名称、所在系 名称、所在系编号、所在系名称、所在系 地址等字段,那么在操作时就会出现冗余 地址等字段,那么在操作时就会出现冗余 的问题 的问题 原因:学员学号和所在系的地址是没有直 原因:学员学号和所在系的地址是没有直 接关联的,它是依赖于所在系编号传递的 接关联的,它是依赖于所在系编号传递的 依赖性,
18、同理所在系名称其实也一样。 依赖性,同理所在系名称其实也一样。www.P 第四范式 第四范式 禁止主键列和非主键列一对多关系不受约 禁止主键列和非主键列一对多关系不受约 束。 束。 当一个表和另外一个表的一个非主键列有 当一个表和另外一个表的一个非主键列有 一对多的关系时,不一定是强制关系,但 一对多的关系时,不一定是强制关系,但 一定要使用约束! 一定要使用约束!www.P 第五范式( 第五范式( 5NF 5NF ) ) 第五范式另外一个名称叫 第五范式另外一个名称叫 “ “ 无 无 NULL NULL 范式 范式 ” ” 。 。 将表分割成尽可能小的块,为了排除在表 将表分割成尽可能小的块
19、,为了排除在表 中所有的冗余。 中所有的冗余。数据库设计技巧 数据库设计技巧www.P 需求分析阶段技巧 需求分析阶段技巧 理解客户需求,询问用户如何看待未来需 理解客户需求,询问用户如何看待未来需 求变化。经常询问客户保证其需求仍然在 求变化。经常询问客户保证其需求仍然在 开发的目的之中。 开发的目的之中。 了解企业业务可以在以后的开发阶段节约 了解企业业务可以在以后的开发阶段节约 大量的时间。 大量的时间。 重视输入输出。 重视输入输出。 创建数据字典和 创建数据字典和 ER ER 图表 图表 定义标准的对象命名规范 定义标准的对象命名规范www.P 表设计技巧 表设计技巧 标准化和规范化
20、有助于消除数据库中的数 标准化和规范化有助于消除数据库中的数 据冗余,但是为了效率的缘故,对表不进 据冗余,但是为了效率的缘故,对表不进 行标准化有时也是必要的。 行标准化有时也是必要的。 采用数据驱动而非硬编码的方式,许多策 采用数据驱动而非硬编码的方式,许多策 略变更和维护都会方便得多,大大增强系 略变更和维护都会方便得多,大大增强系 统的灵活性和扩展性。 统的灵活性和扩展性。 在设计数据库的时候考虑到哪些数据字段 在设计数据库的时候考虑到哪些数据字段 将来可能会发生变更。 将来可能会发生变更。www.P 字段设计技巧 字段设计技巧 每个表中都应该添加的几个有用的字段: 每个表中都应该添加
21、的几个有用的字段: 创建日期、创建用户等 创建日期、创建用户等 对地址和电话采用多个字段。 对地址和电话采用多个字段。 使用角色实体定义属于某类别的列。 使用角色实体定义属于某类别的列。 选择数字类型和文本类型尽量充足。 选择数字类型和文本类型尽量充足。 增加删除标记字段。在关系数据库里不要 增加删除标记字段。在关系数据库里不要 单独删除某一行,最好采用清除数据程序 单独删除某一行,最好采用清除数据程序 而且要仔细维护索引整体性。 而且要仔细维护索引整体性。www.P 键设计技巧 键设计技巧 为关联字段创建外键;所有的键都必须唯 为关联字段创建外键;所有的键都必须唯 一;避免使用复合键;外键总
22、是关联唯一 一;避免使用复合键;外键总是关联唯一 的键字段。 的键字段。 使用系统生成的主键。 使用系统生成的主键。 不要用用户的键即:不让主键具有可更新 不要用用户的键即:不让主键具有可更新 性。 性。 把可选键进一步用做主键,可以拥有建立 把可选键进一步用做主键,可以拥有建立 强大索引的能力。 强大索引的能力。www.P 索引设计技巧 索引设计技巧 逻辑主键使用唯一的成组索引,对系统键 逻辑主键使用唯一的成组索引,对系统键 采用唯一的非成组索引,对任何外键列采 采用唯一的非成组索引,对任何外键列采 用非成组索引。 用非成组索引。 大多数数据库都索引自动创建的主键字 大多数数据库都索引自动创
23、建的主键字 段,但是可别忘了索引外键,它们也是经 段,但是可别忘了索引外键,它们也是经 常使用的键。 常使用的键。 不要索引 不要索引 memo/note memo/note 字段,不要索引大 字段,不要索引大 型字段(有很多字符)。 型字段(有很多字符)。 不要索引常用的小型表 不要索引常用的小型表www.P 数据完整性设计技巧 数据完整性设计技巧 完整性实现机制:外键实现机制(约束规 完整性实现机制:外键实现机制(约束规 则)和触发器实现机制。 则)和触发器实现机制。 用约束而非商务规则强制数据完整性。 用约束而非商务规则强制数据完整性。 强制指示完整性,在有害数据进入数据库 强制指示完整
24、性,在有害数据进入数据库 之前将其剔除 之前将其剔除 。 。 使用查找控制数据完整性,限制用户的选 使用查找控制数据完整性,限制用户的选 择。 择。 采用视图,不必非要应用程序直接访问数 采用视图,不必非要应用程序直接访问数 据表。 据表。www.P 其他设计技巧 其他设计技巧 避免使用触发器,如果确实需要触发器, 避免使用触发器,如果确实需要触发器, 必须集中对其文档化管理。 必须集中对其文档化管理。 使用名称而不要使用编码进行数据排序。 使用名称而不要使用编码进行数据排序。 假如需要编码,可以在编码旁附上用户知 假如需要编码,可以在编码旁附上用户知 道的名称。 道的名称。 保存常用信息,让
25、一个表专门存放一般数 保存常用信息,让一个表专门存放一般数 据库信息,例如:数据库当前版本、修改 据库信息,例如:数据库当前版本、修改 记录、关联设计文档的名称、客户等。 记录、关联设计文档的名称、客户等。www.P 其他设计技巧 其他设计技巧 包含版本机制 包含版本机制 所有的快捷方式、命名规范、限制和函数 所有的快捷方式、命名规范、限制和函数 都要编制文档。 都要编制文档。 建立或者修订数据库之后,必须用用户新 建立或者修订数据库之后,必须用用户新 输入的数据测试数据字段。 输入的数据测试数据字段。 在开发期间检查数据库设计的常用技术是 在开发期间检查数据库设计的常用技术是 通过其所支持的
26、应用程序原型检查数据 通过其所支持的应用程序原型检查数据 库。 库。数据库设计规范 数据库设计规范www.P 实体(表)命名规范 实体(表)命名规范 表以名词或名词短语命名,确定表名是采 表以名词或名词短语命名,确定表名是采 用复数还是单数形式。名称过长时有时候 用复数还是单数形式。名称过长时有时候 可以考虑缩写。 可以考虑缩写。 如果表或者是字段的名称仅有一个单词, 如果表或者是字段的名称仅有一个单词, 那么建议不使用缩写,而是用完整的单 那么建议不使用缩写,而是用完整的单 词。 词。 别名的时候也要有技巧。 别名的时候也要有技巧。www.P 属性(字段)命名规范 属性(字段)命名规范 采用
27、有意义的列名。 采用有意义的列名。 针对键采用一整套设计规则,对列名应该 针对键采用一整套设计规则,对列名应该 采用标准的前缀和后缀。如:自动编码用 采用标准的前缀和后缀。如:自动编码用 ID ID ,数字编号用 ,数字编号用 NO NO ,字符编号用 ,字符编号用 CODE CODE , , 自定义的逻辑上的编码用名称 自定义的逻辑上的编码用名称 +ID +ID 等 等www.P 其他命名规范 其他命名规范 视图命名应尽量体现各视图的功能。 视图命名应尽量体现各视图的功能。 触发器的命名最好最后附带上是什么操作 触发器的命名最好最后附带上是什么操作 引发的触发功能,例如:新增 引发的触发功能
28、,例如:新增 I I ,删除 ,删除 D D , , 更新 更新 U U 变量的命名建议使用全小写。 变量的命名建议使用全小写。www.P 综合命名规范 综合命名规范 采用前缀命名,如:表用 采用前缀命名,如:表用 TB TB ,视图用 ,视图用 V V , , 存储过程用 存储过程用 UP UP ( ( SP SP ),触发器用 ),触发器用 TR TR ,关系 ,关系 用 用 R R ( ( FK FK )。 )。 结合设计初始阶段定义的规范进行命名规 结合设计初始阶段定义的规范进行命名规 范,保证数据库命名在一个系统中的统一 范,保证数据库命名在一个系统中的统一 性。 性。 尽量使用全大
29、写,变量使用全小写。 尽量使用全大写,变量使用全小写。 命名都不得超过 命名都不得超过 30 30 个字符的系统限制。 个字符的系统限制。www.P 综合命名规范 综合命名规范 数据对象、变量的命名都采用英文字符。 数据对象、变量的命名都采用英文字符。 绝对不要在对象名的字符之间留空格。 绝对不要在对象名的字符之间留空格。 小心关键字,要保证你的字段名没有和关 小心关键字,要保证你的字段名没有和关 键字、数据库系统或者常用访问方法有冲 键字、数据库系统或者常用访问方法有冲 突。 突。 保持字段名和类型的一致性,在命名字段 保持字段名和类型的一致性,在命名字段 并为其指定数据类型的时候一定要保证
30、一 并为其指定数据类型的时候一定要保证一 致性。 致性。前辈警言 前辈警言www.P 在设计一个新数据库时,你不但应该 在设计一个新数据库时,你不但应该 仔细研究业务需求而且还要考察现有的系 仔细研究业务需求而且还要考察现有的系 统。大多数数据库项目都不是从头开始建 统。大多数数据库项目都不是从头开始建 立的;通常,机构内总会存在用来满足特 立的;通常,机构内总会存在用来满足特 定需求的现有系统(可能没有实现自动计 定需求的现有系统(可能没有实现自动计 算)。显然,现有系统并不完美,否则你 算)。显然,现有系统并不完美,否则你 就不必再建立新系统了。但是对旧系统的 就不必再建立新系统了。但是对
31、旧系统的 研究可以让你发现一些可能会忽略的细微 研究可以让你发现一些可能会忽略的细微 问题。一般来说,考察现有系统对你绝对 问题。一般来说,考察现有系统对你绝对 有好处。 有好处。 Lamont Adams Lamont Adamswww.P 上个世纪 上个世纪 80 80 年代初,我还在使用资 年代初,我还在使用资 产帐目系统和 产帐目系统和 System 38 System 38 平台,那时我负 平台,那时我负 责设计所有的日期字段,这样在不费什么 责设计所有的日期字段,这样在不费什么 力气的情况下将来就可以轻松处理 力气的情况下将来就可以轻松处理 2000 2000 年 年 问题了。许多
32、人给我说就别去解决这一问 问题了。许多人给我说就别去解决这一问 题了,因为要处理起来太麻烦了(这在世 题了,因为要处理起来太麻烦了(这在世 人皆知的 人皆知的 Y2K Y2K 问题之前很久了)。我回击 问题之前很久了)。我回击 说只要预先计划今后就不会遇到大麻烦。 说只要预先计划今后就不会遇到大麻烦。 结果我只用了两周的时间就把程序全部改 结果我只用了两周的时间就把程序全部改 完了。因为预先计划的好,后来 完了。因为预先计划的好,后来 Y2K Y2K 问题 问题 对该系统的危害降到了最低程度。 对该系统的危害降到了最低程度。 generalist generalistwww.P 在你百分百地确
33、定系统从客户角度满 在你百分百地确定系统从客户角度满 足其需求之前不要在你的 足其需求之前不要在你的 ER ER (实体关 (实体关 系)模式中加入哪怕一个数据表。了解你 系)模式中加入哪怕一个数据表。了解你 的企业业务可以在以后的开发阶段节约大 的企业业务可以在以后的开发阶段节约大 量的时间。一旦你明确了业务需求,你就 量的时间。一旦你明确了业务需求,你就 可以自己做出许多决策了。 可以自己做出许多决策了。 rangel rangelwww.P 一旦你认为你已经明确了业务内容, 一旦你认为你已经明确了业务内容, 你最好同客户进行一次系统的交流。采用 你最好同客户进行一次系统的交流。采用 客户
34、的术语并且向他们解释你所想到的和 客户的术语并且向他们解释你所想到的和 你所听到的。同时还应该用可能、将会和 你所听到的。同时还应该用可能、将会和 必须等词汇表达出系统的关系基数。这样 必须等词汇表达出系统的关系基数。这样 你就可以让你的客户纠正你自己的理解然 你就可以让你的客户纠正你自己的理解然 后做好下一步的 后做好下一步的 ER ER 设计。 设计。 teburlew teburlewwww.P 在定义数据库表和字段需求(输入) 在定义数据库表和字段需求(输入) 时,首先应检查现有的或者已经设计出的 时,首先应检查现有的或者已经设计出的 报表、查询和视图(输出)以决定为了支 报表、查询和
35、视图(输出)以决定为了支 持这些输出哪些是必要的表和字段。举个 持这些输出哪些是必要的表和字段。举个 简单的例子:假如客户需要一个报表按照 简单的例子:假如客户需要一个报表按照 邮政编码排序、分段和求和,你要保证其 邮政编码排序、分段和求和,你要保证其 中包括了单独的邮政编码字段而不要把邮 中包括了单独的邮政编码字段而不要把邮 政编码糅进地址字段里。 政编码糅进地址字段里。 peter.marshall peter.marshallwww.P 如果多个表里有好多同一类型的字段 如果多个表里有好多同一类型的字段 (比如 (比如 FirstName FirstName ),你不妨用特定表的 ),你
36、不妨用特定表的 前缀(比如 前缀(比如 CusLastName CusLastName )来帮助你标识 )来帮助你标识 字段。 字段。 notoriousDOG notoriousDOGwww.P 没有好办法能在有害数据进入数据库 没有好办法能在有害数据进入数据库 之后消除它,所以你应该在它进入数据库 之后消除它,所以你应该在它进入数据库 之前将其剔除。激活数据库系统的指示完 之前将其剔除。激活数据库系统的指示完 整性特性。这样可以保持数据的清洁而能 整性特性。这样可以保持数据的清洁而能 迫使开发人员投入更多的时间处理错误条 迫使开发人员投入更多的时间处理错误条 件。 件。 kol kolww
37、w.P 如果两个实体之间存在多对一关系, 如果两个实体之间存在多对一关系, 而且还有可能转化为多对多关系,那么你 而且还有可能转化为多对多关系,那么你 最好一开始就设置成多对多关系。从现有 最好一开始就设置成多对多关系。从现有 的多对一关系转变为多对多关系比一开始 的多对一关系转变为多对多关系比一开始 就是多对多关系要难得多。 就是多对多关系要难得多。 CS Data Architect CS Data Architectwww.P 总结 总结 目的:使结构更合理,消除存储异常,使 目的:使结构更合理,消除存储异常,使 数据冗余尽量小,便于插入、删除和更 数据冗余尽量小,便于插入、删除和更 新。 新。 原则:遵从概念单一化 原则:遵从概念单一化 “ “ 一事一地 一事一地 ” ” 原则, 原则, 即一个关系模式描述一个实体或实体间的 即一个关系模式描述一个实体或实体间的 一种联系。规范的实质就是概念的单一 一种联系。规范的实质就是概念的单一 化。 化。