文章编号: 283878 - 查看本文应用于的产品
初学者:要求具备单用户计算机的用户界面知识。

有关本文的 Microsoft Access 2000 版本,请参阅 209534
有关本文的 Microsoft Access 95 或 Microsoft Access 97 版本,请参阅 100139
展开全部 | 关闭全部

本文内容

概要

本文向初学者讲述数据库标准化的术语。在讨论关系型数据库的设计时,对该术语有一个基本了解是很有帮助的。

注意:Microsoft 还提供了网络发布来讨论数据库标准化的基础。要查看此网络发布,请访问下面的 Microsoft Web 站点:
http://support.microsoft.com/servicedesks/webcasts/wc060600/wc060600.asp?fr=1

更多信息

标准化说明

标准化是在数据库中组织数据的过程。其中包括,根据设计规则创建表并在这些表间建立关系;通过取消冗余度与不一致相关性,该设计规则可以同时保护数据并提高数据的灵活性。

冗余数据会浪费磁盘空间并带来维护问题。如果必须更改同时放在几个位置的数据,则必须按同一种方式更改所有位置的数据。如果该数据只保存在 Customers 表中,而没有保存在数据库中的其他位置,更改客户地址就要容易得多。

什么是“不一致相关性”?虽然在 Customers 表中查找特定客户的地址对于用户来说很直观,但是对于在此查找访问该客户的雇员的薪水来说可能没有意义。雇员的薪水与雇员本身有关或者说取决于雇员本身,因此应在 Employees 表中进行查看。由于查找数据的路径有可能丢失或被破坏,不一致相关性会使数据难于访问。

有一些规则可用于数据库标准化。每个规则称为“常规表单”。如果遵循了第一条规则,则数据库是“第一常规表单”。如果遵循了前三条规则,则数据库是“第三常规表单”。虽然标准化可能有其他等级,但对于大多数应用程序而言,通常认为第三常规表单是所需的最高等级。

由于有许多常规规则与规范,实际情况并不总是要求完全符合。一般说来,标准化需要其他表,而且一些客户觉得这比较麻烦。如果您决定不遵循标准化前三个规则之一,请确保应用程序会预见可能发生的任何问题,如冗余数据与不一致相关性问题。

下面的说明中包括一些示例。

第一常规表单

  • 去掉各个表中的重复组。
  • 为每组关联数据创建独立的表。
  • 使用主关键字确定每组关联数据。
请勿在一个表中使用多个字段来存储相似数据。例如,要跟踪可能来自两个可能来源的清单项,清单记录可能包含 Vendor Code 1 和 Vendor Code 2 的字段。

添加第三方供应商时会出现什么情况?添加字段并不能解决问题;而是需要修改程序和表,而且不能很好地解决供应商个数不断变化的问题。反而,应将所有供应商信息放在称为 Vendors 的独立表中,然后使用项目编号关键字将清单链接到供应商,或使用供应商代码关键字将供应商链接到清单。

第二常规表单

  • 为应用到多个记录的多组数值创建独立表。
  • 使用外部关键字将这些表关联起来。
记录不应取决于表主关键字(如有必要,可以是组合关键字)之外的任何关键字。例如,在计帐系统中考虑使用客户地址。除 Customers 表需要该地址外,Orders、Shipping、Invoices、Accounts Receivable 和 Collections 表也需要该地址。在上述每个表中并不是将客户地址作为独立条目进行保存的,而是将其保存在一个位置,即保存在 Customers 表或单独的 Addresses 表中。

第三常规表单

  • 去掉了不取决于关键字的字段。
记录中并非记录关键字部分的数值并不包含在表中。一般来说,在任何时候,如果字段组的内容可能适用于表中的多个记录,可以考虑在一个单独的表中存放这些字段。

例如,在 Employee Recruitment 表中,可能包括应聘者的大学名称和地址。但是,您需要一个完整的大学列表以便于进行分组邮寄。如果将大学信息保存在 Candidates 表中,则无法只列出这些大学而不列出当前的应聘者。创建单独的 Universities 表,并使用大学代码关键字将其链接至 Candidates 表。

例外情况:遵循第三常规表单(这在理论上是必要的)并不总是切实可行的。如果您有一个 Customers 表,并且要去掉所有可能的字段间相关性,则必须为城市、邮政编码、销售代表、客户类别以及任何其他可能在多个记录中重复的因素创建单独的表。从理论上讲,投入资金进行标准化是值得的。但是,创建许多小的表可能会使性能降低,或超出打开文件与内存的能力。

仅将第三常规表单应用于经常发生变化的数据,可能更切合实际。如果保留了一些相关的字段,则将应用程序设计为当任何一个字段进行更改时,要求用户检查所有相关的字段。

其他标准化表单

虽然第四常规表单(也称为 Boyce Codd 常规表单 (BCNF))和第五常规表单也存在,但是在实际设计中很少考虑使用。忽视这些规则可能使得数据库的设计不太完美,但这不会影响功能。

将示例表标准化

以下步骤说明将一个虚构的学生表进行标准化的过程。
  1. 非标准化的表:

    收起该表格展开该表格
    Student#AdvisorAdv-RoomClass1Class2Class3
    1022Jones412101-07143-01159-02
    4123Smith216201-01211-02214-01
  2. 第一常规表单:无重复组

    表应只有两维。由于一个学生有几个类别,因此应在一个单独的表中列出这些类别。在上述记录中,Class1、Class2 和 Class3 字段是遇到设计难题时的一些提示。

    电子表格通常使用第三维,但是表不应该使用第三维。解决该问题的另一种方法是使用一对多关系,但不应将一方和多方放在同一表中。相反,通过去掉重复组 (Class#),在第一常规表单中创建另一个表(如下所示):

    收起该表格展开该表格
    Student#AdvisorAdv-RoomClass#
    1022Jones412101-07
    1022Jones412143-01
    1022Jones412159-02
    4123Smith216201-01
    4123Smith216211-02
    4123Smith216214-01
  3. 第二常规表单:去掉冗余数据

    请注意,在上述表中每个 Student# 值有多个 Class# 值。Class# 实际上并不取决于 Student#(主关键字),因此该关系不在第二常规表单中。

    以下两个表说明第二常规表单:

    Students:

    收起该表格展开该表格
    Student#AdvisorAdv-Room
    1022Jones412
    4123Smith216


    Registration:

    收起该表格展开该表格
    Student#Class#
    1022101-07
    1022143-01
    1022159-02
    4123201-01
    4123211-02
    4123214-01
  4. 第三常规表单:去掉不取决于关键字的数据

    在最后一个示例中,Adv-Room(顾问办公室号码)实际上取决于 Advisor 属性。解决办法是将该属性从 Students 表中移到 Faculty 表中(如下所示):

    Students:

    收起该表格展开该表格
    Student#Advisor
    1022Jones
    4123Smith


    Faculty:

    收起该表格展开该表格
    NameRoomDept
    Jones41242
    Smith21642

属性

文章编号: 283878 - 最后修改: 2013年7月16日 - 修订: 5.4
这篇文章中的信息适用于:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 标准版
关键字:?
kbinfo kbdesign kbdatabase kbhowto KB283878
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com