资源描述:
《第4章 完整性约束 v1.2》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《数据库原理及应用》第4章完整性约束电子科技大学计算机学院胡旺scuhuwang@126.com2011年3月29日星期二学以致用DATABASE@UESTC用以促学11ClicktoaddTitle数据库完整性概述22ClicktoaddTitle完整性约束的分类23ClicktoaddTitle完整性约束的定义14ClicktoaddTitle完整性约束的修改15ClicktoaddTitle*完整性约束的验证14ClicktoaddTitle*数据库产品的完整性支持学以致用DATABASE@UESTC用以促学¢完整性约束是加在数据库模式上的一个具
2、体条件,它规定什么样的数据能够存储到数据库系统中。¢例如:©学生的年龄必须是整数,取值范围为14--29;©学生的性别只能是“男”或“女”;©学生的学号一定是唯一的;©学生所在的系必须是学校开设的系;学以致用DATABASE@UESTC用以促学¢数据完整性和安全性是两个不同概念¢数据的完整性是为了防止数据库中存在不符合语义的数据,防止错误数据的输入和输出所造成的无效操作和错误结果。¢数据的安全性是防止非法用户的非法操作所造成的对数据库的恶意破坏。学以致用DATABASE@UESTC用以促学¢完整性约束条件定义机制©完整性约束条件:数据模型的组成部分,约
3、束数据库中数据的语义©DBMS应提供定义数据库完整性约束条件,并把它们作为模式的一部分存入数据库中¢完整性检查机制©检查用户发出的操作请求是否违背了完整性约束条件¢违约反应©如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性学以致用DATABASE@UESTC用以促学¢按照完整性约束条件作用的对象分:©类型约束©属性约束©关系变量约束©数据库约束¢按照完整性约束条件声明时的位置分:©列级约束©表级约束¢两种状态©静态:对静态对象的约束是反映数据库状态合理性的约束©动态:对动态对象的约束是反映数据库状态变迁的约束,新旧值
4、之间满足的约束学以致用DATABASE@UESTC用以促学¢PrimaryKey约束:实体完整性规则?¢列级约束CREATETABLERecipeMaster{RnoVARCHAR(10)PRIMARYKEY,DGnoVARCHAR(10),RdatetimeDATETIME}¢表级约束:单属性主键CREATETABLEMedicine{MnoVARCHAR(10),MnameVARCHAR(50)NOTNULL,MpriceDECIMAL(18,2)NOTNULL,MunitVARCHAR(10),MtypeVARCHAR(10),PRIMARYKE
5、Y(Mno)}学以致用DATABASE@UESTC用以促学¢表级约束:多属性组合主键CREATETABLERecipeDetail{RnoVARCHAR(10),MnoVARCHAR(10)NOTNULL,MamountDECIMAL(18,0),PRIMARYKEY(Rno,Mno)}¢UNIQUE约束定义和PRIMARYKEY约束定义不能在同一属性上¢PRIMARYKEY子句中的每个属性的取值都必须是NOTNULL学以致用DATABASE@UESTC用以促学¢列级约束CREATETABLEDept{DeptNoVARCHAR(10)PRIMARYK
6、EY,DeptNameVARCHAR(50)UNIQUE,ParentDeptNoVARCHAR(10),ManagerVARCHAR(10)}¢索引对象约束CREATEUNIQUEINDEXdeptname_indexONdept(DeptName)¢UNIQUE与PrimaryKey©在一个关系中,PRIMARYKEY只有一个,而UNIQUE可以声明多个©PRIMARYKEY要求属性取值不能为NULL,而UNIQUE允许属性取空值,允许多个空值同时存在©在定义了UNIQUE,PRIMARYKEY约束的属性上建立索引是十分必要的,它可以使约束的检查执
7、行起来更有效学以致用DATABASE@UESTC用以促学¢列级约束CREATETABLEDiagnosis{DGnoVARCHAR(10)PRIMARYKEY,PnoVARCHAR(10)NOTNULL,DnoVARCHAR(10)NOTNULL,SymptomVARCHAR(100),DiagnosisVARCHAR(100),DGtimeDATETIME,RfeeDECIMAL(18,2)NOTNULL}¢域对象约束CREATEDOMAINfeeDECIMAL(18,2)NOTNULL;学以致用DATABASE@UESTC用以促学¢表级约束CREA
8、TETABLEDoctor{DnoVARCHAR(10),DnameVARCHAR(50)NO