自己动手设计数据库

  1. 关系数据库
    1. 数据库类型:操作型数据库,分析型数据库
    2. 数据库模型:层次,网状,关系;
    3. 关系数据库的优势
      1. 内置多层次的完整性
      2. 数据在逻辑和物理上都独立于数据库应用;
      3. 确保数据一致性和准确性;
      4. 简便的数据检索;
  2. 设计目标
    1. 数据库设计对于保持数据的一致性,完整性和准确性至关重要;
    2. 优秀设计的目标
      1. 支持设定和即时的信息检索;
      2. 正确且高效地构建表;
      3. 数据完整性落实到表,字段,以及关系层次;
      4. 数据库支持与业务相关的业务规则;
      5. 数据库适应未来的发展;
    3. 优秀设计的好处
      1. 易于检索;
      2. 易于修改和维护;
      3. 易于开发和创建应用;
    4. 数据库设计方法
      1. 需求分析
      2. 数据建模
      3. 规范化;
  3. 术语
    1. 数据与信息:后者是前者有意义的展示;存储的是数据,检索的是信息;
    2. null:代表一个缺失或未知的值;
    3. 表:
      1. 每个表代表一个单独的特定主题,可以是一个对象,或者一个事件;
      2. 数据表:存储数据以提供信息;
      3. 验证表:存储专门用于实现数据完整性的数据;验证表通常用来表示主题
    4. 字段
      1. 设计得当的数据库中,每个字段有且仅有一个值;设计不当或者差劲的数据库中,则存在复合字段,多值字段,计算字段;
    5. 视图
      1. 一个虚表,由数据库中的一个或多个表的字段组成;
      2. 它只从表中获取数据,并不存储数据,所以叫虚表;Access 称呼它为已保存的查询;
      3. 视图的好处:多表,最新,安全,定制,完整
        1. 可用于同时处理多个表中的数据;
        2. 可用于防止用户查看或操作单个表或一组表中的特定字段;
        3. 可用于实现数据完整性(验证视图)
      1. 主键:每个表都必须有一个主键;
      2. 外键:另外一个表的主键,在当前表中称为外键(在一对一的表中,二者合二为一)
    6. 关系
      1. 一对一
      2. 一对多:最为常见的一种关系,有助于消除重复数据,把冗余数据保持在最低水平;
      3. 多对多:通过联系表,将两张表联系起来;
    7. 参与的类型
      1. 可选
      2. 强制
      3. 参与度:可用于实现业务规则的限制;
    8. 字段说明
      1. 一般元素:字段名称,字段描述
      2. 物理元素:数据类型,长度,显示格式;
      3. 逻辑元素:必需值,值范围,默认值;
    9. 数据完整性
      1. 有效性,一致性,准确性;
      2. 表层次完整性;
      3. 字段级完整性;
      4. 关系层次完整性;
      5. 业务规则;
  4. 概念性概述
    1. 完成设计过程的重要性:唯有贯彻执行完整的设计过程,才能保证数据库结构健全,数据完整;
    2. 设计阶段
      1. 明确宗旨和任务目标;
        1. 宗旨表明了数据库的目标,用于确定数据库的用途;
        2. 任务目标是用户可以对数据库的数据执行的常规任务;
      2. 分析现有数据库
        1. 观察:
          1. 如何收集数据
          2. 如何展示数据
          3. 如何使用数据:普通用户,管理人员;
        2. 编辑一个初始字段列表,移出所有计算的字段并放进单独的列表中(未来在视图中实现);
        3. 将初始字段列表发给用户和管理人员手中,进行简单审核,并提出可能的修改意见,鼓励其反馈信息;
      3. 创建数据结构
        1. 根据前两个阶段的成果,确定表将表示的各个主题,然后为这些主题创建表,并将其与字段列表相匹配,确保每个表只表示一个主题且不包含重复的字段;
        2. 审核表中的每个字段,提炼表中的复合字段和多值字段,确保它们分别只包含单一值,并将与该表主题不相符的字段剔除;
        3. 为每个表创建合适的键,确保每个表都拥有正确定义的主键,唯一标识表中的每条记录;
        4. 为每字段创建字段说明,可以开展用户访谈,了解他们看重的字段特征,审核和讨论他们不熟悉的特征;
        5. 编写字段说明,完成后,再与用户和管理人员过一次审核,并适当做出改进;
      4. 确定和建立表关系
        1. 用户访谈,发现关系,确定关系特征,建立关系(一对一,一对多,多对多);
        2. 使用主键或关联表建立每种关系中表之间的逻辑联系;
        3. 确定每种关系中表的参与类型与参与度;
      5. 确定和定义业务规则
        1. 开展访谈,确定数据库各方面的限制,建立业务规则;
        2. 定义和实现验证表,以支持某些业务规则;
        3. 业务规则的定义是一个持续、重复的动态过程;
      6. 确定和定义视图
        1. 开展访谈,确定数据库的使用方式,建立视图(视图更直接的反映数据库的使用方式,表则相对来说更加抽象一些,颗粒度更小);
        2. 通过了解用户使用数据库的方式,确定需要建立的视图类型(有几种类型?3种,数据,聚合,验证)(每个用户以各自不同的方式来访问信息,可以通过视图来解决这些问题)
        3. 使用适当的表和字段,定义访谈过程中确定下来的视图,并根据特定的信息检索需求,为这些视图建立标准;
      7. 审核数据完整性
        1. 审核每个表,检查每个表中的字段,确保结构合理,表层次的完整性;
        2. 审核每个字段的字段说明,确保字段级的完整性;
        3. 审核每种关系的有效性,确认关系类型,以及确定关系中每个表的参与特征,确保共享字段之间存在匹配值,以及关系中两表之间不存在插入,更新或删除数据的问题;
        4. 审核业务规则,确认数据库各方面的限制;
  5. 明确宗旨和任务目标
    1. 第一步,确定和表明数据库的目标,定义用户可以执行的任务清单;
    2. 开展访谈
      1. 参与者指南
        1. 让参与者知道你的意图
        2. 让参与者知道你感谢他的参与
        3. 如果发生争议,确保每个人知道你是正式仲裁人;(如果是与数据库无关的问题,则应咨询相关的权威人士)
      2. 采访者指南
        1. 让人放松的访谈环境,比如光线明亮的房间,舒适的沙发;
        2. 限制访谈人数(个人在集体中的表现会有所不同,并更多受到他人的影响)
        3. 对用户和管理人员分开访谈;
        4. 如果必须对多组人员进行访谈,为每个小组安排一个组长;
        5. 在访谈之前准备好问题(开放式问题)
        6. 如果不擅长笔记,可以使用录音或录像的方式进行辅助;
        7. 给予每个人同等的关注(信息的来源越多,越能够看清楚全貌)
        8. 保持访谈的节奏,控制好时间和主题;
    3. 明确宗旨
      1. 避免出现直接表述任务的语句;
      2. 简明扼要,目标具体;
      3. 常用问题
        1. 如何向新客户介绍企业的目标?
        2. 你认为企业的目标是什么?
        3. 企业的主要作用是什么?
        4. 你如何描述企业的作用?
        5. 你如何阐述企业存在的最重要原因呢?
        6. 企业的主要着眼点是什么?
    4. 明确的任务目标
      1. 一个陈述句,语言简练,切中要点,准确明白;(有点类似于业务用例)
      2. 每个任务目标只包含一个任务,简单明确;
      3. 常见问题
        1. 你平常都做一些什么?
        2. 你如何定义自己的工作描述?
        3. 你使用什么类型的数据呢?
        4. 你开出的报表是什么类型的呢?
        5. 你记录什么类型的事件呢?
        6. 你的机构提供什么类型的服务呢?
        7. 你如何描述自己的工作?
  6. 分析现有的数据库
    1. 了解现有数据库,目标:
      1. 判断数据库是否满足当前机构的信息要求;
      2. 发现现有结构的缺陷;
      3. 决定数据库该如何设计,才能满足机构未来的信息要求;
    2. 需要回答以下问题
      1. 机构使用的是哪些类型的数据?
        1. 纸质数据库
        2. 遗留数据库:如果无人真正了解遗留数据库的结构,将每个数据库中的数据打印出来会非常有用;
        3. 人类知识库:存放在大脑中的经验和数据;
      2. 机构如何使用这些数据?
      3. 机构如何管理和维护这些数据?
    3. 开展分析
      1. 三个步骤:
        1. 审核数据收集方式;
        2. 复查信息呈现方式;
        3. 开展用户和管理人员访谈;
      2. 了解如何收集数据
        1. 审核所有纸质文档;
        2. 评审机构收集数据使用的所有计算机程序;
          1. 例如文字处理软件,电子数据表格等;
          2. 截屏软件进行截屏,放入WORD,标注源程序的名称,截屏日期,打印出文档;重复此步骤,收集完整,放入特定文件夹,以备后用;
        3. 检查机构通过互联网收集数据所用的网页(处理方法同第二点)
      3. 了解如何呈现信息
        1. 常见的三种呈现方法:报表,幻灯片,网页;
        2. 步骤
          1. 识别和评估机构的数据库生成的每份报表,不论是手写报表还是应用程序生成的报表;
          2. 审核使用或包含数据库中数据的幻灯片;
          3. 评审直接从数据库提取信息的网页;
    4. 开展访谈
      1. 访谈目的
        1. 为之前收集的样本提供细节信息;
        2. 了解机构使用数据的方式;
        3. 有助于定义初始字段和表结构,以及定义未来的信息要求;
      2. 基本访谈技巧
        1. 访谈过程
          1. 使用开放式问题,聚焦具体主题;封闭式问题适合聚焦某一具体的细节;
          2. 从开放式问题开始,为讨论确立若干一般主题;
          3. 注意让对方处于放松的状态;如果回答简短,表示其紧张拘束,可考虑选择一些不相关的话题,或者其更为熟悉和轻松的话题来作为开场;
        2. 确定主题
          1. 提出开放式问题,确定回答中暗含的主题:
          2. 可以通过从回答的句子中寻找名词来确定主题;
          3. 找到名称,写下来,形成主题列表;
        3. 确定特征
          1. 找到主题后,提出与之相关的后续问题,尽量获取该主题相关的更多细节;
          2. 寻找表示该主题特征的名词,通过与主题带有从属关系;
          3. 在另外的纸张上记下特征列表;
    5. 用户访谈
      1. 围绕四个问题展开
        1. 用户当前使用的数据类型;
        2. 用户当前如何使用数据;
        3. 评审收集的数据样本;
        4. 用户日常工作中要求的信息类型;
      2. 评审数据类型和用途:确定用户当前使用的数据类型以及如何使用这些数据支持工作;
      3. 评审样本:为每个样本提供描述,说明该样本的目的和用途;
      4. 评审信息要求
        1. 当前信息要求
          1. 评审报表样本是一个开户讨论的好方式;
          2. 判断数据源,确定该用户使用的所有数据,直接的,间接的;
        2. 附加信息要求
          1. 询问用户是否希望在报表中看到其他信息,让其在报表中写下来,并注明原因;
          2. 确定附件信息中是否有新主题或新特征;
        3. 未来信息要求
          1. 了解参与者眼中的机构未来发展所必需的信息;
          2. 可以通过呈现草图或原型图,让用户对这个问题更加有概念;
    6. 管理人员访谈
      1. 集中在以下四个问题
        1. 管理人员当前接收到的信息类型
        2. 管理人员需要的附加信息类型
        3. 管理人员预计未来所需的信息类型
        4. 管理人员对机构总体信息要求的认识
      2. 评审当前信息要求
        1. 了解管理人员的工作及与之对应的职责,一方面可以帮助对方集中注意力,一方面可以可以了解到他如何使用信息,以及他对信息的看法;
        2. 确认是否使用收集到的报表样本;如无,略过;如有,确认有无疏漏,如有,进行补充;若发现新主题和特征,添加到列表中;
        3. 确认是否收到不在样本中的报表,如有,收集新报表的样本,并重复第二步的评审;
      3. 评审附加信息要求
        1. 了解是否需要当前报表缺失的附加信息;
        2. 如有,进行补充并注明原因;
        3. 增加新主题和特征;
      4. 评审未来信息要求
        1. 让参与者先思考一下机构当前发展方向,然后向他们了解机构发展对他们决策所需信息的影响;
        2. 简要记下参与者想到的新报表;
        3. 添加到主题和特征列表中;
      5. 评审总体信息要求
        1. 目标:寻找用户访谈和管理人员访谈中未讨论到的,机构需要维护的数据;
        2. 让参与者评审所有收集到的报表,再询问是否存在其他对机构有价值的信息尚未被挖掘出来;
        3. 如有,添加到主题和特征列表中;
    7. 编辑完整字段列表
      1. 初始字段列表
        1. 评审和精简特征列表
          1. 精简名称相同的项;
          2. 精简表示相同特征的项;
          3. 确保项与特征正确对应;
        2. 确认样本中是否有新的特征
          1. 检查分析所有收集到的样本,确认样本中是否有新特征应该添加到初始字段列表中;
        3. 附注:值列表
          1. 记录下每个包含值列表的特征名称,这个列表可以为相应特征指定可接受的值范围,它一般强制实行给定的业务规则;
          2. 记录下特征中的值;如果值很多,则对值的类型进行简单描述;如有可能,介绍最大值和最小值
      2. 计算字段列表
        1. 初始字段列表完成后,清除其中的所有计算字段,将它们存入单独的列表;
      3. 与用户和管理人员评审列表
        1. 开展简单访谈,目标是确定两个列表是否有疏漏;
        2. 如有,添加新字段到列表中;
        3. 切勿过早认为这些列表已经非常完善;
  7. 建立表结构
    1. 定义初始表列表
      1. 评审初始字段列表,确定隐含主题:让字段说话,浮现主题,再与主题列表进行交叉验证,同时也可以减少人为的成见;
      2. 使用主题列表
        1. 消除重复项
        2. 消除表示相同主题的项
        3. 合并主题列表和初始字段列表中的项
      3. 使用任务目标
        1. 检验前两个步骤中是否遗漏主题
    2. 定义最终列表
      1. 表类型
        1. 数据表
        2. 联系表
        3. 子集表
        4. 验证表
      2. 表描述
        1. 对表的主题的明确定义,以及该主题重要性的描述;
      3. 改进表名称
        1. 表名称应该独特且有意义
        2. 表名称应该明白无误的展现主题
        3. 表名称应该尽量精简
        4. 避免使用描述物理特征的词,例如:文件,记录等词
        5. 避免使用缩略语;
        6. 避免使用专有名称或其他过多限制输入数据的词,例如西南地区员工
        7. 避免使用隐含或显式指明多个主题的名称,谨记每个表仅代表一个主题;
        8. 使用复数形式
      4. 指明表类型
        1. 数据,联系,子集,验证
      5. 编辑表描述
        1. 描述必须对表进行准确的定义,并且阐明其对企业的重要性
        2. 指南
          1. 对表进行准确的定义;
          2. 解释该表对企业的重要性;
          3. 描述务求简明扼要;
          4. 避免提及操作信息,比如该表使用的方式和适用场合;
          5. 不同表描述之间保持独立;
          6. 避免使用示例;
      6. 用户和管理人员访谈
        1. 开展用户和管理人员访谈,获取他们对于表描述的意见
    3. 字段对应入表
      1. 判断字段和表主题是否相符,再相应的添加到表中;
      2. 这个过程切勿使用计算机,使用纸和笔即可;
    4. 精简字段
      1. 改进字段名称
        1. 字段名称应该独特且富有内涵;
        2. 字段名称应该简明扼要,准确描述字段所代表的特征;
        3. 字段名称务求精简;
        4. 切勿使用缩略语,慎用缩写词;
        5. 切勿使用混淆字段名称含义的词语,例如“数字识别码号码”
        6. 避免使用隐含或显示多个特征的名称;
        7. 使用名称的单数形式;
    5. 使用理想字段解决异常现象
      1. 判断字段是否具备理想字段的要素
      2. 要素
        1. 代表表主题的鲜明特征
        2. 仅包含一个值;
        3. 无法分解为更小的元素;
        4. 不含计算值或串联值;
        5. 在整个数据库结构中独一无二;
        6. 主要特征始终保持不变;
      3. 将数据模拟填写入表,可以暴露出隐藏的问题,对照理想要素,找出它们;
    6. 消除复合字段
      1. 确认字段值中的不同元素,再将每个元素单独作为一个字段;
    7. 消除多值字段
      1. 将该字段从表中剔除,以之作为基础创建一个新的表;
      2. 从原表中采用一个字段,建立起原表与新表的联系;
      3. 为新表制定名称,类型,描述,并添加到表列表中;
    8. 精简表结构
      1. 重复字段
        1. 只允许出现在一个场合:联系表;其他场合下出现的重复字段,都是不合理的;
      2. 参照理想表精简结构
        1. 要素
          1. 表示单个主题,可以是一个对象或事件;
          2. 拥有一个主键
          3. 不含复合字段或多值字段;
          4. 不含计算字段;
          5. 不含无用的重复字段;
          6. 冗余数据保持在最低水平;
        2. 对于想在一个表中保存另外一个表中的信息的场景,应该使用视图这种虚拟表的方式来解决;
    9. 建立子集表
      1. 如果一个表中的记录出现多个空白值,那很可能它是由不同类型的物品或事件组成的,这时候可以考虑通过建立子集表来解决这个问题;
      2. 精简子集表
        1. 消除子集表所有相同的字段,并使用这些字段建立新的数据表;
        2. 确认新数据表的主题,然后为其制定合适的名称;
        3. 确保子集表表示该数据表的从属主题
        4. 为数据表编写合适的描述,然后将它添加到最终表列表中;标明表类型为数据;
    1. 键对于表结构的重要性:
      1. 确保准确识别表中的每条记录;
      2. 有助于建立并实施各种完整性:确保表与表之间的匹配始终有值;
      3. 用于建立表关系;
    2. 键的类型
      1. 候选键:可唯一识别表主题的一个字例(即一条记录)的一个或一组字段,每张表必须包含至少一个候选键;
        1. 候选键要素(选择指南):
          1. 不得为复合字段
          2. 必须包含唯一值;
          3. 不得包含 null 值;
          4. 其值不得违反机构安全或隐私规则(例如密码、社会保险号等);
          5. 其值无论部分或者整体都不是可选值;
          6. 包含定义唯一性所需的最少字段;
          7. 其值必须是识别表中每条记录的唯一和独特的识别方式(可避免重复记录);
          8. 其值必须是给定记录中每个字段的唯一识别方式;
          9. 除非特殊情况,否则不得修改其值;
        2. 通过向表中添加样本数据,有助于准确识别出候选键;
        3. 人造候选键:当判断一个表不含候选键时,可以创建和使用人造或代理候选键;
      2. 主键
        1. 主键字段是整个数据库结构中识别其所属表的唯一方式;主键值是可识别表中特定记录的唯一方式;
        2. 主键选择指南
          1. 当单字段候选键和复合候选键同时存在时,优先选择单字段;
          2. 优先选择名称中包含部分表名称的候选键;
        3. 创建主键的规则
          1. 每个表有且仅有一个主键;
          2. 数据库中的每个表必须是唯一的,即任意两个表不得有相同的主键,除非其中一个是子集表;
      3. 替换键:未被挑选为主键的候选键,即是替换键,据说在数据库实施阶段会有很大的作用;
      4. 非键:不是候选键,不是主键,即为非键;
    3. 表层次完整性
      1. 表中无重复的记录
      2. 主键为表中每个记录的唯一识别方式;
      3. 每个主键值是唯一的;
      4. 主键值不为 null ;
    4. 评审初始表结构
      1. 确保合适主题在数据库中被表达;
      2. 确保表名称和表描述规范且准确易懂;
      3. 确保字段名称规范且准确易懂:有可能是用户平时习惯的名称不同,可在实施阶段通过标签来替换;
      4. 核实已确定到表中的所有字段:确保所有与表主题相符的必要特征到位;
  8. 字段说明
    1. 字段说明的重要性
      1. 有助于建立字段级的完整性;
      2. 有助于提升整体数据的完整性;
      3. 定义字段说明能够对数据的性质和用途有更清晰的认识;
      4. 字段说明构成数据库的“数据字典”;(可作为创建字段和设置字段的指南,也有助于程序在界面上判断需要执行哪些数据输入和验证)
    2. 字段说明的三个元素
      1. 一般元素:
        1. 字段名称,父表,标签,说明类型(独特,通用,可复制),源说明(仅用于可复制类型),共享(联系表),别名,描述
        2. 编写字段描述的指南
          1. 准确描述该字段,阐明其用途;
          2. 陈述简明扼要;
          3. 避免重申或改述使用字段名称;
          4. 避免使用专业术语,缩略语和缩写;
          5. 切勿包含具体实施信息;
          6. 不得依赖于另一字段的描述;
          7. 切勿使用示例;
      2. 物理元素
        1. 数据类型
          1. 完整版:字符,国际字符,二进制,精确数字,近似数字,布尔值,日期和时间,间隔;
          2. 简单版:字母数字,数字,日期和时间;
        2. 长度,小数位,字符支持,输入掩码,显示格式
      3. 逻辑元素
        1. 键类型,键结构,单值性,null 支持,值的输入者,要求值,默认值,值的范围
        2. 值的范围
          1. 一般:这一字段的所有可能值的完整集合;
          2. 视完整性而定:基于该字段在表关系中作用的值的集合;
          3. 视业务而定:根据特定业务产生的值的集合;
          4. 注意:应避免将“其他”和“杂项”设置在任何的值范围中(原因:毫无意义)
        3. 编辑规则:立即输入可编辑,立即输入不可编辑,随后输入可编辑,随后输入不可编辑;
        4. 允许的比较,允许的运算:避免出无意义的比较和运算
    3. 定义每个字段的字段说明
      1. 流程
        1. 尽量定义更多更完整的说明
        2. 组织会议
          1. 介绍字段说明中的各个元素;
          2. 评审已定义的说明
          3. 解决无法定义或完成的字段;
  9. 表关系
    1. 关系为何重要
      1. 对于存在逻辑关系的两张表,可在两表之间建立连接;
      2. 可以减少冗余数据,优化表结构;
      3. 可在多张表中提取需要的数据;
    2. 关系的类型
      1. 一对一
      2. 一对多
      3. 多对多
      4. 自联结关系:同样存在一对一,一对多,多对多关系(大零部件由小零部件组成)
    3. 识别现有有关系
      1. 建立表的矩阵
      2. 提问
        1. 关联型问题:
        2. 情境型问题
          1. 面向归属的问题:拥有,属于,包含
          2. 面向动作的问题:制作,访问,放置,教授,参加之类的动词;
    4. 建立关系
      1. 一对一和一对多:通过主键和外键来建立连接;
      2. 多对多:通过联系表来建立连接;
      3. 自联结(自引用):做相同处理;
      4. 评审表结构,标准如下:
        1. 表示单一主题,物体或事件;
        2. 拥有一个主键
        3. 不得包含复合字段或多值字段;
        4. 不得包含计算字段
        5. 不得包含无用的重复字段;
        6. 包含的冗余数据仅为最低水平;
    5. 改进所有外键
      1. 外键的要素
        1. 与被复制的主键名称相同
        2. 使用被复制的主键的字段说明副本;
    6. 建立关系特征
      1. 定义删除规则
        1. 否定:不允许删除,只允许停用;
        2. 限制:先删除所有相关后,才允许删除
        3. 级联:自动删除两边的所有
        4. 作废:允许删除,并设置其他记录为 null
        5. 默认:允许删除,并设置其他记录为默认值;
      2. 识别表的参与类型
        1. 强制:向相关表输入记录前,该表必须至少存在一个记录
        2. 随意:无要求;
      3. 识别表的参与度
        1. (最小数量,最大数量)
      4. 与用户和管理人员验证表关系;
    7. 关系层次的完整性
      1. 关系中的两表之间的连接合理健全:合适的主外键或联系表;
      2. 以一种有意义的方式向每个表中插入记录:适宜的参与类型;
      3. 删除现有记录,不会带来任何不利影响:合适的删除规则;
      4. 合理限制关系中相关记录的数量:合适的参与度;
  10. 业务规则
    1. 什么是业务规则
      1. 对数据库特定方面实施的某种限制;
    2. 业务规则类型
      1. 面向数据库
      2. 面向应用程序
      3. 二者的区别在于建立的地点和方式,前者可以在数据库的逻辑设计中实现,后者则需要在数据库的物理设计或数据库应用程度中实现;
    3. 业务规则的分类
      1. 字段业务规则
      2. 表关系业务规则
    4. 定义和建立业务规则
      1. 与用户和管理人员合作
      2. 定义和建立字段特有业务规则
        1. 选取一个表
        2. 评审每个字段,看是否需要加限制
        3. 为字段定义必要的业务规则
        4. 修改字段相应的说明元素,建立规则;
        5. 选定测试该规则的操作:插入,删除,更新
        6. 将规则记录在业务规则规范表中;
      3. 定义和建立关系特有业务规则
        1. 选取一个关系
        2. 评审该关系,看是否需要加限制;
        3. 为该关系定义必要的业务规则;
        4. 修改相应的关系特征,建立规则
        5. 选定测试该规则的操作
        6. 将规则记录在业务规则规范表中;
    5. 验证表
      1. 用途:存储专门用于验证数据完整性的数据;
      2. 可以通过验证表支持业务规则,例如设置值的范围;
  11. 视图
    1. 视图:由数据库中一个或多个表组成的虚拟表(本自不存储数据),也可以有取自其他视图的字段;
    2. 有些类型的数据库会提供索引视图,即将视图物理化,可以提高访问性能,此时视图会存储数据;
    3. 视图的好处:
      1. 可以同时从多表中提取数据;
      2. 数据总是最新的;
      3. 可以定制化访问;
      4. 可以提高安全性;
      5. 可以促进数据完整性;
    4. 视图的类型
      1. 数据视图
      2. 聚合视图:一组数据聚合后产生的信息(特别适用于统计类型的报表);聚合视图不支持数据的修改,只能查询;
      3. 验证视图:功能同验证表,区别在于可以从多表中读取数据来生成;
    5. 视图的可以访问,也可以修改数据,修改的数据会反馈传递到基表中,不管单表还是多表视图,均是如此;
    6. 确立视图的过程
      1. 与用户和管理人员合作(目的是尽量发掘出已有的或潜在的视图需求)
        1. 回顾之前的记录,讨论特定的主题,例如围绕任务目标;
        2. 回顾早期收集的数据录入,报表和演示样本;
        3. 检查表与及其所表示的主题;
        4. 分析表关系;
        5. 研究业务规则;
      2. 定义视图
        1. 酌情使用计算字段
        2. 运用条件过滤数据;
        3. 使用视图规范表记录视图,项目包括:名称,类型,描述,基表,计算字段的表达式,过滤器;
      3. 评审视图
        1. 确保视图被正确定义;
        2. 确保所创建的计算字段适用于该视图;
        3. 确保过滤器正常工作;
        4. 确保每个视图都有对应的示意图和规范表;
  12. 评审数据完整性
    1. 表层次完整性
      1. 表中无重复字段
      2. 表中无计算字段
      3. 表中无多值字段
      4. 表中无复合字段
      5. 表中无重复记录
      6. 表中每个记录都通过一个主键识别;
      7. 每个主键都满足主键的要素;
    2. 字段级完整性
      1. 每个字段都符合理想字段的要素;
      2. 每个字段都有相应的字段说明
    3. 关系层次完整性
      1. 建立恰当的关系
      2. 建立删除规则
      3. 识别每个表的参与类型
      4. 识别每个表的参与度
    4. 业务规则
      1. 每条规则施行有意义的限制
      2. 为规则选择合适的类别:字段业务规则,表关系业务规则
      3. 正确定义和建立每条规则;
      4. 修改适宜的字段说明元素或表关系特征;
      5. 建立适用的验证表;
      6. 每条规则都有相应的业务规则规范表;
    5. 视图
      1. 每个视图都包含必要的基表;
      2. 每个视图包含合适的字段;
      3. 每个计算字段包含相关的信息;
      4. 每个过滤器返回适宜的记录;
      5. 每个视图都有视图示意图
      6. 每个视图都有相应的视图规范表;
    6. 汇编数据库文档
      1. 字段表列表
      2. 字段说明表;
      3. 计算字段列表
      4. 表结构示意图
      5. 关系示意图
      6. 业务规则规范表
      7. 视图示意图
      8. 视图规范表
    7. 数据库文档的好处
      1. 提供了完整的记录
      2. 为实现过程提供了一套规范和操作说明
      3. 在实现过程中,如有必要修改数据库结构,可以用于判定修改的影响和结果;
  13. 打破规则
    1. 两种可能的情况:
      1. 设计分析型数据库:以上所有的方法,都是针对操作型数据库,而分析型数据库,应该遵循另外一套方法;
      2. 提升处理性能
        1. 可能的后果:数据不一致,冗余数据,受损的数据完整性,不准确的信息;
        2. 首选的方式
          1. 提升硬件性能;
          2. 优化操作系统环境;
          3. 评审数据库结构:确保设计得当,避免设计欠佳引起的性能问题;
          4. 评审数据库实现过程:确保充分利用RDBMS的性能;
          5. 评审应用程序:
            1. 是否编写正确;
            2. 是否充分利用RDBMS的工具;
            3. 查询是否规范;
    2. 记录行动
      1. 如果需要打破规则,则必须记录打破的每条规则和采取的每一步行动,包括如下:
        1. 打破规则的原因
        2. 违反的设计原理
        3. 修改的数据库部分
        4. 所做的修改;
        5. 对数据库和应用程序的预期影响
      2. 记录以上信息的好处有两个,一个是当修改未达到预期效果时,可以恢复原状;一个是为修改留下记录,供后来人理解来龙去脉;

自己动手设计数据库
https://ccw1078.github.io/2017/07/01/自己动手设计数据库/
作者
ccw
发布于
2017年7月1日
许可协议