如何维护数据完整性
- 格式: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将显示谊订单号相关信息
已被删除 如果在删除订 记录前关闭了表
格,那么在用户下次打开表格时相差记录将不
复存在:
注意事项
删除数据是一项很严肃的操作,它可以造
成深远的影响。非专业用户不要随意输人、删
除数据。很多开发^员不愿意删除丧里的数
据,而是标记数据为已删除,或者将删除数据