数据冗余和数据完整性。数据冗余是指数据库中存在一些重复的数据,数据完整性是指数据库中的数据能够正确反应实际情况,
我们说,为了性能着想,数据库中允许有一些数据冗余,但是要保持数据的完整性。
数据完整性=可靠性+准确性,这里我们要清楚以下几点:
1.数据存放在表中
2.数据完整性的问题大多是由于设计引起的
3.创建表的时候,就应当保证以后数据输入是正确的
4.错误的数据、不符合要求的数据不允许输入
本质而言,保证数据的完整性= 实施完整性约束
完整性包括
1. 实体完整性 数据行不能存在重复,规定表的每一行在表中是唯一的,表中定义的索引,UNIQUE,primary key和ideftity是实体完整性的体现
2. 域完整性 域完整性是针对某一具体关系数据库的约束条件,它保证表中某些列不能输入无效的值。
域完整性指列的值域的完整性。如数据类型、格式、值域范围、是否允许空值等。
域完整性限制了某些属性中出现的值,把属性限制在一个有限的集合中。例如,如果属性类型是整数,那么它就不能是.5或任何非整数。
可以使用CHECK约束、UNIQUE约束、default默认值、identity自增、not null/null保证列的值域的完整性。
3. 引用完整性 a.要求子表中的相关项必须在主表中存在
b.如果建立了主表和子表的关系,则:
a1.子表中的相关项目的数据,在主表中必须存在;
a2.主表中相关项的数据更改了,则子表对应的数据项也应当随之
a3. 在删除子表之前,不能够删除主表;
4. 自定义完整性
创建表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)保证的过程。
创建表包括选择字段名称、数据类型、定义是否为空、设置默认值、主键和外键关系、检查约束等。表中没有合适的列作为主键,
可以创建标识列。
SQL Server中存在五种约束:
• 约束的目的:确保表中数据的完整型
• 常用的约束类型:
– 主键约束(Primary Key Constraint):要求主键列数据唯一,并且不允许为空
– 唯一约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值。
– 检查约束(Check Constraint):某列取值范围限制、格式限制等,如有关年龄的约束
– 默认约束(Default Constraint):某列的默认值,用于向列中插入默认值如果没有规定其他的值,那么会将默认值添加到所有的新记录中
– 外键约束(Foreign Key Constraint):用于两表间建立关系,需要指定引用主表的那列–创建数据库
create database student
–创建数据表info
use student
go
create table info(
s_id char(6),
s_name varchar(10),
s_age int
)
–给s_name字段设置not null约束
alter table info
alter column s_name varchar(10) not null–在创建表时添加约束
create table grade(
g_id char(6) not null,
g_name varchar(10) not null, --添加不为空的约束
g_score int check(g_score>=0 and g_score<=120) --default ‘120’ --插入分数的默认值
)–在修改表时添加约束
alter table grade
add
constraint pk_s_id primary key(g_id), --设置主键
constraint unt_s_id unique(g_id), --设置唯一性约束
constraint fk_s_id foreign key(g_id) references info(s_id) on update cascade on delete cascade, --设置外键,参考info表的s_id字段,添加级联更新与级联删除
constraint ck_s_id check(g_score>=0 and g_score<=120), --设置检查约束,禁止分数在分以下或分以上的数据进表
constraint de_g_score default 0 for g_score --设置默认值约束