数据库设计三范式的举例说明

编程入门 行业动态 更新时间:2024-10-07 06:38:12

数据库设计三<a href=https://www.elefans.com/category/jswz/34/1751298.html style=范式的举例说明"/>

数据库设计三范式的举例说明

 

前言

       数据库课本上都把范式写到五范式了,但是实际应用中,满足三范式已经足够了,五范式太多余了。

三种范式是条件递增的联系(即后一个范式是在前一个条件满足的情况下引入新的条件)。

 

例如

 范式

满足条件

一范式(1NF)

条件a

二范式(2NF)

条件a,条件b

三范式(3NF)

条件a,条件b,条件c

 

下面详细解释一下

 

第一范式(1nf)

满足条件:

  1. 原子性,即数据库表里的字段都是不可分割的

 

例如下面学生表的设计明显不满足要求,年级专业是可以再分的,就不能偷懒放在一块

学号

姓名

年龄

年级专业

201511216776

王玉伟

20

15级软工

 

符合第一范式的做法为

学号

姓名

年龄

年级

专业

201511216776

王玉伟

20

15级

软工

 

第二范式(2nf)

满足条件:

  1. 原子性,即数据库表里的字段都是不可分割的
  2. 表中必须有主键
  3. 其他非主属性必须完全依赖主键(不能依赖主键一部分,这是针对联合主键说的)

 

针对条件三解释一下(假设学号为主键)

    我们以学号为主键的时候,确保该学生别的字段都完全依赖学号,不能出现下面这种课程名不依赖学号而依赖课程号的设计。

学号

姓名

年龄

课程名

课程号

201511216776

王玉伟

20

英语

20003

 

符合第二范式的做法

学号

姓名

年龄

201511216776

王玉伟

20

课程名

课程号

英语

20003

 

解释一下联合主键中的要求

       下面是我之前设计的一个表,学号sno与课程号cno做联合主键,而第二范式要求的完全依赖,下表并没有做到从这个表中可以看出,姓名依赖学号,课程名依赖课程号,但是这都是依赖了一部分,只有成绩对学号和课程号都依赖,因此是不符合第二范式的

 

 

符合第二范式的设计为(即拆成三个表,只展示一下表的字段)

Sno

Cno

grade

Cno

cname

Sno

sname

 

第三范式(3nf)

满足条件:

  1. 原子性,即数据库表里的字段都是不可分割的
  2. 表中必须有主键
  3. 其他非主属性必须完全依赖主键(不能依赖主键一部分,这是针对联合主键说的)
  4. 非表中主键字段完全直接依赖主键,不能是传递依赖

 

例如下表,学院依赖于主键学号,但是学院地址 依赖于学院,这样对主键就是不是直接依赖(这里可能会有人疑问地址也是能拆成省市区的字段,这里不拆也是可以的,因为表示的就是地址字段)

学号

姓名

年龄

年级

学院

学院地址

201511216776

王玉伟

20

15级

计算机学院

内蒙古呼和浩特市赛罕区

 

符合第三范式的做法(删去有间接依赖的字段)

学号

姓名

年龄

年级

学院

201511216776

王玉伟

20

15级

计算机学院

 

更多推荐

数据库设计三范式的举例说明

本文发布于:2024-02-07 11:32:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1756719.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:范式   举例说明   数据库

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!