美文网首页数据Java学习笔记sql
Oracle入门笔记【6】数据库的三大设计范式

Oracle入门笔记【6】数据库的三大设计范式

作者: 大小说家RCQ | 来源:发表于2016-11-15 18:54 被阅读56次
    数据库的第一设计范式(单表):
    

    “数据表中的每个字段都不可再分。”
    例如:
    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)
    );

    相关文章

      网友评论

      本文标题:Oracle入门笔记【6】数据库的三大设计范式

      本文链接:https://www.haomeiwen.com/subject/ocdlpttx.html