设计数据库

设计数据库时,您将对实际业务系统进行建模,该系统包含一组实体及其特征或属性,以及这些实体之间的规则或关系。

第一步是描述要表示的系统。 例如,如果要为出版系统创建数据库,那么该系统应包含几种类型的实体,如书籍、作者、编辑和出版者。 对于其中每个实体,您必须记录一些信息或属性:
  • 书籍:标题、ISBN、出版日期、出版地、出版者....
  • 作者:姓名、地址、电话号码和传真号码、电子邮件地址......
  • 编辑:姓名、地址、电话号码和传真号码、电子邮件地址......
  • 出版者:姓名、地址、电话号码和传真号码、电子邮件地址......

数据库不仅需要表示这些类型的实体及其属性,还需要一种使这些实体相互关联的方法。 例如,需要表示书籍与作者之间的关系、书籍/作者与编辑之间的关系以及书籍/作者与出版者之间的关系。

数据库中的实体之间存在三种类型的关系:
一对一关系
在这种类型的关系中,实体的每个实例仅与另一个实体的一个实例相关。 当前,在上面描述的方案中不存在一对一关系。
一对多关系
在这种类型的关系中,实体的每个实例与另一个实体的一个或多个实例相关。 例如,一个作者可能写了多本书籍,但某些书籍只有一个作者。 这是关系数据库中建模的最常见的关系类型。
多对多关系
在这种类型的关系中,给定实体的许多实例与另一个实体的一个或多个实例相关。 例如,合著者可以写许多本书籍。

因为数据库由表组成,所以必须构造一组能最好地保存这些数据的表,并且表中的每个单元格保存单个视图。 有许多种可能的方法来执行此任务。 作为数据库设计者,您的工作就是提出一组可能最好的表。

例如,可以创建包含许多行和列的单个表来保存所有信息。 但是,使用此方法时,某些信息将会重复。 其次,数据输入和数据维护将耗费大量时间,并且容易出错。 与此单个表设计相比,关系数据库允许您使用多个简单的表,从而减少冗余并避免一个不容易管理的大型表所产生的困难。 在关系数据库中,表应该包含关于单种类型的实体的信息。

另外,由于多个用户访问和更改数据,所以必须维护关系数据库数据完整性。 每当共享数据时,就需要通过下列任一方式来确保数据库表中的值的准确性:
  • 使用隔离级别来确定访问数据时如何锁定数据或者将该数据与其他进程隔离。
  • 通过定义约束来强制实施业务规则,从而保护数据和定义数据之间的关系。
  • 创建触发器以执行复杂的跨表数据验证。
  • 实现恢复策略来保护数据,以便可以将该数据复原到一致的状态。

数据库设计任务远比此处说明的要复杂得多,它必须考虑许多因素,比如,空间需求、键、索引、约束、安全性和权限等。 您可以在 Db2® 文档, Db2 最佳实践以及有关此主题的许多 Db2 零售书籍中找到这些信息。