数据库设计三范式

数据库设计三范式就是数据库设计应该对应的三条准则:

第一范式举例:

  1. 任何一张表上必须有主键,每一个字段原子性不可再分
  2. 建立在第一范式基础上,要求所有非主键字段完全依赖主键,不要产生部份依赖
  3. 建立在第二范式的基础上,要求所有非主键字段直接依赖主键,不要产生传递依赖

学生编号

学生姓名

联系方式

1001

张三

zs@163.com,155998076547

1002

李四

ls@163.com,19908764557

1001

王五

ww@163.com,18867560947

以上表满足第一范式吗?

        不满足,没有主键,且联系方式的字段可以分成邮箱和电话号码,可以把学生编号作为主键(PK),改成如下形式:

学生编号

学生姓名

邮箱联系电话

1001

张三

zs@163.com

155998076547

1002

李四

ls@163.com

19908764557

1003

王五

ww@163.com

18867560947

第二范式举例:

学生编号

学生姓名

教师编号

教师姓名

1001

张三

001

王老师

1002

李四

002

吴老师

1003

王五

001

王老师

1001

张三

002

吴老师

上表满足第一范式吗?

        无主键,不满足,应该采取学生编号和教师编号联合主键的方式

采取联合主键的方式之后满足第二范式吗?

        不满足,学生姓名依赖学生编号,教师姓名依赖教师编号,这两个字段对于主键只是部份依赖。

所以应该拆分成两三张表,修改如下:

表一 学生表,学生编号为主键

学生编号

学生姓名

1001

张三

1002

李四

1003

王五

表二 教师表,教师编号为主键

教师编号(PK)

教师姓名

001

王老师

002

吴老师

表三 学生教师关系表,id为主键,学生编号和教师编号为外键(FK)

Id(PK)

学生编号(FK)

教师编号(FK)

1

1001

001

2

1002

002

3

1003

001

4

1001

002

第三范式举例:

学生编号(PK)

学生姓名

班级编号

班级名称

1001

张三

001

一年一班

1002

李四

002

一年二班

1003

王五

003

一年三班

1004

刘六

003

一年三班

上表满足第一范式吗?

有主键,满足。

满足第二范式吗?

没有复合主键,没有产生部份依赖,满足。

满足第三范式吗?

不满足,一年一班依赖001,一年二班依赖002,产生了传递依赖

应该修改为两张表:

表一,班级表,班级编号为主键

班级编号(PK)

班级名称

001

一年一班

002

一年二班

003

一年三班

表二,学生班级表,学生编号为主键,班级编号为外键(FK)

学生编号(PK)

学生姓名

班级编号(FK)

1001

张三

001

1002

李四

002

1003

王五

003

1004

刘六

003

总结:

        1.对于多对多关系的表(第二个例子,老师和学生多对多关系),采用三张表,一张A物属性表,一张B物属性表,一张A和B的对应关系表(使用外键连接)

        2.对于一对多关系的表(第三个例子,学生和班级多对一关系),采用两张表,一张A物属性表,一张B物属性及A和B的对应关系表(使用外键连接)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值