关系型数据库三范式

以下是我对数据库三范式的理解:

 

第一范式:  强调列的原子性,即列不可分割性
如表:(姓名,性别,年龄)

假如在实际应用场景中,对男的我要称乎,某某先生,对女士我要称乎某某女士。这就要用到姓了。所以在这种场景中,姓名是应该分为两列的。姓,名。两列。

所以在这种应用场景下该表是不符合第一范式的。

 

 

第二范式:简单的说就是表的唯一约束,即消除非码属性对码的部分函数依赖关系。

举个例子:学生选课表

(学号,姓名,年龄,课程,学分,成绩)

在这个表中:主键为(学号,课程)
只有成绩  在表中对主键是完全函数依赖关系, 姓名,年龄,对主键是部分函数依赖。

学分对主键也是部分函数依赖关系。

分析如下:
主键为:

(学号,课程)

学号---决定-->姓名,年龄   (姓名,年龄 只依赖了 主键的一部分) 部分函数依赖  

课程---决定-->学分          同理

学号,课程---决定--->成绩   (成绩由 学号,课程共同决定) 完全函数依赖于主键


这样的表格带来的问题:

无法在表中单独增加一条学生,或课程信息。

无法在表中单独删除学生,或课程信息。

容易产生数据冗余,如:多个学生选择同一门课程时,重复存储了课程信息


解决的办法是:

将其分成三张表如下:
(学号,姓名,年龄)    (课程,学分)   (课程,学号,成绩)

这样就不会有数据冗余了.


第三范式:定义 在消除   非主属性  对码的部分函数依赖   的基础上 再消除 非主属性

对码  传递函数依赖关系

举个例子:
(学号,姓名,年龄,学校名称,学校地址,学校面积)

其中  学号  为码
所有的非主属性对 码  都是完全函数依赖关系  是第二范式

但 学校名称--决定-->学校地址  

即学校地址对 码 存在传递函数依赖关系 

分成两个表:
(学号,姓名,年龄,学校名)   (学校名,学校地址,学校面积)

这样就是第三范式了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值