开发数据库计划
创建数据库的第一步是制订计划,此计划既可以在实现数据库时用作指南,也可以在数据库实现后用作数据库的功能说明。数据库设计的复杂性和细节由数据库应用程序的复杂性和大小以及用户数决定。
数据库应用程序的性质和复杂性以及计划数据库的过程可能会变化很大。数据库可以相对简单,例如供单人使用的数据库;也可以很大、很复杂,例如用于为成千上万的顾客处理所有银行事务的数据库。对于前一种情况,数据库设计可能只需要在一些草稿纸上写几个备注即可。对于后一种情况,设计可能是长数百页的正式文档,其中包含有关数据库的各种可能细节。
计划数据库时,不管其大小和复杂性如何,都要进行下列基本步骤:
- 收集信息。
- 标识对象。
- 建立对象模型。
- 标识每个对象的信息类型。
- 标识对象之间的关系。
收集信息
在创建数据库之前,必须对期望数据库执行的操作有一个透彻的理解。如果数据库用于替换基于纸张的或手动执行的信息系统,则现有的系统将会为您提供所需的大部分信息。您应该与系统中所涉及的每个人进行交流,以确定他们所做的工作以及他们需要从数据库中获得的内容。了解他们希望新系统完成的工作,以及找出现有系统的问题、限制和瓶颈也很重要。应收集客户结算单、库存清单、管理报表以及属于现有系统的其他任何文档的副本,因为这些信息对于设计数据库和界面非常有用。
标识对象
在收集信息的过程中,必须标识将由数据库管理的主要对象或实体。对象可以是一个有形的实体(例如一个人或一个产品),也可以是一个无形的项目(例如某项业务事务、公司中的某个部门或某个付薪周期)。通常会有少数主对象,标识这些主对象后,将显示相关项。数据库中的各个不同项都应有相对应的表。
在 SQL Server 2005 附带的 AdventureWorks 示例数据库中,主对象是自行车。此公司业务中与自行车相关的对象是制造自行车的雇员,销售用来制造自行车的零部件经销商、购买自行车的顾客以及对顾客执行的销售事务。其中每个对象都是数据库中的一个表。
建立对象模型
标识了系统中的对象后,应使用该系统的一种直观表示方式来记录这些对象。在数据库实现期间,可以使用数据库模型作为参考。
鉴于此目的,数据库开发人员将使用各种工具进行数据库设计,这些工具在技术复杂性方面差别很大,既可以是简单的铅笔和草稿纸,也可以是字处理和电子表格程序,甚至可以是专门为数据建模工作创建的软件程序。无论决定使用哪一种工具,重要的是使该工具保持最新。
标识每个对象的信息类型
将数据库中的主对象标识为候选表后,下一步是标识必须为每个对象存储的信息类型。这些类型是对象表中的列。数据库表中的列包含几个常见的信息类型:
- 原始数据列
这些列用于存储有形信息(例如名称),由数据库外部的源确定。 - 分类列
这些列用于对数据进行分类或分组,并存储限定选择范围的数据(例如真/假、已婚/单身和副总裁/主管/组长)。 - 标识符列
这些列用于提供一种机制来标识存储在表中的每个项。这些列的名称中经常会有一个 ID 或编号,例如,employee_id、invoice_number 和 publisher_id。标识符列是用户和内部数据库处理访问表中某一行数据时使用的主要组件。有时,可以在表中使用真实的对象 ID(例如社会保障号),但在大多数情况下,可以在定义表时为行创建可靠的假 ID。 - 关系列或引用列
这些列用于建立一个表中的信息与另一个表中相关信息之间的链接。例如,用于跟踪销售事务的表通常具有指向 customers 表的链接,以便将完整的客户信息与销售事务相关联。
标识对象之间的关系
关系数据库的一种优势是能够联系或关联数据库中各个项目的有关信息。可以单独存储孤立的信息类型,但数据库引擎可以在需要时组合数据。在设计过程中,标识对象之间的关系需要查看多个表,确定它们的逻辑相关方式,并添加关系列以建立一个表与另一个表之间的链接。
例如,AdventureWorks 数据库的设计人员已经创建了数据库中产品和产品模型的表。Production.Product 表包含每个产品的有关信息,其中包括名为 ProductID 的标识符列和有关产品名、产品价格及产品颜色、大小和重量的数据列。该表包含分类列(例如 Class 或 Style),使得产品可以按这些类型分组。每个产品还具有产品型号,但该信息存储在另一个表中。因此,Production.Product 表中的 ProductModelID 列仅用于存储产品型号的 ID。如果添加了一行产品数据,则相应的 ProductModelID 值必须存在于 Production.ProductModel 表中。