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

一、数据完整性分类

cca15111a302779ae020ba8f95091ca7.png

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); // 违反检查约束条件

二、约束:

e2a25145c07457d7442cedddcd2a0103.png

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

序列号  品牌  价格   颜色   ------  符合第一范式

1d6be250a95020c5fde0dcee8228bd31.png

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

a06f2c4705cda08eba68c017f8339b12.png

603e34724901c1a1ce30ee223459b6bf.png

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

c31868096a8d38485d3490eb0b18afad.png

e1ea61eb6c5c00fd940eff6bb028f889.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值