文档介绍:SEPG过程文档
文档ID:GDL-DBD-02
数据库设计指南
修订历史记录
日期
版本
说明
作者
2002/7/1
初始版本
林晓峰
2002/11/29
统一文档格式和编号
桂莉
2002/6/18
对“字段设计原则”部分进行完善,增加两个小节;重新确定了主键方案
张建永
2002/6/20
根据讨论意见对全文进行了重写
张建永
目录
修订历史记录 2
目录 3
数据库设计指南 4
1. 概述 4
目的 4
范围 4
2. 设计标准 4
表 4
字段设计原则 4
域 6
键设计原则 7
索引设计原则 8
数据完整性 9
实体完整性 9
域完整性 9
引用完整性 9
用户定义完整性 10
关系设计原则 10
一对一关系 10
一对多关系 10
多对多关系 10
创建数据字典(由于目前普遍采用PD,所以考虑删除本节) 10
3. 命名标准 11
表 11
视图 12
域(Domains) 12
字段 12
索引 12
存储过程 12
触发器 12
主键命名 13
业务规则 13
约束 13
数据库设计指南
概述
目的
本文档用于指导系统设计员进行数据库设计,规范数据库设计文档,提出工件的评审标准。
范围
适用于研发中心所有项目/产品的数据库设计。
设计标准
表
为在性能、扩展性和数据完整性方面达到了最好平衡,表的设计应该满足第三范式(3NF),即:
· 表内的每一个值都只能被表达一次。
· 表内的每一行都应该被唯一的标识(有唯一键)。
· 表内不应该存储传递依赖于主键的非键信息。
实际使用中考虑到编码效率、执行效率等问题,往往需要对表的设计进行反规范化,通常是对表进行合并,以下是几种常见的合并情况:
基础代码表的合并。当基础代码表的数据行数不多时,可考虑把多个表进行合并,使用标记项区分数据,并对标记项进行聚集索引,在物理上把数据放在一起,可以提高执行效率,例如:职称、文化程度、职务等就可以合并在一起。
一对一表的合并。增加数据冗余,可以提高执行效率。数据库查询的瓶颈是多表联合查询,如果数目增大,运行性能就显著下降。把所以列放在一个表,只要有适当的字段索引,其速度就很快。当然表格的严谨性则下降。
普遍和个别(类似于面向对象中的父类和子类)的合并,如采购合同、销售合同可以合并在一起放到基本的合同表中,这样可以大大提高数据处理性能。
不把数据表的非标准化当作当然的设计理念。而具体的操作不过是一种派生。所以如果表出了问题重新产生非标准化的表是完全可能的。
字段设计原则
字段应该保持全局一致性,即无论一个字段在哪个表出现,其名称、类型等都应该保持不变,如定单表Order中有一个OrderID,那么定单细目表OrderItem中在引用时应该还命名为OrderID并保持类型不变
字段的数据类型应使用标准(抽象)数据类型来定义,以使其含义不受目标数据库数据类型差异的影响,便于沟通理解,尽量使用域(Domains)来定义字段的类型,以便于保持一致性和提高可维护性。
在选择数据类型时应尽量使用标准数据类型,而不使用个别数据库系统提供的个性化类型,以保持数据库定义具有良好的可移植性。考虑到目前物理数据模型的设计都采用PD,为了保持数据类型命名的独立性,在PD环境下定义了一个抽象的目标数据库AbstractDB,并定义了标准(抽象)的数据类型,物理数据模型应在AbstractDB下进行设计,然后再生成实际的目标数据库(Sql server、Oracle等)的创建脚本。标准数据类型定义表2-1:
表2-1 标准数据类型定义表
类型
说明
使用建议
Char(n)
固定长度的非 Unicode 字符数据,在MS Sql Server中,最大长度为 8,000 个字符。
当字段长度差异不是很明显时使用,如邮政编码、姓名等
varchar(n)
类似Char(n),但长度可变
当字段长度较大(>50),表的记录数很多,且长短差异较大时,由于可以显著降低磁盘空间占用,所以推荐使用,如备注,多数情况少于200字节,个别情况下可能会达到1000字节。
int16
16位带符号整数
从-2^15 (-32,768) 到 2^15 - 1 (32,767) 的整数数据。
int32
32位