基于VFP的数据库完整性设计

来源 :光盘技术 | 被引量 : 0次 | 上传用户:Cena0723
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:完整性约束是数据模型的重要组成部分,在应用系统开发中数据库完整性的设计十分重要。本文从实体完整性、参照完整性和用户自定义完整性三方面探讨了数据库完整性理论,并通过实例介绍了在VFP 6.0中数据库完整性的设计。
  关键词:数据库;实体完整性;参照完整性;用户自定义完整性
  中图分类号:TP311.13文献标识码:A
  
  the Data Integrality of the Visual FoxPro Database
  SHANG Jun-ping,LIU He-bing
  (Department of Computer Science & technology , Henan Agricultural University , Henan Zhengzhou 450002)
  Key words: Database;Entity Integrity;Referential Integrity;User-defined Integrity
  
  完整性约束是数据模型的重要组成部分。完整性约束条件是一组完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确性、有效性、相容性。数据库是否具备完整性关系到数据库系统能否真实地反映现实世界,在数据库应用中,如何保证数据的完整性是非常重要的。
  数据库完整性包括实体完整性、参照完整性和用户自定义完整性三方面,数据库完整性设计是数据库原理与应用课程教学中的重要内容。本文以学生-课程-成绩数据库从这三个方面讨论基于VFP的数据库完整性设计。该数据库中包括三个数据表,关系模式分别为:学生(学号,姓名,性别,年龄,所在系),课程(课程号,课程名,先修课程号,学分,周学时),成绩(学号,课程号,成绩)。
  
  1 实体完整性
  
  实体完整性即关系中的记录唯一性,准确地讲就是指关系中的主属性不能为空值,不能有相同值。在VFP 6.O中利用主关键字或候选关键字来保证表中记录的唯一。比如:学号能唯一标识一个学生,在学生表中学号字段就可以作为主关键字或候选关键字。一个表中只能有一个主关键字,可以有多个候选关键字。主关键字或候选关键字的设定通过定义主索引或候选索引实现,一旦定义为主关键字或候选关键字,该关键字的每个属性就不能为空值,并且在关系中不能出现关键字值完全相同的两个元组。
  可以在表设计器中进行定义,在表设计器"索引"选项卡中定义索引名、索引类型及索引表达式。按主关键字字段建立主索引,按候选关键字建立候选索引。
  也可以使用SQL的Create Table命令在建立表文件时指定主关键字或候选关键字实现数据的实体完整性,定义的方法:主关键字的定义是在Create Table语句中在属性定义后加上关键字Primary Key,只能对数据库表文件定义主关键字;建立候选关键字在属性定义后加关键字Unique。
  例如,建立自由表"学生",学号为候选关键字,命令为:create table 学生(学号 c(10) unique,姓名 c(8), 性别 c(2),年龄n(3),所在系 c(16))。
  在数据库中建立学生表,学号为主关键字,命令为:create table 学生(学号 c(10) primary key,姓名 c(8), 性别 c(2),年龄n(3),所在系 c(16))。
  在VFP 6.O中并没有强制为每个表文件指定关键字,但关键字的指定可以确保数据的实体完整性。
  
  2 参照完整性
  
  参照完整性,是用来控制数据一致性,尤其是控制数据库相关表之间的主关键字和外部关键字之间数据一致性的规则。例如,在学生表中删除了一个学生,那么在成绩表中这个学生的成绩也就没有意义,也应该自动删除掉。或者,在学生表中修改某个学生的学号信息,在成绩表中也应该自动修改,参照完整性设计就是为了实现这样的功能。
  在VFP 6.O中建立参照完整性的步骤如下:首先,建立表之间的关系。需要在父表、子表中建立索引,并且父表必须为主索引或候选索引,在数据库设计器中通过父表和子表间的索引建立关系。其次,设置参照完整性约束。设置参照完整性之前,应先清理数据库。清理数据库是物理删除数据库各个表中所有带有删除标记的记录。设定数据库设计器为当前窗口,在“数据库”菜单下选择“清理数据库”。清理数据库后,即可设置参照完整性约束。用鼠标右键单击表之间的关系,从快捷菜单中选择“编辑参照完整性”打开参照完整性生成器的对话框,定义两个表之间的更新、删除和插入规则。参照完整性生成器界面如图1所示。
  


  图1 参照完整性生成器界面
  参照完整性规则包括:
  更新规则:指定修改父表中关键字的值时所用的规则。
  删除规则:指定删除父表中的记录时所用的规则。
  插入规则:指定在子表中插入新记录,或更新原有记录时所用的规则。
  每一种规则可能有“级联”、“限制”或“忽略”,具体说明见表1。当用户操作违反了约束规则时,通过定义限制、级联、忽略来保持约束。
  表1 参照完整性规则
  


  图1中的表格说明了表间关系及参照完整性规则的设定情况。其中父表列、子表列分别显示联接表的父表名、子表名;更新列、删除列和插人列则显示所选定选项按钮的名称,若单击这些列的单元格,会出现一个组合框,供用户选择级联、限制和忽略等功能;父标记、子标记列分别显示父表和子表的索引标识名。
  更新、删除、插入这三种规则的默认值都是“忽略”。一般情况下,更新、删除和插入规则分别选择“级联”、“级联”、“限制”,参照完整性规则被设置在父表或者子表的触发器中,系统为规则生成的代码保存在数据库的存储过程中。图2(a)中列出了学生表和成绩表的原始数据,图2(b)为更新规则为"限制",试图在学生表中修改“s1”为“s11”时发生触发器失败的信息。
  


   (a)原始数据 (b)更新时发生触发器失败
  图2 更新数据触发器失败
  当更改数据库表或改变了在关系中使用的索引时,应在使用数据库之前重新运行参照完整性生成器,以便将修改存储过程代码和那些实施参照完整性的表触发器,从而反映最新情况。
  
  3 用户自定义完整性
  
  任何关系数据库系统都应支持实体完整性和参照完整性。此外,应用系统中往往还需要定义与应用有关的完整性限制,即用户自定义完整性。用户自定义完整性是针对某一具体关系数据库的约束规则,这些规则只在数据库表中存在,反映某一具体应用所涉及的数据必须满足语义的要求。根据激活方式的不同,有效性规则包括字段级有效性规则和记录级有效性规则。
  3.1 设置字段级有效性规则
  字段级有效性规则是对一个字段的约束,用来检查单个字段的数据是否有效。数据库表中每一个字段都有一个定义域,输入的数据必须在定义域之内。建立数据库表时对字段的描述,包括数据类型,宽度,小数点位等也属于基本的完整性控制。在此基础上,还可进一步对字段设置规则。在VFP 6.0中打开表设计器,例如学生表,“字段”选项卡上有“显示”和“字段有效性”选项区,如图3所示。
  


  图3 字段有效性规则设置界面
  “显示”选项区的“格式”文本框用开输入格式功能符,确定整个字段在浏览窗口,表单或报表中显示时采用样式限制。例如输入字母A表示仅允许输入字母,T标示禁止输入字段的前导空格字符和结尾空格字符。“输入掩码”文本框用于指定字段值的输入格式,控制输入的正确性。输入掩码必须按位来指定格式,例如99-999,编号字段对应9的位必须输入数字。“标题”文本框用于设置对应字段的长标题显示,加强对数据库表的安全保护。
  字段有效性区包含“规则”、“信息”、“默认值”三个文本框,各文本框均可直接输入数据,也可以通过其右边的对话按钮打开表达式生成器进行设置。
  “规则”文本框用于定义对字段数据有效性进行检查的规则,它实际上是一个条件,例如图3中的性别=“男”.or. 性别=“女”,它表明性别字段的输入值只能是“男”或“女”。对于在该字段输入的数据,VFP 6.0会自动检查它是否符合条件,若不符合条件必须进行修改,直至与条件符合才允许光标离开该字段。
  “信息”文本框用于指定出错误提示信息,当该字段输入的数据违反条件时,出错信息将显示,如图3中的“你的输入有错误!”。需要注意的是,输入到信息文本框中的信息,要用定界符(单引号,双引号或中括号)括起来。
  “默认值”是在用户没有给该字段确定值时,系统自动设定的内容,可提高输入速度。
  在VFP 6.0中也可以使用SQL的Create Table命令在建表时使用Check指定字段值满足的条件。例如,在数据库中新建“学生”表,性别字段的值只能是“男”或“女”,命令为:create table学生(学号 c(10),姓名 c(8), 性别 c(2) check 性别=“男”.or. 性别=“女”,年龄n(3),所在系 c(16))。
  3.2 设置记录有效性规则
  记录级有效性规则是对一个记录的约束,当插入或修改记录时被激活,它通常比较同一记录中的两个或多个字段值,看它们组合在一起是否有效。以课程表为例,打开表设计器,选择“表”选项卡,有“记录有效性”和“触发器”选项区。如图4所示。
  记录有效性规则的设置和字段有效性规则相似,记录有效性规则只有在整条记录输入完毕后才开始检查数据的有效性。例如可以使用记录级有效性规则来保证“课程”表中的“周课时”字段值大于“学分”字段的值。也可以使用Alter Table命令中的Set check子句设置记录级有效性规则,如图4的记录有效性规则可以用命令来添加,命令为:alter table 课程 set check 周课时>学分。
  


  图4 记录有效性规则设置界面
  对于每个表,在VFP 6.0中定义了三个事件触发器:插入触发器,更新触发器,删除触发器。触发器表达式必须为一个逻辑表达式,用于指定进行相应操作时的规则,返回只能是真(.T.)或假(.F.)。如图4中删除触发器中的表达式为“EMPTY(课程名)”,表示只有当相应记录的"课程名"字段为空时才能删除该记录,每次在表中删除记录时该规则被触发,检查是否满足条件。触发器是作为数据库表的属性而存在的,如果用户将一个表从数据库中移走,与这个表相关的触发器也将被删除。
  
  4 结束语
  
  本文从实体完整性、参照完整性和用户自定义完整性三方面探讨了基于VFP的数据库完整性设计。实体完整性的设置确保数据库表记录的唯一性,参照完整性则对数据库表间关系进行检查,通过规则约束来确保表之间的数据的一致性,用户自定义完整性对数据库表中字段和记录进行有效性检查。数据库完整性规则的设计,充分地保证数据的正确性、有效性和相容性。
  
   参考文献:
  [1]王珊,萨师煊.数据库系统概论[M].北京:高等教育出版社,2006.
  [2]刘瑞新,汪远征.Visual FoxPro程序设计教程[M].北京:电子工业出版社,2006.
  [3]肖慎勇.数据库及其应用[M].北京:清华大学出版社,2007.
  [4]刘特,徐迎晓,李敏等. 在关系数据库中构建数据完整性的检验策略[J].计算机工程,2002(11):87-89.
  [5]张峰,张莉莉.触发器在数据处理过程中的应用研究[J].计算机工程与科学,2008,(5):156-158.
其他文献
摘 要:C语言是嵌入式系统开发中常用的一种程序设计语言.本文结合嵌入式系统的特点,从编程规范、存储器分配和算法优化三个方面,阐述了C语言在嵌入式软件开发中的代码优化方法。  关键词:嵌入式系统;C语言;代码优化  中图分类号:TP202+.7文献标识码:A  The Code Optimization in Embedded Systems Programing with C Language  
期刊
摘 要:研究开发基于AJAX采用B/S三层结构模式设计的实验开放教学管理系统,介绍了系统的主要功能和多课程混合选课、项目分组选课等创新功能,并分析了系统的实践运行效果以及实验开放教学管理所取得的效果。  关键词:AJAX;大学物理实验;开放教学管理系统  中图分类号:G434文献标识码:A    Exploration of Open Experimental Teaching Based on
期刊
摘 要:针对地质图形数据量大,绘图速度慢的问题,在文中提出了若干方法,有效地提高了绘制复杂地质图形的速度。对于运用AutoCAD绘制地质图的读者来说,该文有一定的参考价值。  关键词:AutoCAD;绘图速度;方法  中图分类号:TP391.72 文献标识码:A    On Methods of the Enhancement of AutoCAD Drawing Speed  WANG Xiao
期刊
摘 要:基于网络的考试系统以其考试组织严格可信、考试结果分析科学合理、考试成本低、考试效率高等优势被各类学校所重视,本文就笔者所在单位的网上考试系统的设计与实现中涉及的开发技术选择、总体设计、数据库设计以及详细设计中的关键问题予以阐述。  关键词:网上考试系统;总体设计;数据库设计;详细设计  中图分类号:G434 文献标识码:A    The Design and Realization of
期刊
摘 要:AJAX是web2.0应用的一种新方法。它并不是一门新的语言或技术,而是几种已经在各自领域大行其道的技术的强强结合,AJAX 混合了DHTML/CSS、DOM、 XML 及 XSLT等几项技术,并且利用 JavaScript来整合上述技术。AJAX为交互较多、频繁读数据、数据分类良好的web应用提供了一个很好的解决方案。  关键词:AJAX;XMLHttpRequest;Web应用  中图
期刊
摘 要:主要阐述了嵌入式Linux设备驱动程序的概念,归纳嵌入式Linux设备驱动程序的共性,探讨嵌入式Linux设备驱动程序具体开发流程以及驱动程序的关键代码,总结嵌入式 Linux设备驱动程序开发的主导思想。  关键词:嵌入式系统;Linux;设备驱动程序;内核    Design and Implementation of Embedded Linux Device Drivers  QU
期刊
摘 要:本文笔者充分应用社会性软件构建起FLASH课程的网络教学支撑平台,连续3个学期利用此平台对学生进行创意培养的研究。通过对实验班和普通班的学生进行对比研究,笔者发现:应用社会性软件构建FLASH课程网络支撑平台进行教学,是培养学生创意的一种有效途径;应用社会性软件构建FLASH课程网络支撑平台,是一种师生双方共同动态构建的过程,具有明显的生成性。  关键词:社会性软件;FLASH课程;网络教
期刊
摘 要:本文提出了一种基于LonWorks技术的智能照明系统设计方案,并利用MiniEVK工具对方案进行了开发。测试结果表明,系统通信效果良好、互操作性强,满足了设计要求。  关键词:电力线载波通信;LonWorks技术;Mini EVK;电力线智能收发器;照明系统  中图分类号:TP18文献标识码:A   Design of Smart Lighting System Based on LonW
期刊
摘 要:本系统设计采用基于DSP和FPGA的双缓冲"乒乓操作"技术,实现了大容量数据的传输。利用EDMA控制器高效地实现存储空间的数据搬移,而DSP的中央处理器则专注于对视频数据信号进行实时处理。经测试本系统完全满足视频信号处理系统的高速实时性要求。  关键字:TMS320VC6713;ACEX1E30;异步FIFO;乒乓操作  中图分类号:TP274.2文献标识码:A    Design of
期刊
摘 要:本文在提出了应用于教学的P2P模型,针对这个系统的文件共享提出超级节点的思想并给出了模型的设计思想。接着介绍了如何实现对等端的通信--IP打洞,通过Java平台对系统中的即时通信功能和语音聊天功能进行了设计和实现。  关键词:P2P;Java平台;超级节点  中图分类号:G434文献标识码:A    Design of the Teaching Case System Based on P
期刊