本章解释了完整性约束是怎样强制实施数据库中的“业务规则”的,以及怎样预防无效的信息插入到表中。
本章包含下面几个小节:
Introduction to Data Integrity(数据完整性介绍)
Types of Integrity Constraints(完整性约束的种类)
states of Integrity Constraints(完整性约束的状态)
Introduction to Data Integrity(数据完整性介绍)
“业务规则” 设置了一些条件和“关系”,这些条件要么必须符合,要么必须不符合
举个例子:
每个公司都有它自己的工资政策,雇员编号,库存跟踪,等等。
维护数据完整性,是指遵守DBA或者开发定义在数据库上的规则,这很重要。
Techniques for Guaranteeing DataIntegrity(保证数据完整性的技术)
当设计一个数据库应用,开发人员有很多选项来保证存入在数据库中数据的完整性。这些选项波扩:
使用触发器来保证业务规则
使用存储过程完完全全控制数据的访问
在应用程序代码中保证业务规则
使用Oracle数据库完整性约束,它是值定义在列or表级别的规则,用来约束数据。
这一张主要解释了完整性约束的基本原理
Advantages of Integrity Constraints(完整性约束的优势)
一个完整性约束是一个schema object,它创建和删除都使用SQL。为了强制保证数据完整性,尽可能使用完整性约束。
在保证数据完整性上,对比其他手段,完整性约束的优势包括:
Declarative ease(声明简单)
使用SQL来定义完整性约束,你在定义或者修改一个表定义时,不需要额外的编程工作
SQL语句易于编写,也易于排除编程故障。
Centralized rules(集中的规则)
完整性约束在表上定义,然后存在数据字典。因此,任何应用输入的数据 都必须遵守相同的完整性约束。如果表级别的规则有了变化,那么应用是不需要变化的。同样,应用可以使用数据字典中的元数据立即提醒用户的违规操作,甚至在数据库检查SQL语句之前。
Flexibility when loading data灵活性(当大量加载数据时)
你可以临时将约束设为disable,用来避免加载大量数据时候的性能开销。当数据加载完成后,你可以再将约束设回enable。
Types of Integrity Constraints(完整性约束的种类)
Oracle数据库使你可以在 表级 和段级 两个级别应用约束。
约束可以指定为列或属性定义的一部分,称之为inline规范。
约束可以指定为表定义的一部分,称之为out-of-line规范
术语key在好几种完整性约束类型定义中都有使用。
某些完整性约束类型的定义中,包含了的列,或者一组列,称之为key。
key描述了关系型数据库中表和列的关系 ,key中每个值,称之为key values。
下表描述了约束的种类,除了NOT NULL(必须inline),其他都可以是inline或者是out-of-line。
| Constraint Type |
Description |
See Also |
| NOT NULL |
Allows or disallows inserts or updates of rows containing a null in a specified column. |
"NOT NULL Integrity Constraints" |
| Unique key |
Prohibits multiple rows from having the same value in the same column or combination of columns but allows some values to be null. |
"Unique Constraints" |
| Primary key |
Combines a NOT NULL constraint and a unique constraint. It prohibits multiple rows from having the same value in the same column or combination of columns and prohibits values from being null. |
"Primary Key Constraints" |
| Foreign key |
Designates a column as the foreign key and establishes a relationship between the foreign key and a primary or unique key, called the referenced key. |
"Foreign Key Constraints" |
| Check |
Requires a database value to obey a specified condition. |
"Check Constraints" |
| REF |
Dictates types of data manipulation allowed on values in a REF column and how these actions affect dependent values. In an object-relational database, a built-in data type called a REF encapsulates a reference to a row object of a specified object type. Referential integrity constraints on REF columns ensure that there is a row object for the REF. |
Oracle Database Object-Relational Developer's Guide to learn about REF constraints |
NOT NULL Integrity Constraints(非空完整性约束)
NOT NULL约束,要求表中的一列不允许有null值。不存在值就是NULL,默认情况下,表中的所有列都是允许有null的。
NOT NULL主要用于不能缺少值的列。举个例子,hr.employees表要求last_name列有值。企图插入一个雇员信息,但少了last_name列,将会产生如下错误:
SQL>INSERT INTO hr.employees (employee_id, last_name) values (999, 'Smith');
.
.
ERROR at line1:
ORA-01400:cannot insert NULL into("HR"."EMPLOYEES"."LAST_NAME")
在表中有数据是,你是没办法直接添加一个具有not null约束的列,除非你有指定默认值。
Unique Constraints(唯一约束)
唯一键约束要求一个列的值,或者一组列组合的值必须是唯一的。在添加了唯一约束的表,没有行可以在唯一列或者唯一组合列上拥有完全相同的值。
注意:这里的术语key仅仅只在完整性约束中指定的列。因为数据库创建唯一索引时,会强制隐式创建,或者重用一个在key上面的索引,术语unique key 有一些情况下会被错误的用做unique key constraint 或者unique index的同义词。
唯一键约束是为不