oracle数据库的完整性和表的约束(学习Oracle的第四天)

一、数据完整性分类

oracle数据库的完整性和表的约束(学习Oracle的第四天)_第1张图片

1.实体完整性:通过主键实现
    实体完整性要求每一个表中的字段都不能为空或者重复的值。
    Primary Key
    实现方法:
        唯一约束 --- 索引
    主键约束(特点:唯一、不可重复、不可修改)

2.域完整性:通过数据类型
    域完整性指列的值域的完整性。如数据类型、格式、值域范围、是否允许空值等。
    实现方法:
        限制数据类型
    外键约束
    默认值
    非空约束

3.引用完整性(参照完整性)
    (1)也称之为参照完整性,当更新、删除、插入一个表中的数据时,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确。
    (2)引用完整性要求关系中不允许引用不存的实体。
    (3)引用完整性与实体完整性是关系模型必须满足的完整性约束条件。
    实现方法:
    外键约束

4.自定义完整性:约束:constraint xx_check check(age>=0 and age<=200)
    用户自定义完整性指针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
    实现方法:
    存储过程
    触发器

创建学生表、课程表和成绩表来解释数据完整性分类

--学生表
create table students(
  sid integer not null primary key,
  name nvarchar2(20),
  gender nchar(1),
  birthday date,
  address nvarchar2(20) DEFAULT '西安市长安区'
);


--添加自CHECK约束
alter table students add constraint stu_chk_gender check(gender = '男' or gender = '女');

--课程表
create table course(
    cid nchar(4) not null primary key,
    cname nvarchar2(20) not null
);

--插入四条数据
insert into course values('C001','SQL'),
('C002','JAVA'),('C003','数据结构'),('C004','计算机组成原理');


--成绩表
create table score(
    sid integer not null,
    cid nchar(4) not null,
    score integer not null,
    constraint sc_pk primary key(sid,cid),
    constraint score_fk_sid foreign key(sid) references students(sid),
    constraint score_fk_cid foreign key(cid) references course(cid),
    constraint score_chk_score check(score>=0 and score <=100)
);

insert into score values(1,'C001',85);  //成功
insert into score values(1,'C001',55);  //ORA-02291: 违反完整约束条件(违反实体完整性)  
insert into score values(7,'C001',85);  //ORA-02291: 违反完整约束条件(违反参照完整性)  
insert into score values(2,'C001',111); // 违反检查约束条件



二、约束:

oracle数据库的完整性和表的约束(学习Oracle的第四天)_第2张图片

1.非空约束
    给students表名字字段添加非空约束
    alter table students add constraint not_null_name check(name is not null);
2.唯一约束
    给students表名字字段添加唯一约束
    alter table students add constraint nq_name unique(name);
3.检查约束
    给students表gender添加自CHECK约束
    alter table students add constraint stu_chk_gender check(gender = '男' or gender = '女');
4.默认约束
    给students表birthday添加默认值sysdate
   alter table students modify  birthday DEFAULT SYSDATE;



三、三大范式


1.第一范式:有主键,列不可分割(原子的)  1NF
序列号  品牌  价格   颜色   ------  符合第一范式

oracle数据库的完整性和表的约束(学习Oracle的第四天)_第3张图片

 

2.第二范式:非主键字段都完全依赖于主键字段,消除部分依赖。2NF

oracle数据库的完整性和表的约束(学习Oracle的第四天)_第4张图片

oracle数据库的完整性和表的约束(学习Oracle的第四天)_第5张图片

 

3.第三范式:消除传递依赖。 3NF

oracle数据库的完整性和表的约束(学习Oracle的第四天)_第6张图片

oracle数据库的完整性和表的约束(学习Oracle的第四天)_第7张图片

你可能感兴趣的:(oracle)