福建电脑2011年第10期
MySQL数据完整性的研究与实现
钟志宏
(黔南民族师范学院计算机系贵州都匀558000)
【摘要】:数据库的数据完整性的目标是确保数据的一致性和相容性,完整性约束已经作为数据库模式的一个重要的部分。本文主要介绍了MYSQL数据库中数据完整性约束的实施方法和策略,重点讨论MYSQL数据库所不支持的域完整性、元组级完整性及关系间完整性的实施策略。
【关键词】:MYSQL;数据库;数据完整性
1、引言
数据库技术毫无疑问的作为现代信息技术与信息服务的基石。随着信息社会的不断发展,各种信息应用也不断向着精细化和完善化发展,如何保证数据库中数据的正确性和相容性,是数据库设计的一个重要组成部分。数据完整性约束,能够使数据库系统有效的模拟现实系统中的数据规定,保证数据的正确性与结构化,是数据库系统的数据库模式的一部分。根据作用的数据库对象与范围的不同,数据完整性约束包括三个方面:实体完整性、参照完整性(或引用完整性)、用户定义完整性(包括域完整性、元组约束、关系间约束)。其中实体完整性和参照完整性是关系模型必须满足的约束条件,即关系的两个不变性。
MySQL数据库系统因其开源性、体积小、高性能、总体拥有成本低,成为众多中小型企业信息系统数据存储的首要选择,尤其在互联网应用中更是如此。然而,MYSQL数据库系统与其他成熟的数据库系统(如Oracle、SQL Server、DB2等)相比有其优势,但也存在着不足。就数据完整性而言,MYSQL完善的支持了实体完整性和参照完整性,而用户定义完整性支持有所不足。本文为主要介绍MSYQL数据库数据完整性约束的实施方法和策略,重点讨论MYSQL数据库用户完整性的实施方法。
2、MSQL中的数据完整性
本文使用的MYSQL数据库版本为5.5.13,采用以下关系模式作为实例进行讨论。
Student(sno,sname,ssex,sage,sbirth,sdept,shobby, graduate)学生表:sno学生编号为主键,sname姓名,ssex 性别,sage年龄,sbirth出生日期,sdept系别,graduate 是否允许毕业。
Course(cno,cname,ccredit,ctype)课程表:cno课程编号为主键,cname课程名称(不能重复),ccredit学分,ctype课程类型。
SC(sno,cno,grade)选课成绩表:sno学生编号、cno 课程编号共同作为为主键,grade为成绩。
2.1实体完整性
数据表中的每条记录(元组)表示了现实世界中一个有区别但客观存在的实体,由于实体是存在且唯一的,也就要求表中的记录(元组)即不能为空、且不能重复的。MYSQL实体完整性实现策略:
(1)主键(PRIMARY KEY)约束:如Cno CHAR(10) PRIMARY KEY。
(2)唯一索引(UNIQUE)约束,并且要求索引字段不能为空:如Cname VARCHAR(40)UNIQUE NOT NULL。
2.2参照完整性
一张数据表中某列数据只能引用另一数据表中关键字的数据,保证表之间数据的一致性,防止没有意义或不存在的数据出现。
MYSQL参照完整性通过外键(FOREIGN KEY)约束实现,并且必须保证表的存储引擎为INNODB。MYSQL外键在进行更新(On update)、删除(On Delete)操作时分别支持选项:Cascade、Restrict、No Action、Set Null。如在选课成绩表SC中定义参照完整性约束如下:
FOREIGN KEY(Sno)REFERENCES Student(Sno) ON Delete Cascade On Update Cascade
2.3用户完整性
数据库用户完整性包括域完整性(约束某一字段上值的输入范围)、元组约束(约束多个字段之间的关系)、关系间约束(多个表之间的关系)。在Oracle、SQL Server等数据库系统中,可以利用CHECK关键字定义域级约束和元组级约束,可以利用断言ASSERTION 来建立关系间的约束。但是在MYSQL数据库中,明确声明了不支持CHECK关键字,如何在MYSQL中实现用户完整性?
项目来源:黔南民族师范学院审批项目《基于粗糙集理论的数据约简与信息分类的研究》,项目编号20071109 24