文章目录

  • 自己动手设计数据库
    • 1.关系型数据库
      • 1.1. 数据库的类型
      • 1.2. 早期数据库模型
      • 1.3.关系数据库管理系统
      • 1.4.后关系模型
    • 2.设计目标
      • 2.1. 为什么要关注数据库设计
      • 2.2. 理论的重要性
      • 2.3. 学习优秀设计方法学的益处
      • 2.4. 优秀设计的目标
      • 2.5. 优秀设计的好处
      • 2.6. 数据库设计方法
      • 2.7. 规范化
    • 3.术语
      • 3.1. 术语为何重要
      • 3.2.术语分为四类:
      • 3.2. 关于值的术语
    • 4.概念性概述
      • 4.1.完成设计过程的重要性
      • 4.2.明确宗旨和任务目标
      • 4.3.分析现有的数据库
      • 4.4.创建数据结构
      • 4.5.确定和建立表关系
      • 4.6.确定和定义业务规则
      • 4.7.确定和定义视图
      • 4.8.审核数据完整性
    • 5.大幕开启
      • 5.1.开展访谈
      • 5.2.参与者指南
      • 5.3.采访者指南
      • 5.4.明确宗旨
      • 5.5.制定宗旨
      • 5.6.明确任务目标
      • 5.7.制订任务目标
    • 6.分析现有的数据库
      • 6.1.了解现有数据库
      • 6.2.开展分析
      • 6.3.了解如何收集数据
      • 6.4.了解如何呈现信息
      • 6.5.开展访谈
      • 6.6.基本访谈技巧
      • 6.7.用户访谈
      • 6.8.评审数据的类型和用途
      • 6.8.评审样本
      • 6.9.评审信息要求
      • 6.10.管理人员访谈
      • 6.11.编辑完整字段列表
    • 7.建立表结构
      • 7.1.定义初始表列表
      • 7.2.定义最终表列表
      • 7.3.字段对应入表
      • 7.4.精简字段
    • 8. 键
      • 8.1. 键为何重要
      • 8.2. 为每个表建立键
    • 9.字段说明
      • 9.1.字段说明为何重要
      • 9.2.字段级完整性
      • 9.3.字段说明之剖析
      • 9.4.使用独特、通用和可复制的字段说明
      • 9.5.定义每个字段的字段说明
    • 10.表关系
      • 10.1.关系为何重要
      • 10.2.关系的类型
      • 10.3.自联结关系
      • 10.4.识别现有关系
      • 10.5.建立关系
      • 10.6.自引用关系
      • 10.7.评审表结构
      • 10.8.改进所有外键
      • 10.9.建立关系特征
      • 10.10.识别每个表的参与度
      • 10.11.与用户和管理人员验证表关系
      • 10.11.关系层次的完整性
    • 11.业务规则
      • 11.1.什么是业务规则
      • 11.2.业务规则类型
      • 11.3.业务规则的分类
      • 11.4.定义和建立业务规则
      • 11.5.评审业务规则规范表
    • 12.视图
      • 12.1.视图之剖析
    • 13.评审数据完整性
      • 13.1.为什么要评审数据完整性
      • 13.2.评审和改进数据完整性
      • 13.3.汇编数据库文档
    • 14.设计不当--禁忌事项
      • 14.1.平面文件设计
      • 14.2.电子表格设计
      • 14.3.摒弃电子表格视图思维定式
      • 14.4基于数据库软件设计数据库
    • 15.打破规则
      • 15.1.何种情况下可以打破规则
      • 15.2.提升性能首选其他方式
      • 15.3.记录行动

自己动手设计数据库

1.关系型数据库

1.1. 数据库的类型

  • 操作型数据库(operational database)

    • 主要用于联机事务处理(online transaction processing,OLTP),即需要收集、修改和维护日常数据的情况。
  • 分析型数据库(analytical database)
    • 主要用户联机分析处理(online analytical processing,OLAP),用来存储并追踪历史性和时间性的数据。
  • 分析型数据库会将操作型数据库中的数据作为主要数据源。

1.2. 早期数据库模型

  • 层次数据库模型(hierarchical database model)

    • 优点:可以迅速的检索到数据
    • 优点2:可以内嵌参照完整性(referential integrity)
    • 缺点:数据冗余问题,复杂关系相关问题
  • 网状数据库模型(network database model)
    • 优势:快速的数据访问
    • 优势:创建更复杂的查询
    • 缺点:用户必须熟悉数据库的结构
    • 缺点:很难在不影响与之交互的应用程序的条件下,改变数据结构。
  • 关系数据库模型
    • 模型建立在两个数学分支上:集合论(set theory)和一阶谓语逻辑
    • 检索数据:使用结构化的查询语句(SQL)
  • 优势:内置多层次完整性、数据在逻辑和物理上都独立于数据库应用、确保数据一致性和准确性、简便的数据检索

1.3.关系数据库管理系统

  • 关系数据库管理系统(RDBMS)是一种应用程序,可以用它来创建,维护,修改以及操作关系数据库。

1.4.后关系模型

  • 面向对象(object-oriented)数据库以及对象关系(object-relational)

2.设计目标

2.1. 为什么要关注数据库设计

数据库设计对于数据库的数据的一致性、完整性和准确性至关重要。

2.2. 理论的重要性

理论的主要优点在于帮助人们预测结果,保证信息的准备性。

2.3. 学习优秀设计方法学的益处

  • 提供设计健全的数据库所需的技能
  • 提供一系列组织有序的技术引导你逐步完成设计过程
  • 帮助你将失误和设计重复降至最低
  • 让设计过程变得更为简单,并减少设计数据库所花的时间
  • 帮助你更充分、更高效的理解和使用RDBMS医用程序。

2.4. 优秀设计的目标

  • 数据库应支持设定的和即时的信息检索
  • 正确且高效地构建表
  • 数据完整性落实到字段,表以及关系层次
  • 数据库支持与组织相关的业务规则
  • 数据库适应未来发展

2.5. 优秀设计的好处

  • 数据库结构易于修改和维护
  • 数据易于修改
  • 信息易于检索
  • 终端用于应用易于开发和创建

2.6. 数据库设计方法

  • 传统设计方法

    • 需求分析(requirements analysis):进行调查,评估当前系统,分析未来需求,评估企业整体信息需求。
    • 数据建模(data modeling):实体关系图(ER),语义对象建模,对象角色建模以及UML建模。
    • 规范化(Normalization):是将大表分解为小表的过程,目的在于减少冗余数据和重复数据,并避免插入,更新以及删除数据时产生问题。
      • 范式:详解1,详解2

        1. 第一范式:第一范式就是无重复的列。
        2. 第二范式:第二范式就是非主属性完全依赖于主关键字
        3. 第三范式:第三范式就是属性不依赖于其它非主属性。
        4. 第四范式:第四范式就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
        5. 第五范式:消除了4NF中的连接依赖
        6. 第六范式:所有第六范式的关系同时满足第5范式与DK范式
        7. BC范式
        8. 域键范式

2.7. 规范化

规范化的中提出的问题:

  1. 根据完全范式化,找到理想的表结构的属性
  2. 用这个理想表做为整个数据的设计过程的模型

3.术语

3.1. 术语为何重要

  • 用于表达和定义关系数据库模型的特殊思想和概念
  • 用于表达和定义数据库设计过程本身
  • 用于讨论关系数据库或RDBMS

3.2.术语分为四类:

  1. 值的术语(value_related)
  2. 结构的术语(structure-related)
  3. 关系的术语(relationship-related)
  4. 完整性的术语(integrity-related)

3.2. 关于值的术语

数据

存储在数据库中的值就是数据

信息

信息就是你以这样一种方式进行处理的数据–让其在被使用和观察的时候变得有意义和有效用。

空值(null)

代表一个缺失或未知的值,不代表零或者空格字符串

  • 零具有多种含义
  • SQL对空格字符串看成一个有效字符串
  • 一个零长度字符串,即’'对了SQL也是可以接受的

Null的值

缺省值通常是人为的失误造成的结构。

null 所带来的问题

null主要缺点在于对数学运算有不利影响。

关系类型

  • 一对一关系
  • 一对多关系
  • 多对多关系

参与的类型

  • 如果在想TABLE_B输入数据之前,必须向TABLE_A输入至少一条记录,那么TABLE_A的参与就被视为强制的
  • 如果在向TABLE_B输入记录之前,无须想TABLE_A输入任何记录,那么TABLE_A的参与就是可选的。

关于完整性的术语

  • 一般元素:包括名称、描述、父表等
  • 物理元素:包括数据类型、长度、显示格式
  • 逻辑元素:包括所需值、值得范围、默认值

数据的完整性

数据库中的数据的有效性、一致性、准确性。

  • 表层次完整性:实体完整性
  • 字段级完整性:域完整性
  • 关系层次完整性:参照完整性
  • 业务规则:企业认知和使用数据的方式。

4.概念性概述

4.1.完成设计过程的重要性

务求一次成功,否则贻误再三

4.2.明确宗旨和任务目标

数据库设计过程的第一阶段就是明确宗旨和任务目标。

4.3.分析现有的数据库

4.4.创建数据结构

4.5.确定和建立表关系

4.6.确定和定义业务规则

4.7.确定和定义视图

4.8.审核数据完整性

5.大幕开启

5.1.开展访谈

访谈是数据库设计必不可少的一部分。

5.2.参与者指南

  • 让参与者知晓你的意图
  • 让参与者知道你感谢他们的参与,他们对访谈问题的回答对整个设计过程都具有重要价值
  • 如果产生争议,确保每个人都知道你是正确的冲裁人

5.3.采访者指南

  • 访谈室选取光线充足,原理噪声的房间,并配备大桌子和舒服的座椅
  • 每次访谈限制人不不超过10人
  • 对用户和管理人员分别访谈
  • 如必须对多组人员进行访谈,可为每个组安排一个组长
  • 在访谈之前准备好问题
  • 如果你不擅长记笔记,就为每次访谈安排可靠的记录者或经小组去壳使用数字记录器对访谈进行记录
  • 给与每个人同等的关注
  • 保持访谈的节奏
  • 始终控制好访谈

5.4.明确宗旨

宗旨表述就应当条理清晰,不拖泥带水。

5.5.制定宗旨

制定宗旨规范:

  • 如何向客新客户介绍企业的目标呢
  • 你认为i企业的目标是什么
  • 企业的主要作用是什么
  • 你如何描述企业的作用呢
  • 你如何阐述也起踩在的最重要的原因呢
  • 企业的主要着眼点是什么

5.6.明确任务目标

任务目标就是指数据库中数据所支持的总任务,任务目标也是明确数据库中的各种结构,引导数据库总体开发方向

5.7.制订任务目标

制定任务目标包括开展对用户与管理人员的访谈和基于访谈收集道的信息编写任务目标。

6.分析现有的数据库

6.1.了解现有数据库

欲知路向何方,必先知身在何处

  • 判断数据库是否满足当前机构信息要求
  • 发现现有结构缺陷
  • 决定数据库该如何进化,从而满足将来机构信息要求。

机构很有可能正在使用的数据库与以下几类有关

  • 纸质数据库(paper-based database,也称为档案系统(file system))
  • 遗留数据库(legacy database)
  • 人类知识库(human-knowledge base)

规则:切勿将当前数据库结构用作新数据库结构

纸质数据库

纸质数据库包含时候纸笔记录,存储和维护的数据,他们形式多样,大小不一,构造也不尽相同。分析这种数据库的唯一目的是找出可以融入新数据库的项。

遗留数据库

遗留数据库是指存在和使用至少五年的数据库。

6.2.开展分析

分析过程分三步:审核数据收集方式,复查信息呈现方式,以及开展用户和管理人员访谈。

6.3.了解如何收集数据

收集方式,包括从索引卡和手写或打印报表,道预印表格和数据输入界面的所有数据。

6.4.了解如何呈现信息

三种呈现方式:

  1. 报表(report)
  2. 幻灯片(slide show)
  3. 网页(web page)

6.5.开展访谈

  • 为之前评审阶段收集的样本提供细节信息
  • 提供关于机构使用数据方式的信息
  • 有助于定义初始字段的和表结构
  • 有助于定义未来信息要求

6.6.基本访谈技巧

  • 问题的重要性:学习如何提问时一项有价值的技巧
  • 访谈过程:在访谈中,同时使用开放式和封闭式问题
  • 确定主题:提出开放式问题,确定回答中暗含的主题。
  • 确定特征:选择其中一个主题并提出与只相关的后续问题。

6.7.用户访谈

  1. 用户当前使用的数据类型
  2. 用户当前如何使用数据
  3. 前面两个分析话环节收集到的样本。
  4. 用户日常工作中要求的信息类型

6.8.评审数据的类型和用途

6.8.评审样本

6.9.评审信息要求

  • 当前信息要求
  • 附加信息要求
  • 未来信息要求

6.10.管理人员访谈

  • 管理人员当前接受的信息类型
  • 管理人员需要的附加信息类型
  • 管理人员预计未来所需要的信息类型
  • 管理人员对机构总体信息要求认识。

评审当前信息要求

评审附加信息要求

  1. 与参与者再次评审报表样本,并询问是否还有需要添加的报表中的附件信息
  2. 让参与者将附加信息附注在相应额报表上,指明该信息必要的原因。
  3. 找出附件信息中的新主题及特征,并添加到相应的列表中
  4. 回顾报表,如有任何疑虑,即与参与者进行讨论。解决掉这些问题这一个过程也就完成了

评审未来信息的要求

6.11.编辑完整字段列表

  1. 评审的精简特征列表

    • 精简名称相同的项
    • 精简表示相同特征的项
    • 确保项与特征正确对应
  2. 确认样本中是否有新的特征
  3. 计算字段列表
  4. 与用户和管理人员评审列表

7.建立表结构

7.1.定义初始表列表

  • 确定隐含主题
  • 使用主题列表
    • 消除重复项
    • 消除表示相同主题的项
    • 合并主题列表和初始字段列表中的项
  • 使用任务目标

7.2.定义最终表列表

  • 改进表名称

    • 制定的表名称应该独特月有意义
    • 表名称应明白无误展现其主题
    • 表名称应尽量精简
    • 避免使用描述物理特性的词语
    • 避免使用缩略语
    • 避免使用专有名称或其他过多限制输入数据的词语
    • 避免使用隐含或显示指明多个主题的名称
    • 使用复数形式
  • 指明表类型
    • 数据、联系、子集、验证
  • 编辑表描述
    • 对表进行准确定义
    • 解释该表对企业的重要性
    • 描述务求简明扼要
    • 避免提及具体操作信息,比如该表使用的方式和适用场合
    • 不同表描述之间保持独立
    • 避免使用示例
  • 用户和管理人员访谈

7.3.字段对应入表

7.4.精简字段

  • 字段名称应独特且富有内涵

  • 字段名称应简明扼要,准确描述字段所代表的特征

  • 字段名称应务求精简

  • 切勿使用缩略语,慎用缩写词

  • 切勿使用混淆字段名称含义的词语

  • 避免使用隐含或显示多个特征的名称

  • 使用名称的单数形式

  • 使用理想字段解决异常现象

    • 代表表主题的鲜明特征
    • 仅包含一个值
    • 无法分解为更小的元素
    • 不含计算值或串联值
    • 在整个数据库结构中独一无二
    • 主要特性始终保持不变
  • 消除复核字段

  • 消除多值字段

    1. 将该字段从表中移除,以之作为基础创建一个新的表。
    2. 从原表中采用一个字段建立起原表与新表的联系
    3. 为新表制定合适的名字、类型和描述,并添加到最终表列表中
  • 精简表结构

    1. 谈谈冗余数据和重复字段:两种情况所属字段建立起两表之间的联系,某些字段或表出现异常。
    2. 重复字段:成因,用于将一组表联系起来,表明特定类型的值出现两次,对附件信息有需求倾向
  • 参照理想表精简表结构

    1. 理想表的要素

      1. 表示单个主题,可以是一个对象或事件
      2. 拥有一个主键
      3. 不含重合字段或多值字段
      4. 不含计算字段
      5. 不含无用的重复字段
      6. 冗余数据量保持最低水平
    2. 消除无用的重复字段
  • 建立子集表

    • 精简之前未发现的子集表

      1. 消除子集表所有相同的字段,并使用这些字段建立新的数据表
      2. 确认新数据表表示的主题,然后为其指定合适的名称
      3. 确保子集表表示该数据表的从属主题,如有必要,修改子集表名称
      4. 为数据表编写合适的描述,然后将它添加到最终表列表中。

8. 键

8.1. 键为何重要

键对于表结构的重要的原因如下

  • 确保准确识别表中每个记录
  • 有助于建立并实施各种完整性
  • 用于建立表关系

8.2. 为每个表建立键

键的类型有四种:

  • 候选键:指可唯一识别表主题一个实例的一个或一组字段。

    • 不得为复合字段
    • 必须包含唯一值
    • 不得包含null值
    • 其值不得违反机构安全或隐私规则
    • 其值无论部分或整体都不是可选值
    • 包含定义唯一性所需的最少字段
    • 其值必须时识别表中每个记录的独特和唯一识别方式
    • 其值必须是给定记录中每个字段值的唯一识别方式
    • 除非特殊情况,否则不得修改其值
  • 人造候选键
    • 当你判断一个表不含候选键时,可以创建和使用人造(artificial)或代理(surrogate)候选键
  • 主键
    • 当单字段候选键和复合候选键同时存在时,选择单字段候选键
    • 选择名称中包含部分表名称的候选键
    • 主键的要素
      • 不得为复合字段
      • 必须包含唯一值
      • 不得包含null值
      • 其值不得违反机构安全和隐私规则
      • 其值无论部分或整体都不是可有可无的
      • 包含定义唯一性所需的最少字段
      • 其值必须时识别表中每个记录的独特和唯一识别方式
      • 其值必须时给定记录中每个字段值的唯一识别方式
      • 除非特殊情况,否则不得修改其值
    • 判读主键是否完全满总这一要素
      1. 向该表中加载样本数据
      2. 选择一个记录用于测试,记录当前主键值
      3. 检查主键后第一个字段的值
      4. 继续这一过程,直至检查完记录中的每个字段值
    • 创建主键的规则
      1. 每个表有且仅有一个主键
      2. 数据库中每个键必须为唯一的,即任意两个表不得有相同的主键,除非其中一个为子集表
  • 替换键
  • 非键

表层次完整性

优点

  1. 表中无重复记录
  2. 主键为表中每个记录的唯一识别方式
  3. 每个主键值时唯一的
  4. 主键值不为null

评审初始表结构

  • 确保合适主题在数据库中被表达
  • 确保表名称和表描述规范且准确易懂
  • 确保字段名称规范且准确易懂
  • 核实已指定到表的所有字段

9.字段说明

9.1.字段说明为何重要

  • 字段说明有助于建立和执行字段级完整性
  • 为每个字段定义字段说明能提升整体数据完整性
  • 定义字段说明能获得对数据的性质和用途的完整认识
  • 字段说明构成数据库的“数据字典”

9.2.字段级完整性

  • 字段特性和用途明确,它所出现的表都得到正确的识别
  • 整个书库中字段定义一致。
  • 字段的值一致且有效
  • 修改、比较和操作字段值所运用的方法有了明确的界定

理想字段的要素

  • 代表表主题的鲜明特征
  • 仅包含一个值
  • 无法分解为更小的元素
  • 不含计算值或串联值
  • 在整个数据库结构中独一无二
  • 主要特性始终保持不变

9.3.字段说明之剖析

每个类别中的元素

  • 一般元素:字段名称(field name)、父表(parent table)、标签(label)、说明类型(specification type)、源说明(source specification )、共享(shared by)、别名(alias)、描述(description)
  • 物理元素:数据类型(data type)、长度(length)、小数位(decimal places)、字符支持(character support)、输入掩码(input mask)、显示格式(display format)
  • 逻辑元素:键类型(key type)、键结构(key structure)、单值性(uniqueness)、null支持(null support)、值的输入者(values entered by)、要求值(required value)、默认值(default value)、值的范围(range of values)、编辑规则(edit rule)、允许的比较(comparisons allowed)、允许的运算(operations allowed)

9.4.使用独特、通用和可复制的字段说明

  • 在整个数据库中仅出现一次的字段或主键字段可使用独特字段说明
  • 在整个数据库中作为其他字段模板的字段可使用通过字段说明。
  • 基于给定通用字段的字段或作为表关系中外键的字段可使用可复制的字段说明

9.5.定义每个字段的字段说明

10.表关系

10.1.关系为何重要

  • 对于存在逻辑联系的两表,可在两表之间建立连接
  • 有助于进一步改进表结构和将冗余数据减至最少
  • 这种机制能实现同时从多个表中提取数据。

10.2.关系的类型

两表之间可存在三种关系:一对一、一对多、多对多

一对一关系数据表符号:

一对多的关系数据表示符号:

多对多的关系数据表示符号:

不正确建立关系,会遇到以下问题

  • 从其中的表检索信息将变得烦琐,甚至困难
  • 一表中将包含大量冗余数据
  • 量表中都存在重复数据
  • 难以插入、更新和删除数据。

10.3.自联结关系

一对一的关系示意图:

一对多关系示意图:

多对多关系示意图:

10.4.识别现有关系

建立表矩阵有助于识别现有关系

可以向参与者提出下列两类问题

  1. 关联型,这类问题简单直接,通常可以直接提出
  2. 情景型,表示主题的单一实例与另一表所表示主题的多个实例进行对比。

具体步骤:

  1. 选取两个表,注意两表交会的条目。
  2. 在矩阵查找与第一个表同一侧的第二个表,注意它和矩阵另一侧的第一个表交会的条目
  3. 对这两个条目运用相应的公式,识别这两表之间正式关系
  4. 画出该关系的示意图
  5. 在矩阵中划掉这两个条目

注意:有时会发现难以识别特定两个表之间的确切关系。如果遇到这种情况,可直接向表中加载一些样本数据。

10.5.建立关系

  • 一对一的关系:一个表作为父表,另一个表作为子表
  • 一对多的关系:建立一对多关系所运用的技巧与建立一对一关系关系的技巧相似。
  • 多对多的关系:建立多对多关系要借助一个联系表

10.6.自引用关系

一对一,一对多,多对多关系

10.7.评审表结构

理想表的要素

  • 表示单一主题,包含物体和事件
  • 拥有一个主键
  • 不得包含复核字段或多值字段
  • 不得包含计算字段
  • 不得包含无用重复字段
  • 包含的冗余数据量仅为最低水平

10.8.改进所有外键

外键要素

  • 与相应被复制的主键名称相同
  • 使用被复制主键的字段说明副本
    • 说明类型
    • 父表
    • 源说明
    • 描述

修改外键字段说明逻辑元素中的五个元素

  • 键类型
  • 单值性
  • 值的输入者
  • 值的范围
  • 编辑规则
  • 从它所参照的主键中提取值

10.9.建立关系特征

为每个关系定义删除规则:这个规则决定了用户发出请求,要求删除关系的父表中的特定记录,RDBMS程序所应做出的反应。

否定规则使用(D),限制规则使用(R),级联规则使用(C),作废规则使用(N),默认设置规则使用(S)

删除规则:

  1. 不能删除当前员工管理者的记录(使用限制规则)
  2. 如果要删除某管理者记录,就必须线将他负责管理的员工分派给其他管理者(使用限制规则)
  3. 如果要删除某管理者记录,那么ManagerID就必须从他负责管理的每位员工记录中删除(使用作废规则)

10.10.识别每个表的参与度

既然已经识别关系中每个表的参与类型,就必须也确定每个表的参与度。

10.11.与用户和管理人员验证表关系

  1. 确保正确识别每个关系
  2. 确保正确建立每个关系
  3. 确保每个外键满足外键的要素
  4. 确保为每个关系建立了合适的删除规则
  5. 确保正确识别表间关系的每个表和自引用关系的相应键字段的参与类型
  6. 确保正确是被表间关系的每个表和自引用关系的相应键字段的参与度

10.11.关系层次的完整性

  • 关系中两表(或键字段)之间的连接合理健全
  • 以一种由意义的方式向每个表中插入新记录
  • 删除现有记录,不会带来任何不利影响
  • 合理限制关系中相关记录的数量

11.业务规则

11.1.什么是业务规则

业务规则表示对数据库特定方面实施的某种形式的限制,比如特定字段说明中的元素和给定关系的特征。

典型的业务规则示例:

对于任意订单,Ship Date不得早于Order Date

11.2.业务规则类型

业务规则主要分为两种,面向数据库和面向应用程序。

  • 面向数据库业务规则规定的限制,可以在数据库的逻辑设计中建立。
  • 面向应用程序业务规则规定的限制,不能再数据库的逻辑设计中建立,而是必须再数据库的物理设计或数据库应用程序的设计中建立。

典型面向应用程序的业务规则的一个示例

拥有“优先“级别的顾客的所有采购均享受15%的折扣

11.3.业务规则的分类

字段特有业务规则

施加限制的对象是特定字段说明中的元素。给定规则所影响的元素数量取决于定义该规则方式。

关系特有业务规则

11.4.定义和建立业务规则

于用户和管理人员合作

定义和建立字段特有业务的规则

  1. 选取一个表
  2. 分别评审每个字段并判断它是否需要限制
  3. 为字段定义必要的业务规则
  4. 修改相应的字段说明元素,建立规则
  5. 选定测试该规则的操作
  6. 将该规则记录在业务规则规范表中
    1. 可以将所有面向数据库的业务规则使用文档记录
    2. 可以将所有面向应用程序的业务规则使用文档记录
    3. 为记录所有业务规则提供一种标准方法
      • 陈述:描述业务规则本身的文本
      • 限制:简单说明该限制如何运用到相应的表或字段
      • 类型:指示该规则属于面向数据库或面向应用程序类型
      • 分类:指示该规则属于字段特有或关系特有
      • 测试方法:指示测试该业务规则所施加限制的方法(插入、删除、更新)
      • 受影响结构:根据业务规则的类型,该限制将影响某个字段或关系。
      • 受影响的字段元素:字段特有业务规则会影响到该字段说明的一个或多个元素。
      • 受影响关系特征:关系特有业务规则会影响到该关系的一个或多个特征。
      • 采取的措施:此处指示对字段说明的元素或关系示意图所做的修改。
  7. 定义和建立关系特有业务规则
    1. 选取一个关系
    2. 评审该关系并判断它是否需要限制
    3. 为该关系定义必要的业务规则
    4. 修改相应关系特征,建立规则
    5. 选定测试该规则的操作
    6. 将该规则记录在业务规则规范表中
  8. 验证表
  9. 使用验证表支持业务规则

11.5.评审业务规则规范表

建立业务规则之后,评审其规范表。认真检查每个规范表,确保规则建立规范,规范表中所有区域填写正确。

12.视图

视图是由数据库中的一个或多个表中字段组成的虚拟表。

使用视图的几个理由:

  • 可同时处理取自多个表中的数据。
  • 放映最新的信息。
  • 根据个人或群体的特定需求定制
  • 由助于实施数据完整性
  • 用户保密何安全用途

12.1.视图之剖析

定义的视图分为三种:数据视图、聚合视图、验证视图。

在RDBMS中实现的数据库时,可以定义的视图则包括物化视图何分隔视图。

数据视图

这种视图用户检查何操作来自一个或多个基表的数据。

  • 单表数据视图
  • 多表数据视图
  • 聚合视图
  • 验证视图
  • 确立视图
    • 和代表们一道回顾你的记录
    • 回顾设计早期阶段收集的数据输入、报表和演示样本
    • 检查表及其所表示的主题
    • 分析表关系
    • 研究业务规则
  • 定义视图
  • 使用视图规范表记录视图
    • 名称:指示该视图的名称
    • 类型:指示所定义的视图类型为数据、聚合和验证视图
    • 基表:指示该视图基表的名称。
    • 计算字段表达式:指示该视图中所包含计算字段的表达式。
    • 过滤器:指示该视图显示记录的过滤条件。
  • 评审每个视图的文档记录
    • 确保正确定义视图
    • 确保所有创建的是计算字段使用于该视图
    • 确保过滤器检索要求的记录
    • 最重要的时,确保每个视图都有对应的示意图和规范表

13.评审数据完整性

  • 了解关系数据库模型的优势并与其他数据库模型进行比较
  • 为新数据库指定宗旨
  • 为新数据库定义任务目标
  • 对原有数据库进行完整分析
  • 识别机构信息要求
  • 为所有适宜的表定义结构
  • 为每个表指定主键
  • 为每个字段建立字段说明
  • 建立表关系
  • 定义和建立业务规则
  • 定义所有适宜的视图
  • 建立整体数据完整性

13.1.为什么要评审数据完整性

要确保投入如此多精力得以建立的数据完整性臻于完美。

13.2.评审和改进数据完整性

表层次完整性

  • 表中无重复字段
  • 表中无计算字段
  • 表中无多值字段
  • 表中无复合字段
  • 表中无重复记录
  • 表中每个记录都通过一个主键值识别
  • 每个主键都满总主键的要素

字段级完整性

  • 确保每个字段复核理想字段的要素
  • 确保为每个字段定义一套字段说明。

关系层次完整性

  • 建立恰当关系
  • 定义和的删除规则
  • 准备识别每个表的参与类型
  • 为每个表确立适宜的参与度

业务规则

  • 每条规则施行有意义的限制
  • 为规则选择合适的类别
  • 正确定义和建立每条规则
  • 修改适宜的字段说明元素或表关系特征
  • 建立适宜的验证表
  • 为每条规则建立业务规则规范表

视图

  • 每个视图都包含必要的基表,以提供所要求的信息
  • 为每个视图指派合适的字段
  • 每个计算字段提供相关信息或改善该视图展示数据的方式
  • 每个过滤器返回适宜的记录集合
  • 每个视图都有视图示意图
  • 每个视图示意图具有对应的视图规范表

13.3.汇编数据库文档

  • 字段表列表
  • 字段说明表
  • 计算字段列表
  • 表结构示意图
  • 关系示意图
  • 业务规则规范表
  • 视图示意图
  • 视图规范表

文档资料的重要性体现在三个方面:

  1. 为数据库结构提供完整的记录
  2. 为实现过程应该如何创建数据库提供一整套规范和操作说明
  3. 在实现过程中,如有必要修改数据库结构,这套设计文档资料就可以用于判定任何修改的影响和结果。

14.设计不当–禁忌事项

14.1.平面文件设计

这个结构的问题:

  • 复核字段
  • 计算字段
  • 无用重复字段
  • 无真正主键
  • 这个表表示多个主题

14.2.电子表格设计

  • 重复字段
  • 复核字段
  • 多值字段
  • 难以使用

14.3.摒弃电子表格视图思维定式

14.4基于数据库软件设计数据库

  • 可能基于主观判断对设计做出决策
  • 由于疏忽大意,让RDBMS指定的数据库设计完全背离了机构信息要求
  • 对RDBMS的了解程度限制设计水平
  • 设计受自身对RDBMS的熟练程度所限
  • 使用这钟方法设计数据库通常导致结构设计不当,数据完整性不足,以及数据不一致和信息不准备
  • 最后,你熟知且喜爱的RDBMS也许不能适应机构数据库要求

15.打破规则

15.1.何种情况下可以打破规则

  • 设计分析型数据库
  • 提升处理性能

15.2.提升性能首选其他方式

  • 提升或更新计算机硬件
  • 调整操作系统软件
  • 评审数据库结构
  • 评审数据库的实现过程
  • 评审数据库的应用程序

15.3.记录行动

  • 打破规则的原因
  • 违反的设计原理
  • 修改的数据库部分
  • 所作的修改
  • 对数据库和应用程序预期的影响

学习自己动手设计数据库相关推荐

  1. 数据库学习:高并发数据库设计

    数据库学习:高并发数据库设计 随着乐视硬件抢购的不断升级,乐视集团支付面临的请求压力百倍乃至千倍的暴增.作为商品购买的最后一环,保证用户快速稳定的完成支付尤为重要.所以在15年11月,我们对整个支付系 ...

  2. 基于JAVA在线多媒体学习社区的设计与实现计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA在线多媒体学习社区的设计与实现计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA在线多媒体学习社区的设计与实现计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: ...

  3. SSM在线学习网站的设计与实现毕业设计源码011451

    摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对网络在线学习等问题,对 ...

  4. 自己动手设计一款iOS自动构建发布工具

    2019独角兽企业重金招聘Python工程师标准>>> 自己动手设计一款iOS自动构建发布工具 一.引言 在iOS开发中,你可能经常会遇到这样的场景: 自己负责的功能模块开发完成后, ...

  5. MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  6. MySQL学习笔记03【数据库表的CRUD操作、数据库表中记录的基本操作、客户端图形化界面工具SQLyog】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  7. MySQL学习笔记01【数据库概念、MySQL安装与使用】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  8. EA强大的画图工具---设计数据库表格

    关于EA这个优秀的软件是从师哥哪里听来的,自己瞎点了点,感觉也没什么.最近和和智福加上一个师哥合作敲机房收费系统时,想到之前听人说EA很强大,便随便找了找关于EA使用的帮助手册.果然惊喜-- 如题,这 ...

  9. 学习sql注入:猜测数据库_面向数据科学家SQL:学习简单方法

    学习sql注入:猜测数据库 We don't pick a hammer and look for nails - that would be an unusual way of solving pr ...

  10. 在sqlyog进行数据库的备份_狂神说MySQL07:权限及如何设计数据库

    狂神说MySQL系列连载课程,通俗易懂,基于MySQL5.7.19版本,欢迎各位狂粉转发关注学习.禁止随意转载,转载记住贴出B站视频链接及公众号链接! 上课视频同步文档 权限及设计数据库 用户管理 使 ...

最新文章

  1. java 字符串写入word,JAVA 将字符串hollow 替换成word肿么实现?
  2. ThinkPHP第二十三天(Category表结构、PHPExcel导入数据函数)
  3. 用c语言编译二叉树,C语言实现二叉树的基本操作
  4. Linq 下的 Take() 方法内部机制是怎样的?
  5. 微软为 Visual Studio 推出新的 Razor 编辑器
  6. 启动时指定需要绑定的网卡_为什么小型汽油机在启动时需要拉风门,而汽车却不用?...
  7. 【Java】HashMap构建登录程序
  8. 破解缝隙之谜[转载自 http://learning.artech.cn/]
  9. surfaceflinger类图
  10. 1.2 Linux的网络配置和连接工具
  11. Android下最简单的Audio Player
  12. Windows下安装Telnet工具
  13. 四年级计算机上册课程标准,新课程标准人教版四年级上册数学全册教案设计
  14. 白话布隆过滤器(BloomFilter)
  15. 1024info .php,GitHub - dingusxp/code1024
  16. 【读书笔记】曾国藩的正面与侧面(二)
  17. 计算机上发出打印命令,从计算机上发送打印命令后打印机不打印怎么办
  18. [Mac软件推荐] 三款提高 Mac 使用效率的必备软件
  19. 鸿蒙os系统的iphonexr,现在买iPhoneXR还合适吗?过来人的忠告:看清这3点再做决定!...
  20. 失物招领|基于Web的校园失物招领系统的设计与实现

热门文章

  1. 最大后验估计_极大似然估计 V.S. 贝叶斯估计
  2. In file included from /usr/include/stdio.h:27:0, from btest.c:16: /usr/include/feat出错的解决办法
  3. java集合框架中迭代器的作用_Java中的集合框架之迭代器
  4. 在IDEA中玩转DEBUG模式,有BUG不会调试?不存在的。
  5. (8)Redis-Cluster集群理论及实践【中】
  6. code review的一些思考
  7. 树链剖分入门+博客推荐
  8. HDFS简介及其功能
  9. CentOS7默认安装PHP不支持mysql的办法
  10. 什么情况下使用weak关键字,相比assign有什么不同