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

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

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

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

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

  • 关系数据库应该组织成几个关系模式
  • 关系模式中包括哪些属性

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

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

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

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

    其中:

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

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

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

5.1.1

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

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

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

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

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

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

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

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

  • S( Sno, Sdept ) 即 学生表
  • SG( Sno, Cno, G ) 即 学生课程的成绩表
  • Dept( Sdept, MN ) 即 系的信息表

函数依赖是什么

  • 定义

    类似于变量之间的单值函数关系 y = f(x) ,其中自变量 x 的值,决定一个唯一的函数值 y

  • 在一个关系模式里的属性,由于它在不同元组里的属性值 可能不同,由此可以吧关系中的属性看作是 变量。

  • 函数依赖就是属性间的逻辑依赖关系。一个属性与另一个属性再取值上可能存在制约关系。

  • x 通常称为 “ 决定因素

  • 说明

    1. 函数依赖是语义范畴的概念,它反应的是语义完整性约束。你只能通过一句话中所表达、描述的语义来确定一个函数依赖。

    2. 函数依赖是指 某关系模式中 所有关系元组都要满足的条件,不是某个或某些元组满足一下就可以了!

    3. 函数依赖与属性间的联系类型有关

      建议参见 上一节 E-R 图的对应部分一起理解...

      (1) 若属性 x 与属性 y 之间有 “一对一” 的联系,则 x, y 之间互为函数依赖。

      (2) 若属性 x 与属性 y 之间有 “多对一”的联系,则 y 函数依赖 x,但 反之 y 则不。

      (3) 若属性 x 与属性 y 之间有 “多对多”的联系,则 x, y 之间不存在任何函数依赖。

    4. 若 x 函数依赖 y 并且 y 不是 x 的子集,则称 y 函数依赖 x 是 非平凡的函数依赖。 (所以如果 y 是 x 的子集则是平凡的)

      我们一般讨论的都是 非平凡的函数依赖

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

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

  • 举个例子:学生基本信息表 R 中(学号,身份证号,姓名),当然学号、身份证属性的取值是唯一的,所以在R关系中,

    • (学号,身份证号)x ->(姓名)y
    • (学号)x'1 ->(姓名)y
    • (身份证号)x'2 ->(姓名)y ;
  • 所以姓名 部分函数依赖于(学号,身份证号);

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

  • 再举个例子:学生基本信息表 R(学号,班级,姓名)

  • **假设不同的班级学号有相同的,班级内学号不能相同。 ** 则在R关系中:

    • (学号,班级)x ->(姓名)y

      但是

    • (学号)x'1 -> (姓名) y 不成立

    • (班级)x'2 -> (姓名) y 不成立

  • 所以姓名 完全函数依赖于(学号,班级);

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

  • 再举个例子:在关系 R (学号 ,宿舍, 费用) 中:
  • (学号)x ->(宿舍)y
  • (宿舍)y !-> (学号)x
  • (宿舍)y ->(费用)z
  • 所以 符合传递函数依赖 的要求,故:知道了学号,就知道他要交多少宿舍费用了;

第一范式(1NF)

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

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

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

第二范式 (2NF)

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

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

  • 数据库表中的每个实例或行必须可以被唯一地区分。为了实现这一点通常需要为表加上一个列,用以存储各个实例的唯一标识,比如 员工信息表加上了员工编号 emp_id 。
  • 这个唯一属性列被称为主关键字或主键、主码

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

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

第三范式(3NF)

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,639评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,093评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,079评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,329评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,343评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,047评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,645评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,565评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,201评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,338评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,014评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,701评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,194评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,685评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,345评论 2 358

推荐阅读更多精彩内容