数据库设计三范式

1NF. 原子性---列不可再分

表中的数据列应当具有原子性,通俗的将就是说应当是不可再分

那么具体是什么意思呢?

我们通过观察Orecle数据库自带的EMP表来说明

在emp表的设计中共有8个数据字段,分别为

        emp            ---雇员编号

        ename        ---雇员姓名

        job              ---工作岗位

        MGR           ---领导编号

        hiredate       ---入职日期

        sal               ---工资

        comm          ---奖金

        deptno        ---部门编号

其中每个字段都已经是最小的原子, 不可再分

那么什么是可再分呢?

例如我们再向表中添加一列, 列名为Info, 类型为varchar2, 用于存放雇员的爱好和地址

那么该info列就是可再分, 不满足第一范式 


2NF. 表中非主键字段要完全依赖主键

什么是依赖?

依赖指的是如果字段A和字段B相关,那么A和B就是相互依赖,一般称主键字段是被依赖方 非主键字段是依赖方

什么是完全依赖?

假设当前表中有主键字段A和字段B,还有非主键字段C和D

非主键字段C依赖于主键字段A和B ===>字段C完全依赖于主键

非主键字段D依赖于主键字段A但不依赖于主键字段B ===>字段D不完全依赖于主键

具有不完全依赖的非主键字段是不符合第二范式的

例如:

在上表中有四个字段

学号 和 课程 为联合主键 

成绩 和 课程学分为非主键字段

成绩字段依靠学号和课程号才能唯一确定, 所以成绩完全依赖主键 符合第二范式

但是课程学分仅仅只依赖于课程, 因为课程的学分是固定的 不会因修课的人改变而改变, 所以课程学分仅依赖于部分主键 不符合第二范式

为符合第二范式要将上表进行拆分

 


3NF. 表内非主键字段不能存在传递依赖

什么是传递依赖?

传递依赖就是在一张数据表中各分量必须都依赖于主键,分量之间不能产生依赖

此处禁止的依赖传递是同表中字段间禁止依赖传递, 而不是异表中字段间的依赖

例如在该表中学号为主键,院校是完全依赖于主键的,但院校的地址和院校电话两个字段是依赖于院校的,而院校又是依赖于主键,这就产生了所谓的依赖传递

其中 院校地址和院校电话===>院校===>学号; 产生了依赖传统,并且地址和电话也只是间接依赖于主键, 既不符合第二范式也不符合第三范式

要对该表进行拆分,拆分后符合三范式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值