数据库学习 - 关系型数据库设计理论

2018-12-29  本文已影响0人  路万奇与青川君

有时候想开始撸代码做系统设计的时候,会有好心的前辈提醒我,“ 小伙子要用数据库吧?记得先设计设计哦,别乱扯张表就用哦!”

一开始我并不明白,数据库应该怎样设计,直到在学习中学到了 关系型数据库设计理论...

  • 说白了,首先你要得知道 什么不好
  • 或者说:不好的关系模式 到底存在着哪些异常
  • 并且要明白 什么是 函数依赖(部分的、完全的、传递的 几种都要了解。)
  • 然后就是最重要的了!要学会从 1NF 也就是 第一范式 到 BCNF 的辨认与化解(这个最难啦!要啃透呀~)

数据库逻辑设计主要解决的问题:

并在关系数据库设计理论的指导下,选择比较好的关系模式集合。

举个栗子是最好的学习方法:

  • 我们要为教务处设计一个关系数据库:

    关系模式是:UN( Sno, Cno, G, Sdept, MN)

    其中:

    • Sno:描述学生
    • Sdept:描述系名
    • MN:描述系主任
    • Cno:描述课程
    • G:描述学习成绩

通过对实际情况的分析:可知 ( Sno, Cno )是码。

那么装入一些数据后,问题就暴露出来了:

5.1.1

对数据操作时,会出现以下问题:

  1. 数据冗余( 你看看 系主任名 存了多少次?)

    数据重复存储:浪费了存储空间,数据库维护起来会很困难;(更新异常)

  2. 插入异常( 一个系刚刚成立时... )

    主码为空的记录不能存在于数据库,所以本来其实是有这个系的,但是这个系没学生,所以在这张表上就列不出来!

  3. 删除异常 ( 想想一个系的学生如果全部毕业后... )

    删除操作后,有些相关的信息在该数据库中就消失了,无法保存下来。

要消除上面提到的这些弊端,我们可以把关系数据库模式分解为三个关系模式:

函数依赖是什么

部分、完全、传递 函数依赖

部分函数依赖:设 X, Y 是关系 R 的两个属性集合,存在 X→Y ,若 X’ 是 X 的真子集,存在 X’→Y,则称 Y 部分函数依赖于 X 。

完全函数依赖:设 X, Y 是关系 R 的两个属性集合,X’ 是 X 的真子集,存在 X→Y ,但对每一个 X’ 都有 X’ !→Y ,则称 Y 完全函数依赖于 X 。

传递函数依赖:设 X, Y, Z 是关系 R 中互不相同的属性集合,存在X→Y( 而 Y !→X ),Y→Z,则称Z传递函数依赖于X。

第一范式(1NF)

在任何一个关系型数据库中,第一范式(1NF)是对关系模式最基本的要求,不满足你就不是关系数据库。

所谓第一范式(1NF)是指数据库表中的每一列(即每个属性)都是不可分割的基本数据项,同一列中不能拆成多个列再放值。

简言之,第一范式 就是不能有重复的列。

第二范式 (2NF)

自此向下的范式都必须先满足之前的所有范式规范,这就好比一个俄罗斯套娃,哈哈这样好理解吧?

第二范式就是在第一范式的基础上建立起来的。第二范式要求:

第二范式要求实体的属性 完全依赖于 主关键字。所以化简过程中我们着重解决的问题是:消除非主属性对 的部分函数依赖,采用 投影分解运算 来提高关系模式的范式等级。

简言之,第二范式 就是非主属性依赖于主关键字

第三范式(3NF)

在满足第二范式的基础上,不存在任何传递函数依赖,那么就是第三范式。

简而言之,第三范式 就是属性不依赖于其他非主属性

上一篇 下一篇

猜你喜欢

热点阅读