一、数据库设计初步
第一章 数据库设计目标
确定数据库应该满足的特性,例如:
- 具有良好的结构(可读性、可维护性)
- 数据完整性(避免数据就丢失)
- 计划查询
第二章 设计方法
- 需求分析—收集数据性质、特别需求(字段约束)
- 概念设计—绘制ERD(实体关系图),包括表、字段、表之间的关系,以及规范化
- 逻辑设计—创建数据库语言命令、生成表定义,有些ERD工具支持自动生成数据定义语言(DDL)
- 物理设计—根据底层物理属性修改数据库模型
- 调整阶段—建立索引、规范化、反规范化、安全特性
第三章 数据库建模构件块
信息、数据、数据完整性。
- 数据完整性,即数据有效性、影响因素有:
- 认为数据项操作错误
- 网络传输错误
- 软件病毒、硬件故障
- 自然灾害
- 保护数据完整性
- 数据库备份(规律性)
- 计算机安全
- 通过适当界面约束数据操作
表的概念
- 纪录=元组=行
- 字段=列=属性
数据类型
简单数据类型:
- 字符串
- 定长:用于较短字符串,字符不足时自动前面补充空格
- 变长:可设置最大字符数。VARCHAR(500)
- 整型
- 定长小数:可指定小数位数
- 浮点型:检索效率低
- 日期和时间
除简单数据类型外,还有复杂数据类型和专门数据类型
约束和有效性
- NOT NULL
- 有效性检查:通过脚本、函数约束具体允许的值,例如只允许插入‘M’、‘W’。
- 键约束:包括主键、外键、唯一键。键约束允许检查验证不同表中字段之间的值。主键和外键本质是实现父子表。
规范化(最小化冗余)
- 优点
- 减少物理存储需求
- 数据组织更好
- 更新数据时只需要操作少量数据(数据独立性)
- 过度使用缺点
- 过多最小化冗余按时更多数据表,查询时需要较大SQL连接语句
- 可能是数据库结构更复杂
数据表关系
- 鸟足结构
- 一对一、一对多、多对多
- 零、一或多
- 标识和非标识关系(字表主键是否包括父表主键)
键
- 主键:唯一标识(用于唯一锁定一条记录)
- 唯一键:唯一标识(避免出现相同纪录值,如同一个乐队不能有两首同名歌曲,需要将其设置为唯一键)
- 外键:反向引用父表中的主键,设置外键属性会自动检查父表主键(完整性约束
参照完整性
定义: 确保相关表中的主键值和外键值之间关系的完整性
索引
关系数据库模型设计
第四章 规范化
规范化定义
- 异常:主表与明细表之间的矛盾。考虑插入异常、删除异常、更新异常
- 依赖(传递依赖、完全函数依赖、多值依赖、循环依赖)、决定因子、候选键(除主键外可以唯一确定纪录的组合字段,可代替主键)
定义范式(共六个,一般需要满足第三范式)
- 第一范式:在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
- 消除重复组
- 定义主键
- 使用主键唯一标识所有记录,主键不可重复
- 其他字段必须直接或间接依赖主键
- 所有字段至少包含一个值
- 每个字段为相同数据类型
- 创建新表,从原始表中移动重复组
- 第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
- 第三范式:在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。