关系数据库的三范式

数据库的三范式, 也学了几次了, 但容易忘记。

为此以自己的理解,简略记之。

1.第一范式:数据库的字段是单一属性,不可再分 (原子性)

Example: B2C中常见的客户信息地址表:

客户Id, 客户地址

这样就违反了。为啥?因为客户地址可以再细分的—— 省、市、区域、街道(详细地址);

除了最后一级的详细地址,前面几级都是可以提取出来作为字段的。这样做的好处就是避免了数据的冗余——省、市、区域都有现成的,数据库只需要保存你的详细地址而已。

最终设计:客户Id, 省id, 市id, 区域id, 详细地址

当然,这个“不可再分”也是根据需要来,而不是硬性的。比如在数据较少的情况下地址细分就过度设计了……


2.第二范式:任何非关键字段不能部分依赖任一侯选关键字(即必须完全依赖)——要求:存在主键。——针对情况:复合主键; 

Example: 学生成绩表

学号, 课程号, 姓名, 性别, 分数

这里的复合主键就是: 学号, 课程号。姓名、性别只与学号有关,与课程号无关,而只有分数与两者有关。

最终设计: 学号、课程号、分数。


3.第三范式:任何非关键字段不能传递依赖任一侯选关键字——针对情况:存在外键的情况下。

Example: 学生信息表

学号, 姓名, 系号, 系名

就存在这样一个传递依赖关系:学号<-系号<-系名。

系名与学号有关系,但不是直接关系。这种情况下,把系名去掉即可。 

最终设计:学号, 姓名, 系号




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值