数据库规范化技巧必发娱乐最新官方网址

数据库规范化技巧
Luke Chung
FMS 总裁
2002年9月
适用于:

Microsoft® Access

摘要:本文为开发人士提供了一些技术,使用这么些技巧可以在安插 Access
表时防止某些难点。本文适用于 Microsoft Access 数据库 (.mdb) 和 Microsoft
Access 项目 (.adp)。

目录

简介
明白您的数量
你需求什么的数码?
你打算怎么处理这个多少?
数据里面怎么相互关系?
乘胜时光的延迟数据会爆发哪些的变动?
学学怎样使用查询
数据库规范化概念
将唯一音信存储在一个地点
笔录是免费的,而新字段卓殊昂贵
叩问什么时候必要复制数据
行使没有适当含义的字段作为主键字段
使用引用完整性
小结

简介
在安排数据库时,最重点的步骤是要保管数据科学分布到数据库的表中。使用正确的数据结构,可以极大地简化应用程序的别样情节(查询、窗体、报表、代码等)。正确举办表设计的业内名称是“数据库规范化”。

本文简要介绍数据库规范化的基本概念和部分急需留意并力求防止的普遍难点。

略知一二你的多少
在设计表在此之前,应明确您打算怎么样处理多少,还要了解随着时间的延迟数据会爆发什么的变型。您所做的比方将会影响最终的设计。

您需求怎么样的数据?
规划应用程序时,关键要精通规划的终极结出,以便确保您准备好所有需求的多寡并了然其来源。例如,报表的外观、每个数据的源点以及所需的富有数据是不是都存在。对项目损失最大的实在在档次中期发现重大报表缺乏数据。

略知一二须求怎么样的数量后,就非得确定数据的来源。数据是不是从其余数据源中导入?数据是或不是要求清理或评释?用户是还是不是需要输入数据?

明白所需数据的门类和根源是数据库设计的率先步。

您打算怎么处理这几个多少?
用户是或不是必要编制那几个数量?即使急需,应什么体现数据以便于用户通晓和编排?有没有认证规则和有关的查找表?须要对编辑和删除保留备份的多少输入有没有相关联的审核难题?须要为用户体现怎么摘要音讯?是不是要求变更导出文件?领会这一个新闻后,就可以设想字段之间是怎么相互关系的了。

数码里面怎样互相关联?
将数据分组放入相关字段(例如与客户有关的音信、与发票相关的音信等),每个字段组都代表要建立的表。然后考虑什么将这个表互相关联。例如,哪些表具有局地多关联(例如,一个客户可能所有多张发票)?哪些表具有一定关系(那种气象下,常常会考虑将其构成到一个表中)?

乘势年华的延期数据会暴发哪些的变迁?
设计表之后,寻常会出于尚未考虑时间的震慑而致使未来现身严重难点。许多表设计在及时采纳时效果格外好,可是,平时会因为用户修改数据、添加数码以及随时间的延迟而夭亡。开发人员平常会发觉要求重新设计表的布局来适应那个变迁。表的结构发生变化时,所有相关的始末(查询、窗体、报表、代码等)也亟须随着更新。精通并推测数据会随时间推移暴发什么样变化,可以兑现更好的设计,裁减题材的暴发。

学习如何利用查询
刺探怎么分析和保管数据一致很要紧。您应该深远掌握查询的办事规律,了解什么运用查询在五个表之间链接数据,如何行使查询对数码举行分组和集中,以及如何在不要求以规范化格式彰显数据时使用交叉表查询。

好的数目陈设的最后目标就是要平衡七个要求:既要随着岁月的推移有效地囤积数据,又要轻松地搜索和剖析数据。了解查询的成效对正确设计表很有帮带。

必发娱乐最新官方网址,数据库规范化概念
那有些介绍数据库规范化所关联的基本概念,而不是对数据库规范化举行理论性的商讨。怎样在您的实在情状中选用那些概念可能会随着应用程序必要的不相同而拥有变化。那有些的目标是驾驭那些基本概念、依照实际要求采纳它们,并精晓偏离那么些概念将相会世什么难题。

将唯一音信囤积在一个地方
大多数数据库开发人士都知情数据库规范化的基本概念。理想状态下,您希望将一如既往的数码存储在同一个地点,并在要求引用时使用
ID
来进展引用。因而,假若某些音信发生了扭转,则可以在一个地点开展更改,而任何程序中的相应音讯也会随着改变。

比如,客户表会存储每个客户的记录,包蕴姓名、地址、电话号码、电子邮件地址以及任何特色新闻。客户表中可能带有唯一的
CustomerID 字段(常常是 Autonumber
字段),那些字段即该表的主键字段,其他表使用它来引用该客户。因而,发票表可以只援引客户的
ID
值,而不是在每张发票中储存客户的有所音信(因为同一个客户可能会所有多张发票),那样利用客户的
ID 值即可从客户表中查找客户的详细新闻。使用 Access
中效率强大的窗体(使用组合框和子窗体),可以轻松地成功那项工作。假设急需修改客户音信(例如新增电话号码),只需在客户表中修改,应用程序中援引该音信的其余其他部分都会随着自动更新。

接纳科学规范化的数据库,通过简单的编辑即可轻松处理多少随时间推移而暴发的变更。使用未正确规范化的数据库,经常须要运用编程或询问来改变多条记下或八个表。那不只会增多工作量,还会伸张由于未正确实施代码或询问而致使数据不平等的可能。

笔录是免费的,而新字段相当昂贵
完美的数据库应该只必要随着年华的推移添加新的笔录,数据库表应该可以保留大批量笔录。可是,假如你发现要求追加更加多字段,则可能会赶上设计难题。

电子表格专家平日会遇见上述难点,因为他俩习惯于根据设计电子表格的主意设计数据库。设计日常随时间变化的字段(例如,年、季度、产品和行销人员)需求在将来添加新字段。而正确的布置性应当是更换音信并将随时间变化的数量放在一个字段内,那样就可以添加越来越多记录。例如,只需创立“年”字段,然后在该字段中输入各记录相应的年份值即可,无需为历年创制一个单独的字段。

扩展额外的字段可能会暴发难点,因为表结构的变型会对应用程序的其它部分发生潜移默化。在表中添加更加多字段时,依赖该表的靶子和代码也须要更新。例如,查询必要获得额外的字段,窗体须求出示那几个字段,而报表则需求包涵这个字段,等等。可是,借使数量现已规范化,则现有对象会自动检索新数据,并不错统计或出示这一个数据。查询功用更狠抓大,因为它同意你按“年”字段进展分组,以逐步展现摘要(不管表中包涵怎样年份)。

只是,数据规范化并不意味不可能展现或利用随时间而变化或借助时间的字段。要求浏览或显示那类新闻的开发人士经常能够动用交叉表查询来达成这一目标。要是您不熟识交叉表查询,应该学习如何行使它们。固然它们与表有所差距(尤其是用户不可能编辑交叉表查询的结果),但它们确实可以用来在数码表中呈现新闻(最多可以达标
255
个字段)。若是要在报表中行使它们,则会尤其扑朔迷离,因为表格须要包罗额外的或持续变更的字段名。那就是为何半数以上表格将数据作为独立的分组(而不是单独的列)显示的原委。对于那些困难的意况,您必须花时间去化解那一个难点。希望所有人都可以清楚那种控制会趁机时光的成形对其余资源发生的震慑。

那就是干吗增加记录是免费的(那是数据库的英雄优势)而充实字段是这么高昂的原由。若是数据库设计科学,则可以适应各样各种的转移。

打探哪一天必要复制数据
奇迹数据必要反规范化,以便保存或者会随时间变化的新闻。

在经过客户 ID
号将发票链接到客户表的简便示例中,大家兴许要求保留开出发票时的客户地址(而不是创设发票时的地点,因为客户音讯在那多个事件之间或许会有着变更)。如果开出发票时未保留客户地址,而将来又无法不立异客户音讯,则可能无法确定发送某些发票的贴切地方。那或许会造成格外沉痛的买卖难题。当然,有些音讯(如客户的电话号码)可以不保留。由此,应该有选取地决定须要复制哪些数据。

亟需复制数据的另一个事例是填写发票的明细项。报价单经常用于挑选客户定购的货物。大家可以只存储报价单
ID,而 ID
指向包罗产品注明、价格和其余详细新闻的报价单。但是,产品表明和价格会随着岁月而更改。假若不将数据从报价单复制到明细表中,未来则无从精确地再度打印原始发票。如若你没有收到付款,难点将那多少个严重。

之所以,即使规范化能够将一律的数据很好地保留在一个地点并能简化编辑工作,但一些情况下却不要求这么些优势。假诺之后由于历史由来须求多少的快照,则必须从一开头就在数据库中统筹好。否则,一旦数据被遮住就无法再找回。

选拔没有适合含义的字段作为主键字段
为了提升功用,每个表都应该有一个主键字段。主键字段定义了在表中的唯一性,并由索引在任何字段中动用,以增加搜索品质。例如,客户表可以蕴含为每个客户定义唯一编号的
CustomerID
字段。为了便利啄磨,假定表中带有多个字段,而不光是简单的纯净表查找(例如国家/地区列表)。

一般的话,主键字段应怀有如下特点:

应该只含有一个字段
能够将八个字段定义为表的主键字段,但最好是运用一个字段。首先,如若必要选用三个字段来定义唯一性,则须求占用愈来愈多的长空来囤积主键。其次,表中的此外索引还非得使用主键字段的咬合,那样所占有的空间比使用一个字段所占有的上空要多。最终,在表中标识记录须要得到字段组合。使用一个
CustomerID 字段定义客户比选择任何字段组合要好得多。
相应为数字类型
Access 提供的 AutoNumber 字段类型是一个 Long
Integer(长整数),分外适用于主键字段。那些值能够自行保险每个记录的唯一性,同时也帮助多用户数据输入。
不会随时间而改变
主键字段不该随时间而改变。一旦标识了主键字段,就应该永远不变(象社会保险号一样)。更改过的主键字段将很难再接纳历史数据,因为中间的链接被破坏了。
有道是没有适当含义
要保障主键字段不会随时间而改变,它应该没有适合含义。没有适合含义的主键值在别的数据不完整时也丰盛实用。例如,您可以指定一个客户编号,而无需该客户的完全地址。应用程序的其余部分可以很好地干活,您也可以在摸索记录时添加信息。假使表中应用了江山/地区字段或任何您没有的标识字段作为主键的一部分,则很可能会造成力不从心使用应用程序。
由于上述原因,大家提出在大多数表中应用 AutoNumber
字段作为主键字段。通过利用组合框和隐藏列,可以将字段绑定到 AutoNumber
字段并将其隐身,使用户无法看到。

行使引用完整性
对表进行定义并明白各表是哪些关联的之后,请确保拉长引用完整性来巩固各表之间的涉及。那样可避防止不当地修改链接字段而留给孤立的记录。Microsoft
Jet
数据库引擎帮助复杂的引用完整性,允许用户展开级联更新和删除。一般意况下,不应修改
ID 字段。由此,级联更新用得较少,但级联删除却更加实惠。

譬如,如若发票表与订单表相关联,其中的一张发票或者有极端多少个订单(明细项),并且每个订单记录包括它所链接的发票编号,则足以选拔级联删除操作来删除发票记录,并自动删除所有相应的订单记录。那样可防止止出现没有对号入座发票记录的订单记录。

小结
俺们希望您能尽快将这个数据库设计概念应用到你的应用程序设计中,从而最大程度地压缩题材,裁减未已毕此类设计时须求开展的校订。祝你好运。

Luke Chung 是 FMS Inc. 的创办者兼老总。FMS Inc.
是业界超过的第三方产品供应商,其产品适用于 Microsoft Access
用户和开发人员。

发表评论

电子邮件地址不会被公开。 必填项已用*标注