数据库理论-三大范式

本文详细介绍了数据库设计中的第一范式(1NF)、第二范式(2NF)和第三范式(3NF),通过实例说明了各范式的概念、不满足范式可能引发的问题及如何进行规范化处理。讨论了在特定情况下是否需要进行分解的决策,并指出规范化虽有助于避免数据冗余和异常,但可能增加计算成本。
摘要由CSDN通过智能技术生成

第一范式 1NF

任何属性都是不可分割.

范例:

学生{身份证号,姓名,性别,出生日期,年龄,所属系{系名,系主任}}

这里的所属系 就是可以分割的.

分解成:
学生{身份证号,姓名,性别,出生日期,年龄,系ID}

系{系ID,系名,系主任}

不满足第一范式可能造成得问题:

  1. 信息冗余,每个学生记录都包含系信息,造成空间资源得浪费;
  2. 插入异常,如果是新系没有学生就无法添加系信息;
  3. 删除异常,如果将某系的学生全部删除,该系也不复存在了;

例外,但分解也不是绝对的.

学生中增加 家庭地址 属性,

比如 江苏省苏州市姑苏区菉葭巷31号

本来可以分解成 省,市,区 ,但这还得根据业务需要判断是否需要这样分解.


第二范式 2NF

在1NF的基础上,消除部分函数依赖,任何非主属性必须完全依赖于候选码

候选码→以被选为主码的属性或属性组

范例:

成绩(学生ID,课程ID,分数,课程名)

候选码(学生ID,课程ID)

(学生ID,课程ID) → 分数

课程ID → 课程名

可以看到,课程名仅依赖于课程ID,并不是完全依赖于候选码

分解:

(学生ID,课程ID,分数)

(课程ID,课程名)

不满足第二范式可能造成的问题

  1. 数据冗余,和1NF一样
  2. 更新异常,如果课程ID对应的课程名更改了,则有很多行需要更新
  3. 插入异常,如果一门新课程ID,课程名未考试,则课程不复存在
  4. 删除异常,如果将某课程全部学生删除,则课程也没了

第三范式 3NF

满足2NF,消除非主属性对于非主属性的传递依赖

范例:

学生{身份证号,姓名,性别,出生日期,年龄)

这里面可以看出关系模式{

身份证号→姓名,

身份证号→性别,

身份证号→出生日期

身份证号→年龄,

出生日期→年龄}

这里的{出生日期→年龄}就属于非主属性对非主属性的依赖

消除把年龄删去就好了.

学生{身份证号,姓名,性别,出生日期}

不消除第三范式可能的问题:

  1. 数据冗余,和1NF一样
  2. 在部分案例中并能完全消除,插入,删除,更新异常.需要看具体案例

例外,

就本例来讲,年龄删去后,当需要年龄时,就需要用出生日期计算,这里会消耗计算机资源,在客户端或服务器端.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值