ACC: 数据库规范化基本知识

文章翻译 文章翻译
文章编号: 100139 - 查看本文应用于的产品
初级用户: 要求用户界面的单用户计算机上的知识。

展开全部 | 关闭全部

本文内容

概要

本文解释数据库规范化术语的基础知识。讨论一个关系数据库的设计时,该术语有一个基本的了解是很有帮助。

: Microsoft 还提供了讨论的数据库规范化基本知识的网络广播。若要访问此网络广播,请访问下面的 Microsoft 网站:
http://support.microsoft.com/servicedesks/webcasts/wc060600/wc060600.asp?fr=1
: 要查看有关 Microsoft Access 2000 中的此信息,请查看下面 Microsoft 知识库中相应的文章:
209534ACC2000: 数据库规范化基本知识

更多信息

规范化的说明

规范化是组织的数据库中的数据的过程。这包括创建表并建立这些规则旨在保护的数据并使数据库更灵活地通过消除两个因素的表之间的关系: 冗余和不一致的依赖项。

冗余数据浪费磁盘空间,并创建维护问题。如果必须更改多个位置中存在的数据,数据必须在所有位置完全相同的方式中进行更改。客户地址更改为更易于实现如果仅在客户表和数据库中的其他地方中存储这些数据。

什么是"不一致相关性"?时、 直观地查找特定客户的地址为客户表中的用户它可能不需要进行那里寻找该客户调用该员工的薪水。员工的薪水或相关的员工相关,因此应将移动到雇员表。不一致相关性会使数据变得很困难的访问 ; 若要查找数据路径可能丢失或损坏。

有几个数据库规范化规则。每个规则称为"普通表格。如果观察到第一个规则,数据库就是在"第一个普通窗体"。如果前三个规则观察到则认为数据库已在"第三个普通窗体"。尽管可能会出现其他级别的规范化,第三范式,则认为最高级别所需的大多数应用程序。

如同许多正式规则和规范真实世界情况不总是允许完美的法规遵从性。一般情况下,规范化需要更多的表和一些客户发现此麻烦。如果您决定违反规范化的前三个规则之一,请确保您的应用程序预期可能发生如冗余数据和不一致相关性的任何问题。

: 的以下描述包括示例。

第一个普通的窗体

  • 消除单个表中的重复组。
  • 创建一个单独的表中的每一组相关数据。
  • 与主关键字标识每一组相关数据。
不要使用单个表中的多个字段来存储相似数据。 例如对于跟踪可能来自两个可能的源对库存物料,一个库存记录可能包含字段的供应商代码 1 和供应商代码 2。

但是,当您添加第三个供应商时,会发生什么情况呢?添加字段并不是答案 ; 它需要程序和表的修改并不会不顺利地适应动态许多供应商。而是,将供应商的所有信息都放在单独的表名为供应商,然后于供应商物料编号参数与或供应商与供应商代码键列出清单的链接库存。

第二个普通的窗体

  • 创建独立的表,对于应用于多个记录的值的集。
  • 带有外键与这些表。
记录不应依赖以外的任何其他表的主键 (一个复合键,如有必要)。例如对于记帐系统中考虑客户的地址。通过客户表,而且还由订单、 运输、 发票、 应收帐款,和收藏表需要地址。,而不是作为一个单独的条目,在这些表中的每个表中存储客户地址,请将其存储在客户表中或在单独的地址表中的一个位置中。

第三个普通的窗体

  • 消除不依赖于键的字段。
在表中不属于一个记录中不属于该记录的键的值。一般情况下,任何时候的一组字段的内容可能适用于多个表中的单个记录可考虑将这些字段放在一个单独的表。

例如对于一个雇员招募表中一个候选大学的名称和地址可能会包含。但是,您需要的大学的完整列表用于组发送邮件。大学信息存储在候选人表中,如果没有与任何当前的候选列表大学到方法。创建一个单独的大学表并将其链接到候选人表具有一个大学代码键。

例外: 遵守第三常规表单时从理论上讲理想并不总是可行。如果您有一个客户表,并且您希望消除所有可能的 interfield 依赖项必须在多个记录中创建单独的表的城市、 邮政编码、 销售代表、 客户类和可能会有重复的任何其他因素。在理论上,规范化值得追求,但是,许多小表可能会降低性能或超过打开的文件和内存容量。

它可能要将第三范式仅应用于数据的变化的频率更可行。如果将保持某些从属字段设计您的应用程序要求用户确认其中任何一个发生更改时,所有相关字段。

其他规范化窗体

也称为 Boyce Codd 普通窗体 (BCNF) 的第四个正常形式和第五范式存在呢,但很少被认为是在实际应用的设计。而不考虑这些规则可能会导致小于完美的数据库设计,但不会影响功能。
               **********************************
                 Examples of Normalized Tables
               **********************************

 Normalization Examples:

 Unnormalized table:

    Student#   Advisor   Adv-Room  Class1   Class2   Class3
    -------------------------------------------------------
    1022       Jones      412      101-07   143-01   159-02
    4123       Smith      216      201-01   211-02   214-01
				
  1. 第一个普通的窗体: 无 REPEATING 组

    表应当有只有两个维度。因为一名学生都有几个类,应在一个单独的表中列出这些类。字段 Class1、 Class2 和 Class3 以上的记录中都是设计时出现问题的迹象。

    电子表格通常使用第三维度,但表不应该。 看一看该问题的另一种方法: 一个一对多的关系与不要将放一方和多方在同一个表。而是,创建另一个表中第一范式通过消除重复的组 (类 #),如下所示:
           Student#   Advisor   Adv-Room    Class#
           ---------------------------------------
           1022      Jones      412       101-07
           1022      Jones      412       143-01
           1022      Jones      412       159-02
           4123      Smith      216       201-01
           4123      Smith      216       211-02
           4123      Smith      216       214-01
    					
  2. 消除冗余数据,第二常规表单:

    请注意多个类 # 值对于上表中每个学生 # 值。类 # 并不从功能上说依赖学生 # (主关键字),这种关系不是在第二范式中。

    下面的两个表说明第二范式:
        Students:   Student#    Advisor   Adv-Room
                    ------------------------------
                    1022        Jones       412
                    4123        Smith       216
    
        Registration:   Student#    Class#
                        ------------------
                        1022        101-07
                        1022        143-01
                        1022        159-02
                        4123        201-01
                        4123        211-02
                        4123        214-01
    					
  3. 第三常规表单: 消除 ON KEY 不相关的数据

    在最后一次的示例广告房间 (顾问的办公室号码) 是功能上依赖于顾问属性。解决方案是将该属性从学生表移动到教师表,如下所示:
        Students:   Student#    Advisor
                    -------------------
                    1022        Jones
                    4123        Smith
    
        Faculty:    Name    Room    Dept
                    --------------------
                    Jones   412     42
                    Smith   216     42
    					

参考

关于设计数据库的其他信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
234208ACC2000: 了解关系数据库设计文档可用在下载中心
"foxpro 2 A 开发人员指南,明 M.Ahlo Jr.et al.,页 225 220 M 和 T 丛书 1991

"使用 Access 的 Windows,"张三 Jennings 页 799-800,公司 1993

属性

文章编号: 100139 - 最后修改: 2007年1月18日 - 修订: 2.1
这篇文章中的信息适用于:
  • Microsoft Access 1.0 标准版
  • Microsoft Access 1.1 标准版
  • Microsoft Access 2.0 标准版
  • Microsoft Access 95 标准版
  • Microsoft Access 97 标准版
关键字:?
kbmt kbinfo kbusage KB100139 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 100139
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 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