欢迎来到天天文库
浏览记录
ID:46233359
大小:222.00 KB
页数:18页
时间:2019-11-21
《数据完整性与表间关系》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第11章数据完整性与表间关系11.1实体完整性与主索引11.2字段级有效性11.3记录有效性11.4存储过程11.5触发器11.6参照完整性与表间关系11.1实体完整性与主索引在VisualFoxPro中,把主索引的索引表达式当作主关键字,把候选索引的索引表达式当作候选关键字,以此来保证实体完整性。在一个表中,主关键字和候选关键字的值不能重复,从而保证了记录的唯一性。11.2字段级有效性字段级的有效性约束条件是为保证输入到字段的值的合法性。例如,在图书表中,我们可以限制图书的“定价”必须大于0,
2、“书名”不能为空等。在VisualFoxPro中设置字段级有效性规则的方法是:在表设计器的“字段”选项卡的“字段有效性”框中输入规则表达式、信息提示和默认值。11.2字段级有效性(续1)在表设计器中,进入“字段”选项卡,选择需要设计字段有效性规则的字段。然后在“字段有效性”区的“规则”框中输入规则表达式。例如:.NOT.Empty(书名)、定价>0。可以在“信息”框中输入错误提示信息。例如,“书名不能为空!”或“定价不能为零或负数”。11.2字段级有效性(续2)11.3记录有效性11.3记录有效
3、性(续)记录有效性和字段有效性的两个主要区别:1.两个规则约束的字段数不同。记录有效性规则可以同时约束多个字段;而字段有效性则只对一个字段有约束。2.两个规则发生的时机不同。记录有效性规则在记录值改变时发生作用;而字段级有效性在光标移开被约束的、且更新了数据的字段时发生作用。11.4存储过程用于数据库描述的、用户自定义的函数和过程称为存储过程,存储过程是数据库的一个组成部分。可用下列方法之一来建立、打开、和编辑存储过程:在“项目管理器”中,选择并展开一个数据库,选定“存储过程”,然后单击【新建】
4、或【修改】按钮。进入“数据库设计器”,依次单击菜单栏上的【数据库】→【编辑存储过程】命令。在“命令”窗口中,使用MODIFYPROCEDURE命令。11.4存储过程(续)例子:编写一个存储过程来实现记录级有效性检查工作。实现方法:在存储过程中,编写CheckBookRecord()函数来判断记录的有效性,并把具体的错误信息放在BookTableErrorStr全局变量中;编写GetErrorStr()函数返回BookTableErrorStr的值。11.5触发器触发器是在一个在插入、更新或删除操
5、作之后自动运行的记录级事件代码。这三种触发器分别称为“插入触发器”、“更新触发器”和“删除触发器”。这种记录级事件代码编制成函数或过程,存入数据库中,成为存储过程。例如,我们可以为销售表编写一个这样的“插入触发器”,起名为“SaleInsertTrigger()”。可以在表设计器的“表”选项卡中,填写触发器函数的名称11.5触发器(续)插入触发器:当记录新增后,记录指针离开插入的这条记录时更新触发器:当修改过字段数据后,记录指针移动时删除触发器:当执行删除命令删除记录时。三种触发器的激活时机如下
6、:有效性规则和触发器的激活顺序:(1)字段级有效性规则(2)记录级有效性规则(3)触发器11.6参照完整性与表间关系11.6.1表间关系11.6.2建立参照完整性11.6.1表间关系通过表间关系可以反映和维护两个实体型之间的语义关系。建立这种表间关系的方法是:分别在两个表的相同字段上建立主索引(或候选索引)和普通索引,然后在数据库设计器中将这两个索引连接起来。两表之间往往是通过一组相同的字段建立表间关系。对这组字段有如下要求:这组字段在一个表中是关键字,即依据这组字段建立了主索引或候选索引。另一
7、个表也依据这组字段建立了索引,索引类型可以是主索引、候选索引或普通索引。11.6.1表间关系(续)11.6.2建立参照完整性11.6.2建立参照完整性(续1)1、更新规则级联:当父表中的关键字值改变时,用新的关键字值更新子表中的所有相关记录。限制:对于父表中的一条记录,若子表中有相关记录,则禁止更改父表中这条记录的主关键字段或候选关键字段中的值,这样在子表中就不会出现孤立的记录。11.6.2建立参照完整性(续2)2.删除规则级联:在父表中进行的删除在相关的子表中反映出来,也就是说,当删除父表中的
8、记录时,相关子表中的记录自动删除。限制:对于父表中的一条记录,如果在子表中有相关的记录时,则在父表中不允许删除这条记录。11.6.2建立参照完整性(续3)3.插入规则插入规则是指当用户要向子表中插入记录时,或者在子表中更新已存在的记录时,是否进行参照完整性检查。限制:若要在子表中插入一条记录,而父表中不存在匹配的关键字值,则禁止插入;若要在子表中修改一条记录,而父表中不存在匹配的关键字值,则禁止修改。这两种情况都是为了防止在子表中出现孤立的记录。忽略:允许插入,不做参照完整性检查。
此文档下载收益归作者所有