完整性约束数据库
1. 什么是数据库的完整性约束条件
数据库完整性(Database
Integrity)是指数据库中数据的正确性和相容性,其目的是防止垃圾数据的进出。数据库完整性由各种各样的完整性约束来保证,因此可以说数据库完整性设计就是数据库完整性约束的设计。加在数据库之上的语义约束条件就是数据库完整性约束条件。
完整性约束条件作用对象可以使关系、元组、列三种。
●列约束主要是列的数据类型、取值范围、精度、排序等约束条件。
●元组的约束是元组中各个字段间的联系的约束。
●关系的约束是若干元组间、关系集合上以及关系之间的联系的约束。
完整性约束条件涉及这三类对象,其状态可以是静态的,也可以是动态的。所谓静态约束是指数据库每一确定状态时的数据对象所应满足的约束条件。它是反映数据库状态合理性的约束,这是最重要的一类完整性约束。
动态约束是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件。
完整性约束条件可分为以下六类:
●静态列级约束
●静态元组约束
●静态关系约束
●动态列级约束
●动态元组约束
●动态关系约束
1.
静态列级约束是对一个列的取值域的说明,包括以下几个方面:
(1)对数据类型的约束,包括数据的类型、长度、单位、精度等;
(2)对数据格式的约束。例如规定日期的格式为YYYY-MM-DD;
(3)对取值范围或取值集合的约束。例如规定学生的成绩取值范围为0~100;
(4)对空值的约束,规定哪些列可以为空值,哪些列不能为空值;
2.
静态元组约束就是规定元组的各个列之间的约束关系。例如,订货关系中包含发货量、订货量等列,规定发货量不得超过订货量。
3.
静态关系约束是指在一个关系的各个元组之间或者若干关系之间存在的约束。常见的静态约束有:
(1)实体完整性约束;
(2)引用完整性约束;
(3)函数依赖约束;大部分函数依赖约束都在关系模式中定义。
(4)统计约束;即字段值与关系中多个元组的统计值之间的约束关系。例如,规定部门经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍。
4.
动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:
(1)修改列定义时的约束。例如,将允许空值的列改为不允许空值时,如果该列目前已存在空值,则拒绝这种修改。
(2)修改列值时的约束。修改列值时有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。例如,职工调整后的工资不得低于其调整前的原来工资;职工婚姻状态的变化只能是由未婚到已婚、已婚到离异、离异到再婚等几种情况。
5.
动态元组约束是指修改元组的值时元组中各个字段间需要满足某种约束条件。例如,职工工资调整时新工资不得低于原工资+工龄*1.5等。
6.
动态关系约束是加在关系变化前后状态上的限制条件。例如,在集成电路芯片设计数据库中,一个设计中用到的所有单元的工艺必相同,因此,在更新某个设计单元时,设计单元的新老工艺必须保持一致。
2. 关系数据库的三个完整性约束是什么各是什么含义
可分为三种类型:与表有关的约束、域(Domain)约束、断言(Assertion)。
1、与表有关的约束:是表中定义的一种约束。可在列定义时定义该约束,此时称为列约束,也可以在表定义时定义约束,此时称为表约束。包括列约束(表约束+NOTNULL)和表约束(PRIMARYKEY、foreignkey、check、UNIQUE)。
2、域(Domain)约束:在域定义中被定义的一种约束,它与在特定域中定义的任何列都有关系。
3、断言(Assertion):在断言定义时定义的一种约束,它可以与一个或多个表进行关联。不必与特定的列绑定,可以理解为能应用于多个表的check约束,因此必须在表定义之外独立创建断言。
(2)完整性约束数据库扩展阅读:
完整性约束中包含四个完整性,即域完整性,实体完整性、参照完整性和用户定义完整性。
1、域完整性为保证数据库字段取值的合理性。属性值应是域中的值,这是关系模式规定了的。除此之外,一个属性能否为NULL,这是由语义决定的,也是域完整性约束的主要内容。
2、实体完整性,指关系的主关键字不能重复也不能取“空值"。一个关系对应现实世界中一个实体集。现实世界中的实体是可以相互区分、识别的,也即它们应具有某种惟一性标识。
3、参照完整性,定义建立关系之间联系的主关键字与外部关键字引用的约束条件。关系数据库中通常都包含多个存在相互联系的关系,关系与关系之间的联系是通过公共属性来实现的。
4、用户定义完整性,则是根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出约束性条件。
3. SQL数据库的完整性约束是用来干什么的
保证数据的正确完整性,避免对数据库的增删改等操作带来的错误。
举个例子,一条数据表结构为
学号 姓名 。。。
其中学号为主键,但是你试图添加一条数据库记录 : 张三 。。。
而学号为空 NULL 这样则是添加不成功的,这就是完整性约束。
4. 数据库完整性约束条件
你输入的名字的长度必须是2到8之间,你输入“2”,长度只有1,所以不符合约束条件
5. 如何来实现关系数据库完整性约束
数据库中的数据是从外界输入的,而数据的输入由于种种原因,会发生输入无效或错误信息。保证输入的数据符合规定,成为了数据库系统,尤其是多用户的关系数据库系统首要关注的问题。数据完整性因此而提出。数据完整性是指数据的精确性和可靠性。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据完整性分为四类:实体完整性、域完整性、参照完整性、用户定义的完整性。数据库采用多种方法来保证数据完整性,包括外键、约束、规则和触发器。系统很好地处理了这四者的关系,并针对不同的具体情况用不同的方法进行,相互交叉使用,相补缺点。
楼上说的主键外键只是一方面,还有约束、规则和触发器,通过设置,由DBMS来自动完成。
6. 数据库定义完整性约束!!!急!!!
1:在关系Student中插入学生年龄值应在15~35之间
ALTER TABLE Student
ADD CONSTRAINT chk_Student_age
CHECK ( Sage >= 15 AND Sage <= 35 );
2:在关系SC中插入元组时,其sno值和cno值必须分别在Student中和Course中出现
ALTER TABLE SC
ADD CONSTRAINT FK_SC_Student
FOREIGN KEY (Sno) REFERENCES Student;
ALTER TABLE SC
ADD CONSTRAINT FK_SC_Course
FOREIGN KEY (Cno) REFERENCES Course;
3:在关系SC中修改grade值时,必须仍在0~100之间
ALTER TABLE SC
ADD CONSTRAINT chk_SC_grade
CHECK ( grade >= 0 AND grade <= 100 );
4:在删除关系Course中一个元组时,首先要把关系SC中具有同样cno值的元组全部删去
-- 这个是在 第 2 题的基础上面, 增加一个 ON DELETE CASCADE
ALTER TABLE SC
ADD CONSTRAINT FK_SC_Course
FOREIGN KEY (Cno) REFERENCES Course
ON DELETE CASCADE;
5:在关系Student中把某一个sno值修改为新值时,必须同时把关系SC中那些同样的sno值也修改为新值
-- 这个是在 第 2 题的基础上面, 增加一个 ON UPDATE CASCADE
ALTER TABLE SC
ADD CONSTRAINT FK_SC_Student
FOREIGN KEY (Sno) REFERENCES Student
ON UPDATE CASCADE;
7. SQL 建立数据库 表(完整性约束)
数据库可以在SQL2000/2005/2008企业管理器中直接建立;
建表
USEDB
GO
CREATETABLET1---建立T1表
(M_1INTPRIMARYKEYNOTNULL,
M_2CHAR(20),
M_3CHAR(20),
N_1INT
)
GO
CREATETABLET2---建立T2表
(N_1INTPRIMARYKEYNOTNULL,
N_2CHAR(20),
N_3CHAR(20)
)
GO
ALTERTABLET1
---为T1表建立外键(当有数据插入T1时,会检查T1中的N_1在T2中是否存在)
ADDCONSTRAINTFK_T1_N_1FOREIGNKEY(N_1)REFERENCEST2(N_1)
GO
---------------
删除table2中数据的时候table1中有N_1的信息也要删除
建个触发器
USEDB
GO
CREATETRIGGERinfor_delONT2FORDELETE
AS
BEGIN
DELETEFROMT1WHEREN_1IN(SELETEN_1FROMDELETED)
GO
--------------------------
SQL2008下已通过执行
8. 数据库完整性约束
这个只能约束位数,不能约束输入的日期是否合法,尽量做到程序中
9. 数据库用SQL语言建表,什么是完整性约束请问如何写出各种完整性约束
一、数据的完整性
实体完整性
实体完整性简单的说,就是将表中的每一行看作一个实体。实体完整性要求表的标示符列或主键的完整性。可以通过建立唯一索引、PRIMARY KEY约束、UNIQUE约束,以及列的IDENTITY属性来实施实体完整性。
域完整性
域完整性是指给定列的输入有效性。要求表中指定列的数据具有正确的数据类型、格式和有效的数据范围。强制域有效性的方法有:限制类型(通过数据类型)、格式(通过 CHECK 约束和规则)或可能值的范围。域完整性通过 FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则来实现。
引用完整性
引用完整性又称参照完整性。引用完整性维持被参照表和参照表之间的数据一致性,他通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。
用户定义完整性
二、约束操作
与表相关的约束
在SQL 2008中,常用有6种约束,分别是NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY,DEFAULT和CHECK.
--添加主键约束(即primary key约束)
alter table goods add constraint pk_gid primary key(gid)
--1.删除主键约束
alter table goods drop pk_gid
--添加唯一约束(即unique约束)
alter table goods add constraint uq_gname unique(gname)
--删除唯一约束:仿1.
--添加缺省约束(即default约束)
alter table goods add constraint def_gtel default 0000-00000000 for gtel
--删除缺省约束:仿1.
--添加检查约束(即check约束)
alter table goods add constraint ck_gprice check(gprice>500)
--删除check约束:仿1.
--创建表2
create table g_p
(
wno int identity(1,1) primary key,
gno int
)
--添加外键约束(即foreign key约束)
alter table g_p
add constraint fk_gno
foreign key(gno) references goods(gid)
--删除外键约束:仿1.
--使用newid()
select newid()--生成全球唯一的ID号
create table customer
(
custID uniqueidentifier not null default newid(),
customer char(30) not null
)
insert customer values(newid(),\''\''accp\''\'')--向customer中插入信息
-----------------------------------慢慢研究----
10. 数据库的完整性包含哪些完整性约束
数据完整性约束指的是为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。
数据库的完整性约束包含以下类型:
1) 与表有关的约束:是表中定义的一种约束。可在列定义时定义该约束,此时称为列约束,也可以在表定义时定义约束,此时称为表约束。
2) 域(Domain)约束:在域定义中被定义的一种约束,它与在特定域中定义的任何列都有关系。
3) 断言(Assertion):在断言定义时定义的一种约束,它可以与一个或多个表进行关联。
(10)完整性约束数据库扩展阅读:
数据的完整性
分为以下四类:
1) 实体完整性:规定表的每一行在表中是惟一的实体。
2) 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。
3) 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。
4) 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。