第三章 保证数据完整性
2016-01-06 20:06
387 查看
数据完整性概念:可靠性+准确性=数据完整性
根据数据完整性实施的方法,可以将其分为四类:实体完整体、域完整性、引用完整性及自定义的完整性。
实体完整性:行数据是有效的
定义:一个表中的一行如果与它所代表的实体完全一致,我们就说该表具有实体完整性。
实现方法:主键约束、唯一约束
域完整性:列数据是有效的
定义:域完整性是指给定列的输入有效性。
实现方法:非空约束(notnull)、默认约束(defaule)、检查约束(check )SQLyog不支持
引用完整性:保证引用的效号是有效的
定义:是指分布在两个表中的列所满足的具有主从性质的约束关系。
实现方法:外键约束
用户自定义完整性:保证自定义规则
用户自定义完整性使我们可以定义不属于其它的任何完整性分类的特定业务规则。用户自定义完整性可以通过触发器、存储过程等实现。
外键与外键约束: 二者是不同的概念
注意:没有建立外键的约束不等于没有外键。
主键约束:关系型数据库中的每一个表都必须有一个主键来唯一标识表的每一行,这个主键可以是由一个列组成,也可以由多个列组成一个复合主键。
当主键约束被定义后,一个唯一索引自动被创建。
设置唯一约束:
定义:是指给定列的所有的值必须是唯一的。
唯一约束为表赋予了实体完整性,因为它保证每一行是不同的。
1.列或几个列的组合不是主键,有时需要多个列的值唯一。此时不能使用主键约束,这是因为一个表只能定义一个主键约束,而一个表可以定义多个唯一的表。
2.列的值允许为NULL值,唯一约束可以定义在允许为NULL值的列上,而主键约束只能定义在不允许为NULL值的列上。
设置检查约束:检查约束是最灵活的约束类型,它允许我们在更改或插入行到数据库时有一个较宽范围的限制。
关于检查约束,有以下注意事项:
1.检查约束在新行被添加到表,或者更改一个已有的行时才被计算。
2.检查约束的定义中可以包含一个逻辑表达式或者多个用AND、OR、括号等组合起来的逻辑表达式。
3.检查约束只能引用该约束的表,其它的表不能在检查约束中。
4.在单个列上可以设置多个检查约束。
5.可以设置表级的约束,该约束可以跟一到多个列相关联。
6.检查约束并不强制列接受值(即,有检查约束的列可以接受NULL的值)。
根据数据完整性实施的方法,可以将其分为四类:实体完整体、域完整性、引用完整性及自定义的完整性。
实体完整性:行数据是有效的
定义:一个表中的一行如果与它所代表的实体完全一致,我们就说该表具有实体完整性。
实现方法:主键约束、唯一约束
域完整性:列数据是有效的
定义:域完整性是指给定列的输入有效性。
实现方法:非空约束(notnull)、默认约束(defaule)、检查约束(check )SQLyog不支持
引用完整性:保证引用的效号是有效的
定义:是指分布在两个表中的列所满足的具有主从性质的约束关系。
实现方法:外键约束
用户自定义完整性:保证自定义规则
用户自定义完整性使我们可以定义不属于其它的任何完整性分类的特定业务规则。用户自定义完整性可以通过触发器、存储过程等实现。
外键与外键约束: 二者是不同的概念
注意:没有建立外键的约束不等于没有外键。
主键约束:关系型数据库中的每一个表都必须有一个主键来唯一标识表的每一行,这个主键可以是由一个列组成,也可以由多个列组成一个复合主键。
当主键约束被定义后,一个唯一索引自动被创建。
设置唯一约束:
定义:是指给定列的所有的值必须是唯一的。
唯一约束为表赋予了实体完整性,因为它保证每一行是不同的。
1.列或几个列的组合不是主键,有时需要多个列的值唯一。此时不能使用主键约束,这是因为一个表只能定义一个主键约束,而一个表可以定义多个唯一的表。
2.列的值允许为NULL值,唯一约束可以定义在允许为NULL值的列上,而主键约束只能定义在不允许为NULL值的列上。
设置检查约束:检查约束是最灵活的约束类型,它允许我们在更改或插入行到数据库时有一个较宽范围的限制。
关于检查约束,有以下注意事项:
1.检查约束在新行被添加到表,或者更改一个已有的行时才被计算。
2.检查约束的定义中可以包含一个逻辑表达式或者多个用AND、OR、括号等组合起来的逻辑表达式。
3.检查约束只能引用该约束的表,其它的表不能在检查约束中。
4.在单个列上可以设置多个检查约束。
5.可以设置表级的约束,该约束可以跟一到多个列相关联。
6.检查约束并不强制列接受值(即,有检查约束的列可以接受NULL的值)。
相关文章推荐
- Caffe学习系列(18): 绘制网络模型
- 《实时控制软件设计》第三组第二天工作日志
- Easyui弹出框
- 《Effective java》读书记录-第11条-谨慎地覆盖clone
- HDOJ 2010 水仙花数
- 图形学理论 光照模型
- 解决Ubuntu14.04 LTS中Chrome死机的问题
- 实战中的 Promise 和 Future
- SDL2.0学习笔记——在屏幕上显示一张图片
- 【BS】compilation debug=true targetFramework=4.0 无法识别的属性“targetFramework”
- opencv的实用研究--分析轮廓并寻找边界点
- AdaBoost--从原理到实现
- MFC基础知识
- Python数据类型
- Maven问题集
- UI基础02
- 关于Android中“OnClickLinstener cannot be resolved to a type”的错误
- 数据库
- 学习linux系统的视频(视频中教学使用red hat linux)
- UITableView加载数据