2024年2月5日发(作者:)
第23卷第6期 计算机技术与发展 Vo1.23 No.6 2013年6月 COMPUTER TECHNOLOGY AND DEVELOPMENT June 2013 运用SQL Server开发软件参照完整性实现方法 刘艳春 (渤海大学大学计算机教研部,辽宁锦州121013) 摘要:数据库完整性是数据库安全性的重要研究内容之一,参照完整性可以保证数据库中表与表之间联系的有效性,防 止数据丢失或无意义的数据在数据库中扩散。文中首先研究参照完整性的内涵,然后给出研究参照完整性实现方法用到 的数据库示例,最后研究参照完整性的三种实现方法。第一种方法是参照关系约束,研究了创建参照关系和参照关系操 作处理方法;第二种方法是触发器,研究了触发器的分类与作用、工作原理以及运用触发器实现参照完整性的方法;第三 种方法是应用程序。研究了应用程序实现参照完整性的各种操作处理方式。 关麓词:SQL Server;数据库完整性;参照完整性;参照关系约束;触发器 中圈分类号:TP311 文献标识码:A 文章编号:1673-629X(2013)06-01l7—04 doi:10.3969/j.issn.1673—629X.2013.06.030 Implementation Method of Reference Integrity for Software Development by SQL Server LIU Yan—chun (Teaching and Research Institute of College Computer,Bohai University,Jinzhou 121013,China) Abstract:Databaseintegrityis one oftheimportant research concent ofdatabase security.and referenceintegrity call ensurethe validity of hte contact between database table and table,and prevent the loss of data or the proliferation of meaningless data in the database.First study the connotation of reference integrity,then give the database example used in study of reference integrity reference method,finally study the three methods of reference integrity.The first method is reference constraint,researches the operation processing method created reference relationship and erference relationship;the second me ̄od is trigger,researches the classiifcation and function,the working prin- ciple and the means to achieve referential integrity wiht it;the third method is the application,researches various operating processing method of applications achieve reference integrity. Key woF ̄s:SQL Server;database integrity;reference integrity;reference relation constraint;trigger O 引 言 则纳入应用软件设计 。 随着信息技术的发展,数据库安全性越来越重要, 参照完整性(Reference Integrity)是指一个表的主 数据库完整性(Database Integrity)是数据库安全性的 关键字与另一个表的外关键字的数据对应一致,保证 重要研究内容之一。数据库完整性是指数据库中数据 数据库中表与表之间联系的有效性,防止数据丢失或 的正确性和相容性,包括实体完整性、参照完整性和用 无意义的数据在数据库中扩散 。软件开发过程中如 户自定义完整性。关系数据库管理系统需要完整性控 果不能保证参照完整性,将给数据造成灾难性的后果。 制或完整性约束来处理完整性…,进行数据库设计时 文中研究SQL Server实现参照完整性的三种方法,为 需要进行完整性设计和完整性约束设计。数据库完整 软件设计人员及数据库管理员提供指导。 性约束可以通过DBMS或应用程序来实现,基于 DBMS的完整性约束作为模式的一部分存人数据库 1参照完整性的内涵 中。通过DBMS实现的数据库完整性按照数据库设 一般地,两个关系的参照完整性约束可表示为: 计步骤进行设计,而由应用软件实现的数据库完整性 兀 (r) 兀 (s) 收稿日期:2012-09-09 修回日期:2012—12—25 网络出版时间:2013—03—05 基金项目:辽宁省科学事业公益研究基金(2011004001) 作者简介:刘艳春(1977-),男,辽宁铁岭人,讲师,从事计算机应用的教学与科研工作。 网络出版地址:http://www.cnki.net/kems/detail/61.1450.TP.20130305.0815.008.html
・118・ 计算机技术与发展 第23卷 其中s是被参照关系(主关系),r是参照关系(从 关系或子关系), 和l,是两个相容的属性集(即属性 个数相等,且类型对应相同)。 对数据库进行更新(插入、修改、删除)操作可能 破坏参照完整性,因此,在对有参照约束的关系(比如 r和s)进行更新时,应该设法保护参照完整性,具体地 说 : (1)如在r中插入一个元组t,则系统必须保证在s 中有一个元组//,,使/z[Y]=t[X],也就是说必须保证 t[X]∈丌、,(s)。 (2)如果从s中删除一个元组 ,则在r中的相应 元组集合or =“[Y](r)如果不是空集,则系统要么拒 绝执行删除命令,要么自动删除r中的相应元组,即实 施级联删除。 (3)对于修改操作分别考虑以下两种情况,对参 照关系r的修改和对被参照关系s的修改。 ①如果修改r中的元组£,并且修改涉及到 的 值,则应该做类似于在r中插入元组的处理。设t 表示 元组t的新值,则系统应该保证 [ ]E兀 ,(s); ②如果修改s中的元组“,并且修改涉及到y的 值,则应该做类似于在s中删除元组的处理。对于参 照关系r中相应元组集合or = Y](r),如果不是空 集,则系统要么拒绝执行修改操作,要么进行按级联删 除方式作级联修改,以确保r中的元组引用s中l,的新 值。 2数据库示例 在后面对参照完整性实现方法的研究中,需要用 到数据库表,先对数据库实例进行简要设计。 在物资明细分类账管理中,“账头”存放一种物资 的基本信息,“账明细”存放入库、出库、结存的详细信 息。一种物资有多笔入库或出库记录,一笔入库或出 库记录只能对应一种物资,因此“账头”和“账明细”之 间是一对多的关系,E—R图如图1所示,其中带有粗 体下划线的属性表示主关键字。为了后面实现操作简 单,在图1中只列出了少量基本属性,实际进行物资明 细分类账管理时,还需要增加相关属性。 将图1转换为关系模式如下,主关键字仍然用粗 体下横线标出。 账头(物资编码、物资名称、规格型号、计量单位、 物资类别、类别代码、存放位置) 账明细(物资编码、入出单号、入库数量、入库单 价、入库金额、出库数量、出库单价、出库金额、结存数 量、结存单价、结存金额) 以上实体及转换的关系模式中,无用汉字表示实 图l 物资明细分类账E—R图 体(关系)名称和属性名称,在SQL Server中为了便于 操作,用英文表示如下。 OpeAccountHead(MCode、MName、SpecType、MU— nit、MClass、ClassCode、Storage) OpeAcc0untDetai“MCode、VoucherNo、InAmount、 —————InPrice InMoney、OutAmount OutPrice、OutMoney Bal— anceAmount、BalancePrice、BalanceMoney) 在SQL Server中创建“Material”数据库,在数据库 中创建“OpeAccountHead”表和“OpeAcc0untDeta 表。 3参照关系约束实现参照完整性 利用FOREIGN KEY定义从表的外关键字,利用 PRIMARY KEY或UNIQUE约束定义主表中的主关键 字或惟一码,可实现主表与从表之间的参照完整性。 3.1创建参照关系 创建表间的参照关系过程是先定义主表主关键字 (或惟一码),再对从表定义外关键字约束。 1)利用企业管理器创建。 步骤如下: (1)定义主关键字。在表设计器中打开主表Ope— AccountHead,选中MCode行,选择主关键字图标。 (2)选择Material数据库目录下的“关系图”图标 右击,在快捷菜单中选择“新建数据库关系图”。 (3)单击“下一步”按钮进入“创建关系向导”界 面,选择要添加到关系图中的表OpeAccountHead和 0peAcc0untDetail,单击“下一步”按钮进入“关系图”界 面。 (4)在关系图上,将鼠标指向主表的主关键字并 托动到从表,即将OpeAccountHead表的MCode字段托 动到OpeAccountDetail表,单击“确定”按钮,建立如图 2所示的主从表约束关系。 (5)退出关系图界面,将关系图的有关信息存盘,
第6期 刘艳春:运用SQL Server开发软件参照完整性实现方法 ・1 19- 命名为“PK—Head—Detail”,即创建了主表与从表的参 照关系。 SQL Server Driver][SQL Server]DELETE语句与COL- UMN REFRENCE约束‘PK—Head—Detail’冲突。该冲 突发生于数据库‘Material’,表‘OpeAccountDetail’ c ̄umn‘MCode’。[SQL Server]语句已终止】。 (4)修改主表中一条记录的物资编码,在从表中 存在与该记录相同的物资编码时,系统提示:【其他用 户已修改了该表或视图的内容;您正在修改的数据库 行在数据库中已不存在。数据库错误:[Microsoft] [ODBC SQL Server Driver][SQL Server]UPDATE语句 图2主从表约束关系 2)利用SQL语句创建。 利用SQL语句创建也是先创建主关键字再创建 参照关系。步骤如下: (1)创建主关键字约束。 ALTER TABLE OpeAcc0untHead ADD CONSTRAINT OAH_PK PRIMARY KEY CLUSTERED(MCode) (2)创建参照关系。 ALTER TABLE 0peAcc0untDetail ADD CONSTRAINTPK—.Head—.Detail FOREIGN KEY(MCode) REFERENCES OpeAccountHead(MCode) 3.2参照关系操作处理 前面已建立了主表和从表约束关系“PK—Head— Detail”,当对表进行操作时,参照关系约束实现参照完 整性的处理如下: (1)向从表中插入一条记录,该记录的物资编码 在主表中不存在时,系统提示:【[Microsoft][ODBC SQL Server Driver][SQL Server]INSERT语句与COL. UMN FOREIGN KEY约束‘PK—Head—Detail’冲突。该 冲突发生于数据库‘Material’,表‘0peAccountHead’ column‘MCode’。[SQL Server]语句已终止】。 (2)修改从表一条记录的物资编码,当修改后的 值在主表中不存在时,系统提示:【其他用户已修改了 该表或视图的内容;您正在修改的数据库行在数据库 中已不存在。数据库错误:[Microsoft][ODBC SQL Server Driver][SQL Server]UPDATE语句与COLUMN FOREIGN KEY约束‘PK—Head—Detail’冲突。该冲突 发生于数据库‘Material’,表‘OpeAcc0untHead’co1. tim‘MCode’。[SQL Server]语句已终止】。 (3)删除主表的一条记录,在从表中存在与该记 录相同的物资编码时,系统提示:【[Microsoft][ODBC 与COLUMN REFRENCE约束‘PK—Head—Detail’冲突。 该冲突发生于数据库‘Materila’,表‘OpeAccountDe- tail’column‘MCode’。[SQL Server]语句已终止】。 4触发器实现参照完整性 触发器(Trigger)是一种特殊的存储过程,与表紧 密相连,不能被直接调用,而是通过事件进行触发而被 执行,即表中的数据发生变化时自动强制执行,但对创 建前就已经存在于表中的数据不能起控制作用 ’ 。 触发器由三部分组成:事件、条件、动作。当事件发生 时且条件成立,则执行动作 。 4.1分类与作用 触发器可以在数据操作时被执行,这类触发器称 作数据操纵语言(DML,Data Manipulation Language)触 发器;也可以在数据模型操作时被执行,这类触发器称 作数据定义语言(DDL,Data Definition Language)触发 器。 DDL触发器是当系统表中的数据被插入、修改或 删除时被执行,即创建、修改或删除数据库模式中的对 象时,为了响应各种数据定义语言事件而激发,这些事 件主要与以关键字CREATE、ALTER和DROP等开头 的Transact—SQL语句对应,执行DDL方式操作的系统 存储过程也可以激发DDL触发器。DDL触发器用来 控制或监控DDL语句,或监控数据库中的重要事件。 DML触发器是当用户表中的数据被插入、修改、 删除时被执行,即为了响应各种数据操纵语言事件而 被激发,这些事件主要与以INSERT、UPDATE、DE— LETE等开头的SQL语句对应。DML触发器的作用 是:强制数据的一致性、提供审计和日志记录、防止无 效的事务处理、启动复杂的业务逻辑。 实现数据库参照完整性使用DML触发器。与其 他方式相比,触发器可以用来对表实施复杂的完整性 约束。 4.2工作原理 触发器不能被显式地调用,而是在向表中插入、 修改或者删除记录时被自动地激活。当数据被操作 时,系统自动创建两个特殊的逻辑表:inserted表和de.
计算机技术与发展 第23卷 leted表。这两个表由系统管理,动态驻留在内存中, 用户不能创建、修改或删除,结构总是与触发器所属的 表相同,用户只能查询数据而不能插入、修改、删除数 据,触发器工作完成后这两个表也自动删除 ]。 当向表中插入数据时,INsERT触发器被触发执 行,新的记录插入到触发器表并被完整地拷贝到in serted表中,这样在插入操作中被放人到每个列中的 每个项目中的信息都可以被检查。 当删除表中的数据时,DELETE触发器被触发执 行,记录从触发器表删除并被完整地拷贝到deleted表 中,这样在删除操作中被删除记录的到每个列中的每 个项目中的信息都可以被检查。 当修改表中的数据时,UPDATE触发器被触发,修 改一条记录等于删除旧记录,同时插入新记录。即修 改数据时,修改之前的记录被放人到deleted表中,修 改之后的记录被放入到inserted表中。这样在修改操 作中即可以检查修改前的数据,也可以检查修改后的 数据。 每条SQ[ 语句只能激活触发器一次,但存在一条 SQL语句影响多条记录的情况,全局变量@@rowcount 保存的就是一条SQL语句执行后所影响的记录数 。 。 4.3参照完整性实现 对表中的数据有插入、修改、删除三种操作,因而 维护数据的触发器也分为INSERT、UPDATE、DELETE 三种类型。同一个表中可以使用多个触发器,即使同 一类型的触发器,也可以使用多个 “ 。 在物资分类明细账中,通过以下两个触发器实现 参照完整性。 (1)同时删除数据触发器。当“账头”表中的一条 记录被删除时,“账明细”中同时删除该物资相关的多 条证 录 (2)同时修改数据触发器。当“账头”表中的“物 资编码”修改时,“账明细”相应的多条记录的“物资编 码”也做相同的修改。 5应用程序实现参照完整性 运用外关键字约束或触发器实现参照完整性,是 数据库管理系统提供的功能,实现起来简单。但受数 据库管理系统的限制,应用程序开发或运行过程中,如 果更换数据库管理系统,这两种方法将失效,只有在新 的数据库管理系统中再建立外关键字约束或触发器, 如果新的数据库管理系统不提供这种功能或某些方面 功能欠缺,将无法实现,应用程序不能运行,程序的可 移植性和健壮性差。解决这种问题的最好方法是不用 数据库管理系统提供的参照完整性约束方法,而是通 过应用程序实现。程序实现参照完整性各种操作的处 理方式如表1所示。 表l 程序实现参照完整性各种操作处理方式 操作表 操作类型 处理方式 插入 当向主表插人数据时,对从表不需要做任何处理 修改 如果对主表的主关键字进行修改,从表的外关键字也 要做同样的修改 主袭 关联记录当要删除主表的一条记录时,先检查从表中是否存在 。若不存在,可以删除主表记录。若存在, 删除 提示用户“从表中存在关联记录需要一起删除,继续 执行删除操作吗?”,用户如果选择“否”, 删除记 录;用户如果选择“是”,先删除从表的关联记录,再 删除主表记录 当向从表中插入一条记录时,检查主表的主关键字是 插入 否存在与欲插人记录外关键字相对应的记录,如果存 在,可以插人;如果不存在,不能插入 从表 当修改从夜记录时,若修改内容不涉及外关键字,可 修改 以修改。若涉及外关键字,则要检鸯主表的主荧键字 是否存在,若存在,町以修改;若不存在,不能瞎改 删除 当删除从表记录时.对主表不需饔敞任伺处理
第6期 刘艳春:运用SQL Server开发软件参照完整性实现方法 ・121・ 6 结束语 [3] Mannino M V.Database Design Application Development and 参照完整性建立在外关键字和主关键字之间或外 Administration[M].2nd ed.[S.1_]:McGraw—Hill Educa. 关键字和唯一关键字之间的关系上,作用主要是:禁止 tion,2004. 在从表中插入包含主表中不存在的关键字的数据行, [4] 王杰文,李赫男,汪风麟,等.参照完整性的实现方法分析 禁止会导致从表中的相应值孤立的主表中的外关键字 [J].南华大学学报(理工版),2002,16(3):31—33. [5] Molinaro C,Greco S.Polynomial time queries OVer inconsistent 值改变,禁止删除在从表中的有对应记录的主表的记 databases with functional dependencies and foreign keys[J . 录。关系数据库管理系统通过建立和使用约束、规则 Data&Knowledge Engineering,2010,69(7):709—722. 和触发器来保证数据完整性 ,文中在研究这些方法 [6] 纂宝声.基于SQLServer2008的DML触发器设计实例分析 的基础上,增加了应用程序实现参照完整性的方法。 [J].计算机技术与发展,2012,22(6):229—232. 关系约束实现的优点是简单、程序实现的优点是灵活, [7] 李作主.使用触发器建立参照完整性[J].计算机与现代 触发器实现与关系约束实现相比可以处理其他数据库 化,20o8,24(9):137—139. 中的表,触发器实现与程序实现相比易于维护。实际 [8] Date C J.An Introduction to Database Systems『M].8 th ed. 应用时使用哪种方法要根据问题具体分析,也可以多 【S.1.]:Addison Wesley/Pearson,2004. [9] 种方法结合使用。 Dewson R.Beginning SQL Server 2005 for Developers[M]. [S.1.]:Apress,2006. [10] 李志强,张瑞杰.数据参照完整性的研究及实现[J].中原 参考文献: 工学院学报,2003,14(2):7-9. [1]Grefen P W P J,Apers P M G.1ntegrity control in relational [11] England K,Powell G.Microsoft SQL Server 2005 Performance database systems[J].Data&Knowledge Engineering,1993, Optimization and Tuning Handbook[M].[S.I_]:Digital 10(2):187-223. Press,2007. [2]百度百科.数据库完整性[EB/OL].2012—08—07.http:// [12] 曹迎槐.数据库管理系统之参照完整性技术研究[J].信息 baike.baidu.corn/view/992852.htn1. 系统工程,2008,21(6):128—131. *+“+一+-・+ (上接第112页) 中继节点购买中继功率,中继节点则通过价格更新策 塔克尔伯格均衡[J].北京邮电大学学报,2011,34(4):75 略制定合理的价格。文中分析了单中继无线协作中继 -79. 网络的功率分配过程和用户的最佳投标量,并进行了 [6] 惠键,朱世华,吕刚明,等.一种多源协作网络的分布式 仿真。仿真结果验证了均衡点的存在,并且与原有的 功率分配与中继选择算法[J].电子与信息学报,2010,32 基于信噪比拍卖算法相比,该算法具有收敛速度快,中 (10):2446—2451. 继节点的有效作用范围大的优点,并明显改善了网络 [7]文信翔,章韵.…种基于拍卖的无线网络资源分配方法 的研究[J].信息技术,2009(2):74—77. 的传输速率。 [8] 王玉峰,王文东,袁 刚,等.Ad Hoc网络中基于Vickrey 拍卖的协作激励机制的研究[J .北京邮电大学学报, 参考文献: 2005,28(4):50—53. [1]Ng T,Yu W.Joint optimization of relay strategies and resource [9] Wang Beibei,Han Zhu,uu K J R.Distributed Relay Selection allocations in cooperative cellular networks[J].IEEE Journal and Power Contml for Muhiuser Cooperative Communication on Selected Areas in Communications,2007,25(2):328— Networks Using Stackel—berg Game[J].IEEE Transactions on 339. Mobile Computing,2009,8(7):975-990. [2] Si Jiangbo,Li Zan,Dang Lanjun,et a1.Joint optimization of re— [10]柯峰,冯穗力,胡 洁,等.DF协作中继网络基于买者/ lay selection and power allocation in cooperative wireless net— 卖者博弈的中继选择和功率分配策略[J].电子与信息学 works[C]//Proe of International Conference on Communica. 报,2010,32(8):1920—1925. tion Systems.Guangzhou,China:[S.n.],2008:1264—1268. [11]Huang Jianwei,Berry R A,Honig M L.Auction-based spec- [3] Ren Shaolei,van der Schaar M.Pricing and Distirbuted Power trum shairng[J].Mobile Networks and Applications,2006,1 1 Contml in Wireless Relay Networks[J].IEEE Transactions on (3):405-418. Signal Processing,2011,59(6):2913—2925. [12]Huang Jianwei,Han Zhu,Chiang M,et a1.Auction—based Re. [4] 吴彤,俞欣雯,黄晶,等.基于非合作博弈的中继网络 SOurCe Allocation for Cooperative Communications『J].IEEE 分布式资源分配[J].北京邮电大学学报,2008,31(6):80 Journal on Selected Areas in Communications,2008,26(7): -84. l226—1237。 『5j 王雷,许文俊,牛 凯,等.高能效功率控制博弈中的斯
本文发布于:2024-02-05 13:59:43,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170711278357020.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |