- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章_数据库完整性
计算机科学与技术系 郑海旭 3. DB的完整性由DBMS的完整性子系统实现(后台技术), 应用程序不关心。 4. 完整性约束种类 实体完整性(Entity Integrity) PK约束 参照完整性(Referential Integrity) FK约束 用户自定义完整性(User Defined Integrity) 数据对象: 属性、元组、表 目前IT市场实现数据完整性的主流方法: 通过模式定义 通过Trigger 1.模式定义(Create Table) Example1: 定义教学数据库中的学生表。 Create table S (S# CHAR(4) not null, Sname CHAR(8) not null Age smallint, Sex CHAR(2), Dept CHAR(4), Primary key (S#)) Example2: 定义学生选课表SC(S#,c#,grade) Create table SC (S# CHAR(4) not null, c# CHAR(4) not null, grade smallint, primary key(S#,c#), foreign key(S#) reference S(S#), foreign key(c#) reference C(c#), CHECK (grade is null ) OR (grade between 0 and 100)) 对两种情况加以讨论 1)在SC中插入一个元组; 2)在S中删除一个元组 . 观察不用外键定义参照完整性的实例: Create table SC …… primary key(S#,c#), Check (S# IN (Select S# From S)), Check (C# IN (Select C# From C))) 对两种情况加以讨论 1)在SC中插入一个元组; 2)在S中删除一个元组 . 显然, 第2种情况破坏了数据库的参照完整性 . 即Check子句中的条件尽可能不要涉及其它关系,尽量利用外键和断言来定义完整性约束 数据完整性的其他问题: 1、假设雇员数据库中含有2个关系: employee表 (eno, name, salary, dno,title…) department表 (dno, dname, total_sal…) 要求学生平均成绩等于各科成绩的平均值。 (2)组成部分 触发事件(Event) 包括: Insert, Update, Delete 何时执行动作的条件(Condition) 动作(Action) NOTE : 在对数据表更新操作时,DBMS为用户产生两张表,存储更新前后的旧值和新值。其目的便于数据恢复等功能。 例如: Oracle、 MS-SQL Server2000 对更新操作均自动产生两张表 old(旧值表)和new(新值表) 更新类型: Update new和old Insert new delete old 触发器实现完整性约束举例: 例3-1 假设雇员数据库中含有2个关系: employee (eno, name, salary, dno,title…) department (dno, dname, total_sal…) 如何保持total_sal 与 salary 的一致性 ? (一)分析理解问题,确定可能导致 total_sal 值改变的事件。 对employee表: 1.插入新员工。 2.修改员工的工资。 3.删除员工的元组。 4.改变员工的所属部门(从一个部门调到 另一个部门)。 1.插入新员工(插入某行)。 Create trigger total_sal1 After insert on employee For each row Begin Update department Set total_sal=total_sal + new.salary Where dno=new.dno ; end 2.改变员工工资。 Create trigger total_sal2 After up
您可能关注的文档
最近下载
- PLC应用技术(西门子S7-1200)全套教学课件.pptx VIP
- 宿州市市直机关遴选公务员考试真题2024.docx VIP
- GBT 35694-2017 光伏发电站安全规程.pdf
- DB41T 2312-2022 波形钢腹板预应力混凝土组合箱梁桥施工规范.pdf VIP
- 征信简版电子版PDF个人信用报告最新版2024年可编辑带水印模板.pdf VIP
- 胃肠道肿瘤的基因检测与个体化治疗.pptx VIP
- 部编版语文四年级上册第二单元综合素质测评B卷(含答案).pdf VIP
- 《道路深层病害探地雷达无损检测技术规范》DB41 T2525-2023.doc VIP
- 中国儿童幽门螺杆菌感染诊治专家共识(2022) .pdf
- 2021届广东省华师附属高级中学(广州总校)三下学期5月综合测试(三模)文科综合地理试卷无答案.pdf VIP
文档评论(0)