数据库设计的三范式

所谓范式,就是规范,就是指数据库需要(应该)遵循的原则

每个范式,都是用来规定某种结构或数据要求------后一范式都是在前一范式满足的前提下“加强要求”

第一范式:原子性 (这一范式比较简单,好理解)

特点:存储的数据应该具有“不可再分性”。

下面是错误示范:

 可以看到,图中的表有一个很大的问题,就是学生字段中,有很多可以拆开的数据,违反了原子性范式。

修改后为:

第二范式:唯一性 (消除非主键依赖联合主键中的部分字段)

需要实现每一行数据具有唯一可区分的特性,并不能有部分依赖关系。

通常,给一个表加主键,就可以做到唯一区分

但主键有这样的情况:

设定一个字段为主键:此时,便是该一个字段的值就可以明确确定一行数据。

设定多个字段为主键(联合主键):表示只有这多个字段的值都确定后才能确定一行数据。

什么叫依赖

如果确定一个表中的某个数据(A),则就可以确定该表中的其他另一个数据(B),则我们说:B依赖于A。

实际上,一个表只要有主键,则其他非主键一定是依赖于主键的。

什么叫“部分依赖”

如果确定一个表中的某个数据组合(A,B),则就可以确定该表中的其他另一个数据(C),则我们说:C依赖于(A,B)(此时A,B通常就是做主键)。

但:如果某个数据D,只要依赖于数据A,或者说,A已确定,则D也可以确定,此时我们就称为“数据D部分依赖与数据A------可见部分依赖就是指某个非主键字段,依赖于联合主键字段的其中部分字段。

下面是错误示范:

 修改之后为:

 第三范式:独立性 

消除传递依赖(非主键值不依赖于另一个非主键值,都应该依赖于主键)

在一个具有主键的表中,假设主键为A,其他非主键必然都依赖于该主键。

但同时:如果该表中的某个字段B的值一确定,就能够确定另一个字段的值C,则我们称为C依赖于B。那么,就出现了:

C依赖B,B依赖A------这就是传递依赖。

消除这种传递依赖的通常做法,就是将C依赖于B的数据,分离到另一个表中。

下面是错误示范:

修改之后为:

总结:

通常在实践中,满足3范式只要做到“一个表中只存一种类型的数据”基本就可以实现。简单的来说说就是要有使用联合主键的意识。

另外,范式不是绝对要求,有时候我们为了数据的使用方便,还会(需要)故意违反范式。

 

 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值