版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
完整性约束条件完整性控制FoxPro的完整性小结5数据库完整性数据库的完整性是指数据的正确性和相容性。例如,学生的学号必须唯一;性别只能是男或女、本科学生的年龄的取值范围为14-30的整数;学生所在的系必须是学校已经开设的系等。数据库是否具备完整性关系到数据库系统能否真实地反映现实世界,因此维护数据库的完整性是非常重要的。
5数据库完整性数据的完整性和安全性是两个不同的概念。前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(GarbageInGarbageOut)所造成的无效操作和错误结果。而后者是保护数据库防止恶意破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。5.2数据库完整性
为维护数据库的完整性,DBMS必须提供一种机制来检查数据库中的数据,看其是否满足语义规定的条件。这些加在数据库数据之上的语义约束条件称为数据库完整性约束条件,它们作为模式的一部分存放入数据库中。而DBMS中检查数据是否满足完整性条件的机制称为完整性检查。5.2数据库完整性5.1
完整性约束条件完整性检查是围绕完整性约束条件进行的,因此完整性约束条件是完整性控制机制的核心。完整性约束条件作用的对象可以是关系、元组、列三种。其中列约束条件主要是列的类型、取值范围、精度、排序等约束条件。元组的约束条件是元组中各个字段间的联系的约束。关系的约束是若干元组间、关系集合上以及关系之间的联系的约束。
5.1
完整性约束条件完整性约束条件涉及的这三类对象,其状态可以是静态的,也可以是动态的。所谓静态约束是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束,这是最重要的一类完整性约束。动态约束是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它反映数据库状态变迁的约束。5.1
完整性约束条件图5.1完整性约束条件分类对象粒度对象状态动态列级约束动态元组约束动态关系约束④⑤⑥静态列级约束静态元组约束静态关系约束①②
③
静态动态列元组关系5.1
完整性约束条件一、静态列级约束静态列级约束是对一个列的取值说明,这是最常用也是最容易实现的一类完整性约束。
1.对数据类型的约束(包括数据的类型、长度、单位、精度等)
2.对数据格式的约束例如,规定学号的前两位表示入学年份,中间两位表示系的编号,后三位为顺序编号。
5.1
完整性约束条件一、静态列级约束
3.对取值范围或取值集合的约束例如,规定学生成绩的取值范围为0-100,性别的取值集合为[男,女]。
4.对空值的约束空值表示未定义或未知的值,它与零值和空格不同。有的列允许有空值,有的则不允许。例如学生学号不能取空值,成绩可以为空值。
5.其它约束例如关于列的排序,组合列等。5.1
完整性约束条件二、静态元组约束一个元组是由若干个列值组成的,静态元组约束就是规定元组的各个列之间的约束关系。例如订货关系中包含发货量、订货量等列,规定发货量不得超过订货量;又如教师关系中包含职称、工资等列,规定教授的工资不低于1000元。5.1
完整性约束条件三、静态关系约束在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:实体完整性约束参照完整性约束实体完整性约束和参照完整性约束是关系模型的两个极其重要的约束,称为关系的两个不变性。5.1
完整性约束条件三、静态关系约束函数依赖约束。大部分函数依赖约束都在关系模式中定义。统计约束。即字段值与关系中多个元组的统计值之间的约束关系。例如规定部门经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍。5.1
完整性约束条件四、动态列级约束动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:修改列定义时的约束例如,将允许空值修改成不允许空值时,如果该列目前已存在空值,则拒绝这种修改。修改列值时的约束修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。例如,职工工资调整不得低于其原来的工资,学生年龄只能增长等。5.1
完整性约束条件五、动态元组约束动态元组约束是指修改元组的值时元组中各字段间需要满足某种约束条件。例如职工工资调整时新工资不得低于原工资+工龄*1.5倍。六、动态关系约束动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束。5.1
完整性约束条件表5.1完整性的约束条件粒度
状态列级元组级关系级列定义元组值实体完整性约束
静态·类型应满足参照完整性约束
·格式的条件函数依赖约束
·值域统计约束
·空值动态改变列定元组新旧值关系新旧状态义或列值之间应满足之间应满足的的约束件条约束条件5.2完整性控制DBMS的完整性控制机制应具有三个方面的功能:定义功能,提供定义完整性约束条件的机制。检查功能,检查用户发出的操作请求是否违背了完整性约束条件。如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。
5.2完整性控制检查是否违背完整性约束的时机通常是在一条语句执行完后立即检查,称这类约束为立即执行约束(ImmediateConstraints)。
有时完整性检查需要延迟到整个事务执行结束后再进行,检查正确方可提交,称这类约束为延迟执行约束(DeferredConstraints)。
例如银行数据库中“借贷总金额应平衡”的约束就应该是延迟执行的约束。从帐号A转一笔钱到帐号B为一个事务,从帐号A转出前后帐就不平了,必须等转入B后帐才能重新平衡,这是才能进行完整性检查。如果发现用户操作请求违背了完整性约束条件,系统将拒绝该操作,但对于延迟的约束,系统将拒绝整个事务,把数据库恢复到该事务执行前的状态。5.2
完整性控制一条完整性规则可以用一个五元组(D,O,A,C,P)来表示,其中:D(Data)约束作用的数据对象;O(Operation)触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查;A(Assertion)数据对象必须满足的断言或语义约束,这是规则的主体;C(Condition)选择A作用的数据对象值的谓词;P(Procedure)违反完整性规则时触发的过程。5.2
完整性控制例如,在“学号不能为空”的约束中D约束作用的对象为Sno属性O插入或修改Student元组时ASno不能为空C无(A可以作用于所有记录的Sno属性)P拒绝执行该操作又如,在“教授工资不得低于1000元”的约束中D约束作用的对象为工资Sal属性O插入或修改职工元组时ASal不能少于1000C职称=“教授”(A仅作用于职称=“教授”的记录)P拒绝执行该操作5.2
完整性控制
在关系数据库管理系统中,最重要的完整性约束是实体完整性和参照完整性,其它完整性约束条件则可以归入用户定义的完整性。目前许多关系数据库管理系统都提供了定义和检查实体完整性、参照完整性和用户定义完整性的功能。对于违反实体完整性和用户定义完整性的操作一般都采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加操作,以保证数据库的正确性。下面我们来讨论一下关系数据库管理系统在实现参照完整性要考虑的几个问题:
5.2
完整性控制
1.外码能否接受空值问题例如,职工-部门数据库包含职工表EMP和部门表DEPT,其中DEPT关系的主码为部门号Deptno,EMP关系的主码为职工号Empno,外码为部门号Deptno,称DEPT为被参照关系或目标关系,EMP为参照关系。
EMP中,某一元组的Deptno列若为空值,表示这个职工尚未分配到任何部门工作。这和应用环境的语义是相符的,因此EMP的Deptno列可以取空值。5.2
完整性控制
1.外码能否接受空值问题
但在学生-选课数据库中,Student关系为被参照关系,其主码为Sno。SC为参照关系,外码为Sno。若SC的Sno为空值,则表示尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记录在Grade列中。这与学校的应用环境是不相符的,因此SC的Sno列不能取空值。因此在实现参照完整性时,系统除了应该提供定义外码的机制,还应该提供定义外码列是否允许空值的机制。5.2
完整性控制2.在被参照关系中删除元组的问题例如要删除Student关系中Sno=95001的元组,而SC关系中又有4个元组的Sno都等于95001,一般地,当删除被参照关系的某个元组,而参照关系存在的若干元组,其外码值与被删除元组的主码值相同,这时可有三种不同策略:5.2
完整性控制级联删除(CASCADES)
将参照关系中所有外码值与被参照关系中要删除元组主码值相同的元组一起删除。例如将上面Sc关系中4个Sno=95001的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去。5.2.2完整性控制受限删除(RESTRICTED)
仅当参照关系中没有任何元组的外码值与被参照关系中要删除元组主码值相同时,系统才执行删除操作,否则拒绝此操作。例如对于上面的情况,系统将拒绝删除Student关系中Sno=95001的元组。5.2
完整性控制置空值删除(NULLIFIES)
删除被参照关系的元组,并将参照关系中相应元组的外码值置空。例如。例如将上面Sc关系中所有Sno=95001的元组的Sno值置为空值。这三种处理方法,哪一种是正确的呢?这要依应用环境的语义来定。在学生-选课数据库中,显然第1种方法是对的。因为当一个学生毕业或退学后,他的个人记录从Student表中删除了,他的选课记录也应随之从SC表中删除。5.2
完整性控制3.在参照关系中插入元组时的问题例如向SC关系插入(99001,1,90)元组,而Student关系中尚没有Sno=99001的学生,一般地,当参照关系插入某个元组,而被参照关系不存在相应的元组,其主码值与参照关系插入元组的外码值相同,这时可以有以下策略:5.2
完整性控制受限插入
仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。例如对于上面的情况,系统将拒绝向SC关系插入(99001,1,90)元组。递归插入首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。例如对于上面的情况,系统将首先向Student关系插入Sno=99001的元组,然后向SC关系插入(99001,1,90)元组。4.修改关系中主码的问题不允许修改主码在有些RDBMS中,修改关系主码操作是不允许的,例如不能用UPDATE语句将学号95001改为95102。如果需要修改主码值,只能先删除该元组,然后再把具有新主码的元组插入到关系中。5.2
完整性控制允许修改主码在有些RDBMS中,允许修改关系主码,但必须保证主码的唯一性和非空,否则拒绝修改。当修改的关系是被参照关系时,还必须检查参照关系,是否存在这样的元组,其外码值等于被参照关系要修改的主码值。例如要将Student关系中Sno=950001的Sno值改为960123,而SC关系中有4个元组的Sno=950001,这时与在被参照关系中删除元组的情况类似,可以有:级联修改、拒绝修改、置空值修改三种策略加以选择。5.2
完整性控制
当修改的关系是参照关系时,还必须检查被参照关系,是否存在这样的元组,其主码值等于被参照关系要修改的外码值。例如要把SC关系中(950001,1,90)的元组修改为Sno值改为(990001,1,90),而Student关系中尚没有Sno=990001的学生,这时与在参照关系中插入元组的情况类似,可以有:受限插入和递归插入两种策略加以选择。从上面的讨论看到DBMS在实现参照完整性时,除了要提供定义主码、外码机制外,还需要提供不同的策略供用户选择。选择哪种策略,都要根据应用环境的要求确定。5.2
完整性控制一、FoxPro中的实体完整性
FoxPro在CREATETABLE语句中提供了PRIMARYKEY子句,供用户在建表时指定关系的主码列。例如,在学生-选课数据库中,要定义Student表的Sno为主码,可使用如下语句:
CREATETABLEStudent
(SnoNUMBER(8)PRIMARYKEY,
SnameCHAR(8),
SageNUMBER(2))
其中,PRIMARYKEY表示Sno是Student表的主码。如果用PK_SNO做此主码的约束名,则用如下语句:
CREATETABLEStudent
(SnoNUMBER(8),
SnameCHAR(8),
SageNUMBER(2),
PRIMARYKEYSnoTagPK_Sno)
5.3
FoxPro完整性
若要在SC表中定义(Sno,Cno)为主码,则用下面语句建立SC表:
CREATETABLESC
(SnoNUMBER(8),
CnoNUMBER(2),
GradeNUMBER(2),
PRIMARYKEYSno+CnotagSnocno)
用PRIMARYKEY语句定义了关系的主码后,每当用户程序对主码列进行更新操作时,系统自动进行完整性检查,凡操作使主码值为空或使主码值在表中不唯一,系统拒绝此操作,从而保证了实体完整性。5.3FoxPro完整性二、
FoxPro中的参照完整性
FoxPro的CREATETABLE语句也可以定义参照完整性规则,即用FOREINGKEY子句定义那些列为外码列,用REFERENCES子句指明这些外码相应于那个表的主码。参照完整性规则,由用户在参照完整性编辑中自己定义(分为级联、限制和忽略)。
5.3FoxPro完整性例如,使用如下SQL语句建立SC表
CREATETABLESC
(SnoNUMBER(8)REFERENCESstudentTAGSno,
CnoNUMBER(2)REFERENCESCourseTAGCno,
GradeNUMBER(2),
PRIMARYKEYSno+CnotagSnocno)
CREATETABLESC
(SnoNUMBER(8),
CnoNUMBER(2),
GradeNUMBER(2),
PRIMARYKEYSno+CnotagSnocno,
FOREIGNKEYsnotagSnoREFERENCESstudentTAGSno,
FOREIGNKEYCnotagCnoREFERENCESCourseTAGCno)
5.3FoxPro完整性表明Sc是参照表,Student为其被参照表,SC表中Sno为外码,它相应于Student表中的主码Sno。
当删除或修改Student表中某个元组的主码时要检查Sc中是否有元组的Sno值等于Student中要删除的元组的Sno值,然后根据用户在参照完整性编辑中自己定义的操作进行,如果选择级联,则做级联删除或修改,如果选择限制,则系统拒绝这一更新或删除操作,如果用户选择忽略,则忽略参照完整性的检测。
5.3FoxPro完整性三、
FoxPro中用户定义的完整性除实体完整性和参照完整性外,应用系统中往往还需要定义与应用有关的完整性限制。例如:要求某一列的值不能取空值,要在表中是唯一的,要在某个取值范围中等。
FoxPro允许用户在建表时定义下列完整性约束:列值非空(NOTNULL短语)列值唯一(UNIQUE短语)检查列值是否满足一个布尔表达式(CHECK短语)5.3FoxPro完整性例1建立学生表Student,要求学生姓名Sname列取值唯一,学号Sno列为主码。
CREATETABLEStudent
(SnoNUMBER(8)PRIMARYKEY,
SnameCHAR(8)UNIQUE,
SageNUMBER(2))
该约束要求Sname列值唯一。
5.3FoxPro完整性例2建立学生登记表Student,要求学号在90000~99999之间,年龄<29,性别只能是“男”或“女”,姓名非空。CREATETABLEStudent
(SnoNUMBER(5)CHECKSno>90000ANDSno<99999,
SnameCHAR(20)NOTNULL,
SageNUMBER(3)CHECKsage<29ERROR“sage<29”,
SsexCHAR(2)CHECKssex='男'orssex='女')
5.3FoxPro完整性例3建立职工表EMP,要求每个职工的应发工资不得超过3000元。应发工资实际上就是实发工资列Sal与扣除项Deduct之和。
CEARTETABLEEMP
(EnoNUMBER(4),
EnameCHAR(10),
JobCHAR(9),
SalNUMBER(7,2),
DeductNUMBER(7,2),
DeptnoNUMBER(2),
CHECKSal+Deduct<=3000)
5.3
FoxPro完整性四、触发器(Trigger)
触发器(Trigger)是用户定义在关系表上的一类靠事件驱动的特殊过程。一旦定义,任何用户对该数据表的增、删、改操作均由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制。
5.3
FoxPro完整性在FoxPro中,除列值非空、列值唯一、检查列值是否满足一个布尔表达式外,用户还可以通过触发器(Trigger)来实现其它完整性规则。
FoxPro定义数据库触发器的语句是CREATETRIGGER。
其格式为:
CREATETRIGGERONTableNameFORDELETE|INSERT|UPDATEASlExpression
5.3FoxPro完整性例为学生表定义完整性规则“学生的年龄不大于30岁”。
CREATETRIGGEROnstudentForUPDATEAssage<30
5.3
FoxPro完整性
综上所述,
FoxPro提供了CREATETABLE语句和CREATETRIGGER语句定义完整性约束条件,其中用CREATETRIGGER语句可以定义很复杂的完整性约束条件。完整性约束条件一旦定义好,
FoxPro会自动执行相应的完整性检查,对违反完整性约束条件的操作或拒绝执行或执行事先定义的操作。5.3
FoxPro完整性5.3FoxPro的完整性CREATETABLE|DBFTableName1[FREE] (FieldName1FieldType[(nFieldWidth[,nPrecision])] [NULL|NOTNULL] [CHECKlExpression1[ERRORcMessageText1]] [DEFAULTeExpression1] [PRIMARYKEY|UNIQUE] [REFERENCESTableName2[TAGTagName1]] [NOCPTRANS] [,FieldName2...] [,PRIMARYKEYeExpression2TAGTagName2|,UNIQUEeExpression3TAGTagName3] [,FOREIGNKEYeExpression4TAGTagName4[NODUP] REFERENCESTableName3[TAGTagName5]] [,CHECKlExpression2[ERRORcMessageText2]])5.3FoxPro的完整性NULLAllowsnullvaluesinthefield.Ifoneormorefieldscancontainnullvalues,themaximumnumberoffieldsthetablecancontainisreducedbyone,from255to254.NOTNULLPreventsnullvaluesinthefield.
IfyouomitNULLandNOTNULL,thecurrentsettingofSETNULLdeterminesifnullvaluesareallowedinthefield.However,ifyouomitNULLandNOTNULLandincludethePRIMARYKEYorUNIQUEclause,thecurrentsettingofSETNULLisignoredandthefielddefaultstoNOTNULL.5.3FoxPro的完整性CHECKlExpression1Specifiesavalidationruleforthefield.lExpression1canbeauser-definedfunction.Notethatwhenablankrecordisappended,thevalidationruleischecked.Anerrorisgeneratedifthevalidationruledoesnallowforablankfieldvalueinanappendedrecord.ERRORcMessageText1SpecifiestheerrormessageVisualFoxProdisplayswhenthevalidationrulespecifiedwithCHECKgeneratesanerror.ThemessageisdisplayedonlywhendataischangedwithinaBrowsewindoworEditwindow.
DEFAULTeExpression1Specifiesadefaultvalueforthefield.ThedatatypeofeExpression1mustbethesameasthefielddatatype.
5.3FoxPro的完整性PRIMARYKEYCreatesaprimaryindexforthefield.Theprimaryindextaghasthesamenameasthefield.UNIQUECreatesacandidateindexforthefield.Thecandidateindextaghasthesamenameasthefield.FOREIGNKEYeExpression4TAGTagName4[NODUP]Createsaforeign(non-primary)index,andestablishesarelationshiptoaparenttable.eExpression4specifiestheforeignindexkeyexpressionandTagName4specifiesthenameoftheforeignindexkeytagthatiscreated.Indextagnamescancontainupto10characters.IncludeNODUPtocreateacandidateforeignindex.REFERENCESTableName3[TAGTagName5]Specifiestheparenttabletowhichapersistentrelationshipisestablished.IncludeTAGTagName5toestablisharelationbasedonanindextagfortheparenttable.Indextagnamescancontainupto10characters.IfyouomitTAGTagName5,therelationshipisestablishedusingtheparenttable抯primaryindexkeybydefault.FoxPro修改基本表的命令格式:ALTERTABLETableName1 ADD|ALTER[COLUMN]FieldName1
FieldType[(nFieldWidth[,nPrecision])] [NULL|NOTNULL] [CHECKlExpression1[ERRORcMessageText1]] [DEFAULT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年低田空地出租合同范本
- 2024年出售附近厂房合同范本
- 2024年冲压五金加工合同范本大全
- 不同阶段的理财规划
- 粤港澳大湾区经济发展前景 2024:服务业的竞争优势与重要性
- 世界著名金融人物
- 关于雾化护理小讲课
- 2024厂房租赁合同精简范本
- 2024至2030年中国铁皮接线盒行业投资前景及策略咨询研究报告
- 2024至2030年中国香菇多糖颗粒行业投资前景及策略咨询研究报告
- 北理c语言上机答案(全)
- 水泵各部分结构及原理介绍课件
- 电工基础(周绍敏主编)-参考答案
- 双向情感障碍
- 统编语文教材的主要特点和教学建议(课堂PPT)课件
- 胃溃疡 演示文稿课件
- 胃肠镜检查前后注意事项课件-002
- ESD的防护常识幻灯片
- 重庆市树黄桷树介绍课件
- 苏武传 省赛获奖-完整版课件
- 中国历代化妆史课件
评论
0/150
提交评论