数据库的第一设计范式(单表):
“数据表中的每个字段都不可再分。”
例如:
creat table(
mid number,
name varchar2(50),
contact varchar2(200),
constraint pk_mid primary key(mid)
);
发现联系方式不唯一,contact字段还可以分,不符合第一设计范式。
修改:
creat table(
mid number,
name varchar2(50),
email varchar2(200),
tel varchar2(50),
mobil varchar2(50),
constraint pk_mid primary key(mid)
);
这个时候字段不可再分,所以符合第一范式。
数据库设计的第二范式(多对多关系的映射):
“ 数据表之中不存在非关键字对任意一候选关键字段的部分函数依赖。”
对概念的解释:
所谓的函数关系就是说两个列之间不要存在有函数关系。
依赖指的是通过某几个字段可以成功的推演出唯一的字段。
实例:
设计一个学生选课的数据表,每个学生针对于没门课程可以有一个成绩,每个课程有学分。
第一设计范式:
creat table student_curse (
stuid number,
sname varchar2(50),
ctitle varchar2(20),
credit number,
score number,
constriant pk_stuid primary key(stuid)
);
存在如下问题:
1,无法设计一个合适的字段作为主键;
2,课程信息重复,那么如果要更新一个课程的信息,那么需要更新N行记录;
3,如果有一门课程没有人参加,那么这个课程信息就彻底消失了;
修改:
creat table student (
stuid number,
sname varchar2(50),
constriant pk_stuid primary key(stuid)
);
creat table course (
cid number,
ctitle varchar2(50),
credit number,
constriant pk_cid primary key(cid)
);
creat table student_course (
stuid number references students(stuid)on delete cascade,
cid number references course(cid)on delete cascade,
score number
);
数据库设计的第三范式(一对多关系的映射):
“数据表之中不存在非关键字对任意一候选关键字段的传递函数依赖。”
范例:
要求设计数据表,可以描述出一个学校有多个学生
create table school(
schid number(),
name varchar2(50),
address varchar2(200),
tel varchar2(20),
constraint pk_schid primary key(schid)
);
creat table student (
sid number,
sname varchar2(50),
schid number reference school(schid)
);