如何维护数据完整性

  • 格式:pdf
  • 大小:112.27 KB
  • 文档页数:2

O F F l C E S o L U T I O N S 

如何维护数据完整性 

我们将说明如何在Access{Z.i ̄库中实施引用完整性,保留有 

效数据,阻止无用数据 

保 护数据的准确眭是至关重要的。如果数据是不可售的.相关事务的可靠眭 

电就无法确定了。为了保持数据的完整性我 

们应该在用户修改、需加和删除数据时进行控 

制。而在Microsoft Acces ̄中 这种控制足通 过引用完整性约束来实施的。在这篇文章里. 

我们将说明什么是完整性约束 及如何使用它 

们。 

完整性定义 

让我们看一下Access中附带的Northwind 

数据库例子,它包括了关于客户、订单、产 晶 发货人以及其他相关项目的信电(图 

I J。我们所说的完整眭是指维持特定关系的 

毁性、进而维持存储在关系表rf】数据的一致 

的规则。在关系数据库中有两类规则可 管 

理完整眭:实体完整性规定每行都出须被唯一 

标识(这崽味着任何主键都 能为空值)。引 

用完整陛规定一个外键值必须匹配一个关系表 

中的一个主键值或者为空。 

数据库应用程序必须遵循引用完整性规 则,所以用户: 

・ 能在一个记录的主键值与关联表中某 

个现有的外键值相匹配时进行删除 l例如删除一个客户的ID.但还有其 

他的订单与其关联)。 

・不能输人一个外键值无法与关 联表中一个已有主键值匹配的新记录 

(例如一个为不存在的顾客下的订 

单)。 ・不能修改一个其值以关联表中 

个外键形式存在的主键值f例如修 也就是说.所有显示的关系是持久的、对所响 

对象都起作用。 

如果想了解关系窗口是如何工作的.休可 

在Access中打开Northwind范例数据库,选 

择工具I关系。注意在图1中显示的Northa.ind 

数据库各个表之 的关系。每个连接线代表两 

个表之间的一个关系。默认情况下是一对多关 

系——大多数情况下都是这样 在多个的一 

端有一个无穷符号.在另一端有一个数字1。 没有这些符号的连接行表示此羌系设有开启引 

用完整性。 

实施引用完整性 

在一个关系中实施引用完整性之前,需要 

满足三个条件: 

・关联字段中至少有一个字段必须是一个 

主键或者该字段有唯一索引 在表格中的主键 用粗体显示。 

・关联字段必须是同一数据类型。这里有 

个例外:可以将一个N u m b e F和一个 

AutoNumber字段相关联。 

・关联表必须在同一数据库中。因为我们 

无法在链接表间实施引用完整性 

圈I:Access关系窗口显示了—个数据库中各个表格之间的关系。 

改一十客户ID,而还有订单关联着这个ID)。 

注意.这里所说的主键值和外键值是对整 

个记录的引用而不只是关键字段里面的值 

在Access中学习引用完整眭最好的地方 

是关系窗口,这个窗口用图形显示了各个表之 

间的关系。为了应用引用完整眭约束,在两个 

表之间必须存在一个关系。关系窗口不会显示 

用 在查询设计窗口中手工生成的临时关系, 默认情况下Access并不实施引用完整眭 

必须在关联两个表时手工开启它。下面让我们 

看看在Northwind的种类(Categories)和产 

品(Products)表之间的关系。右击两个表之 

间的连接线,选择编辑关系。 

如图2所示,两个表格控制显示了当前在 

两个表格中CategorylD字段的关系。可 看 

到.在编辑关系对话框中的实施引用完整眭选 后单击文件位置标签。在列表中 找到用户模板一它的文件夹位置应 

该会显示为一个如c:\.\Mia'cx ̄\ 

Ternplatea的压绪格式。 

双击那个列表条目就会出现修 改位置对话框。很可能你仍不能看到 

完整的位置,但只要对话框出现肘马 上 ̄J[:Ctrl-C那么位置就会拷贝到剪 贴板上。接两下E 键关闭修改位置 

和选项对话框= 

现在选择文件菜单里的打开命 令单击文件名对话框.然后}安c 一 

V将位置粘贴过来.你将在文件到表中 

发现N l dot 打开这个横版在格 

式菜单中选择段落.在行距刊表中选 择1 5倍行距.单击确定 保存惨改内 

容。现在.当你创建一个新文档时 

它的默认行距就是1.sea7。 

复制磁盘命令不见了 

当庄彝曲电暂星古击a 墟A 

觥藏拗躔 嘲盘..嘉单 跌 

并且湖览了一些索站豇6点 奄是没有 舟 瓤鼽 蘑 董改正这个若 

擤翦者 

失或者被破坏。将下面的几行复制到 

记事本里.去掉行号并且去掉因为单 词换行而产生的行分隔符 

1 REGE)IT4 

2『HKEY—CLASSES ROOT\CLSID\ f 59099400—57FF一11CE—BD94一 。。2 F日5B590¨ 

3@ ’'Oi ̄k copy Extension 4【HKEY—CLASSES_ROOT\CLSID\ 

{59099400—57FF一1 1 CE—BD94— 0020AF8513590}\lnPtocSe ̄er 32l 5@=-,2\\wlmOwS\\sYsT \\ 

dis ̄mpydll ‘ 6’ ̄PnreedingM,adel-= 阳1m日1t 

7『HKELCLASSEs_ROOT\Drive\ shelIex\COntextMenuHandle rs\ f 59099400—57FF一11CE—BD94一 

O020AF85t359o}1 

2002年1月个^电蘑 

139 维普资讯 http://www.cqvip.com 为Fixc ̄y re9 如果休觉得输^这些字符太麻烦也 

可以在我们的网站的sol咀,cn部分的 

L [。user专栏下载此文件 在资源 

管理器中酷这个文件来恢复提供复 制磁盘命令的快捷菜单处理程序 此外.你还可以在开始菜单的运 行命夸或者在命令行提示符下直接调 

用复制磁盘对话框。使用的命令是: 

ru n dII 3 2 e x e dl sk c 0 P v dII. 

Dl 二。py 

制作提示输入的批处理文件 

我现在使胥 ndows NT4.0,我想 

蔗应一个批愁理 睫麓枉 .玄可 

以提示甩户捣A一个定伴g,并符此 

卫佯g壤嚣 批处理 要新蔗这 

内设I一々参数々 

在Windows 9x中.在目标栏只输人 

描绘的方式提示鞫人。在Windows 

2O0O中.你可以使用盯命令的/P参 

数来提示输人.然后你就可以重新启 

动批处理文件并在命令行糖^文本 @日 0 

SET M巾叫= F NOT 1% GOTO Ready 

SET/P Mytm,a= ̄fl1日 r帕 %O 

:Readv 然而wird s 4lo并不支持/P开 关.所以你还必须使用老式的COPY 

CCN:i ̄E术来实现提示一传递操作 

@Ecru o仟 

IF NOT %1b= GOTO Re 

ECHO Eme iilename followed by 

C +Z and Enter CCPY CON TE ¥¥Ss¥Ss> l FOR/F delires=”%%V IN 

fT日 ssss sss}DO 0%%v 

Readv 这个柳子在Windows 2000或 

Windows NT 404都能使用 它利 用TMicmseftt'[ENT 4D中引进的增强 

型F0R命令。口 O F F l C E S O L U T l o N S 

项是被选中的 这意味着Access只有在父表 

(Categories)中存在一个匹配主键时才接受 

在予丧(Products)中的外键值;如果子表包 

含一个匹配外键值时、Access2不会允许用户删 

障父表中的主键值。 

要查看这些规则如何保护 的数据、 击取消按钮关闭编辑关系对活框,然后按F11 

显示数据库窗Lj。打开Categories' ̄,、任意选 择一条记录、再选择编辑1删除记录 当进行这 

项操作时,Access会显示一个错误信息 说明 

Produ cts表古有相关记录,所以它不会删除 

Categoriesk ̄录。 

在没有确定一个台法种娄的睛况下试图向 

Products表添加一条记录时,程序会显示 一个 

错误提示。如果父表中没有匹配主键值, 

Access不允许用户添加一个外键值 因为键值 

Category是一个查找字段.所以必须选择一个 

已有种类。 

级联更新和删除 

当试图修改一十主键值或者删除一条记录 

时Access可能有两种反应:阻止修改,或者更 

新所有相关表格。更确切地说,当你修改一个 

主键值时,Acc& ̄可以调整与此主键相关联的 

外键值。 假设我们要修改在客户(Customers)表 

中的一个客户号(CustomerID)值。关系窗 

口会显示每个顾客可能有多个订单,并且这个 

关系的引用完整胜已经开启。打开编辑关系对 

话框,选中级联更新相关字段,此时就可以安 

全地更新Customers表中CustomerID字段的 

值,而且Access ̄会更新订单(Orders1表格 

中相关的字段。 

接下来,打开Ctlstomers ̄.找 ̄JAlfi'e如 

Futterkiste那条记录,井将主键值ALFKI修改 

_ 固 

■■■ 

田2:你可以决定^c∞ss是否需要支持完整性完整性 规则,以殛Acc日ss在改变主键的时候是否允许它同时 廿血 圭删睦姻生曲 糟 

140 PO_lH- ・eh目1ese Pdilion Janua ̄2002 为A L F R E 关闭表格。然后打开订单 

(Orders1表,并 Customer字段排序。由 

于这个字段是一个查找字段f它显示的是顾客 

名字,但存储的是CustomerID值),所以尢 

法断定更新能否正确1=作。为了查看更新的效 

果,暂时删除这个查找字段:在设计界面中打 

开表格,选择Customer[D行: 击字段属性 

面板的查找标整,将显示控制设置从组台框修 

改为文本框l保存修改然后返回数据表视图 

你会发现按CIlSLOn'LeE字段排序的表茧的外键值 都更新了 之后,你一定要通过选择显示控制 

属性的组台框来恢复此查找字段,再保存修 

改。同样,要么休应该使用事先备份的 Customers表格,要么将CustomerID值恢复为 

ALFKI 实施引用完整性还有个好处:这样可 

消除数据孤立问题,例如^LOrders表中删障 

T- 个订单,但相应记录仍存于O r d e 

Details表格中时就会产生问题:这个操作留 下了关于一份不存在的订单的详细数据古包 

而这份数据信息无弦通过查找CustomerID向 

刷F]显示。 

使用级联删除就可以稍除孤立数据。回到 

关系窗口并且右击订单(Orders)和订单明细 

fOrder DetaRs)之间的连接线 选择编辑关 

系对话框.选中级联删除相关记录选项。打开 

Order De ̄ails表,休会看到订单号为10.248的 

记录信息 打开Ordet'a表,通过Order ID字段 对表格进行排序.选择订单号为10,248的记录 

并将它删除。回到Order Details表。如果这十 

表还打开着,Access将显示谊订单号相关信息 

已被删除 如果在删除订 记录前关闭了表 

格,那么在用户下次打开表格时相差记录将不 

复存在: 

注意事项 

删除数据是一项很严肃的操作,它可以造 

成深远的影响。非专业用户不要随意输人、删 

除数据。很多开发^员不愿意删除丧里的数 

据,而是标记数据为已删除,或者将删除数据