理解数据库范式

需要了解的一些前置定义:

:一些相同类型数据的集合
例如:自然数,整数是一个域,{男,女}也是一个域

笛卡尔积:有多个域,从每个域中挑选出一个元素,组合成一个新元素.

D1xD2xD3x...Dn,分别从D1到Dn挑选出一个元素,组合成一个新元素(d1,d2,d3...dn)由于挑选的元素不同,组成多种新元素,它们的另一个名字就叫做元组,因此(d1,d2,d3...dn)也称为元组,像1,d2,这样的值就称为分量

例子:D1=学生姓名(张三,李四,王二麻子),D2=专业(网络工程,软件工程,物联网),D3=性别(男,女)
则:D1xD2xD3={
(张三,网络工程,男),
(张三,网络工程,女),
(张三,软件工程,男),
(张三,软件工程,女),.....(原谅我懒...)
(王二麻子,物联网,男),
(王二麻子,物联网,女)
}就是数学上的排列组合,域中的元素都组合一遍,
能产生多少种这种组合数,就叫做基数(不允许将重复的算进来)
但是笛卡尔积只有部分子集才真正有意义

关系:就是笛卡尔积的子集,如:像(张三,网络工程,男)这样的元组可以表示什么样的信息,我们就根据情况定义为 ''学生信息表''

属性:在学生信息表中,为了区分每一列所表达的信息,为它们取个名字,就称为属性.如:(姓名,专业,性别)

候选码:假如有这样的表
(学号,院系,性别),只要知道学号就知道所在的院系以及性别,则学号可以唯一标识这个元组,那么称学号为候选码,这里只是一个属性当做候选码,若多个属性才能标识元组,那么这个属性组当做候选码

主码:当一个元组有多个候选码时,只能选定一个当主码

例如:设有这样的表(学生,课程,名次),有多门选修课,每个学生选修每门课有一定的名次(没有并列名次),那么有(学生,课程)这信息就可以知道该学生的名次,而知道(课程,名次)也可以知道是哪个学生.故,该表有两个候选码(学生,课程),(课程,名次)

主属性与非主属性:
在候选码的属性称为主属性,不在候选码中的属性就称为非主属性

关系模式:对关系的描述称为关系模式
表现形式为R(U,D,DOM,F)
R:就是关系名,想是给一个表命名,就如上面的"学生信息表"
U:组成该关系的属性组,就是给每一列命个名,然后组合在一起
D:就是上面说的域,也就是属性组选自哪里
DOM:是属性向域的映像集合,D只表明了有哪些域,却没说明哪些属性来自哪些域,而DOM则指明了属性与域的对应关系,但是有可能不同属性来自同一个域,为了区别不同的属性,为它们取名.
根据名字判断来自哪个域
即:所谓的属性向域的映像集合,如:
DOM(整数集)=DOM(自然数集)=实数
F:是属性组U上的一组数据依赖(稍后再描述)

第一范式(1NF)

要求:每一列属性不可再分

如:
clipboard.png
在右边的联系方式进行了再分,是不符合第一范式的

数据依赖

定义:属性与属性之间的约束关系
分类:

  • 函数依赖
  • 多值依赖
函数依赖

定义:描述一个学生的关系(学号,姓名,院系),由于一个学号只对应一个学生,一个学生只在一个院系学习.因此当学号确定后,学生的姓名,所在的院系也确定了,像这种一一对应的关系类似于数学中的y=f(x),因此就称为函数依赖

  • 现在来解决之前的问题F是什么:
    设Sno(学号),Sname(姓名),Sdept(院系),
    Sname=f(Sno),Sdept=f(Sno),即Sno决定Sname,Sno决定Sdept,
    像这种谁决定谁,就用Sno→Sname,Sno→Sdept表示
    之前说F是属性组U上的一组数据依赖
    U={Sno,Sname,Sdept},
    那么F{Sno→Sname,Sno→Sdept}

在函数依赖中又分几种依赖:

  • 非平凡的函数依赖
    定义:若X→Y,但Y⊈X,则称X→Y是非平凡函数

    • 平凡的函数依赖
      定义:若X→Y,但Y⊆X,则称X→Y是平凡函数
      例子:

假设有这样的关系S(学号,性别,课程号),一组属性(学号,性别)→性别,就是平凡函数,因为性别是(学号,性别)的子集;
而学号→性别,就是不平凡函数

  • 完全函数依赖
    定义:就是若X→Y,而X的子集X'↛Y
    例子:

R(学号,课程号,分数),只有该学生的学号与所选的课程号确定,才确定该生该课程的分数.(学号,课程号)→分数,而单独的学号或者课程号都无法决定分数,称这样的依赖关系为完全函数依赖

  • 部分函数依赖
    定义:X→Y,但是X的子集X'也可以确定Y(这样的X也称为超码)
    例子:

R(学号,课程号,院系),(学号,课程号)→院系,但是只需知道学号就可以知道所在的院系,即学号→院系,称这样的关系为部分函数依赖

  • 传递函数依赖:
    定义:若X→Y,Y→Z(Y↛X,都是非平凡依赖),则称Z对X传递函数依赖,X→传递Z
    例子:

设有这样的关系SL(学号,院系,学生居住地),假设同一个院系的学生住在同一个地方,那么有以下关系,
学号→院系,院系→学生居住地,可以得到学号→学生居住地(在箭头上有'传递'这字,我不知道怎么弄)

一些表达式记法:
若X→Y,同时Y→X就记作X←→Y
若Y不依赖X,记作X↛Y

外码:
定义:R中的属性或属性组X不是R的码,而是其他模式的码,则称X为R的外码
例:

Sno(学号),Cno(课程号),Grade(分数)
SC(Sno,Cno,Grade)中,(Sno,Cno)是码,而Sno是外码


第二范式2NF

定义:非主属性完全依赖候选码,则称为第二范式

理解:
\color{red}{也就是说消除部分依赖 .}
(记得上面所说的部分依赖,其子集也可以确定其他属性)


第三范式(3NF)

定义:在满足第二范式的前提下,消除传递依赖
例:

R(Sno,Sdept,Sloc),Sloc是学生居住地方(一个系的住在同一个地方),Sno→Sdept,Sdept→Sloc,所以Sno→Sloc,所以这个关系不满足第三范式,需要消除它(至于怎么做,不在这次讨论范围)
而像S(Sno,Cno,grade)就属于第三范式,应为没有传递依赖


BCNF范式

定义:在满足第三范式的前提下,所有的依赖关系都是对码的依赖
例:

STJ(S,T,J)模式,S代表学生,T代表教师,J课程,
教师只教一门课
(S,T)→J,(S,J)→T,T→J.
在这个例子中(S,T),(S,J)都是候选码,但T不是,故不是BCNF范式,若不存在T→J就是BCNF范式


第四范式

先了解一下基础知识

多值依赖
img_20190512_204951.jpg

定义:定义别看了,估计也看不懂
设关系R(U),X,Y,Z是U的子集,且X+Y+Z=U,在R(U)中的任意关系r,给出一对值(x,z),就有一组相应Y的值,这组值仅仅决定于x的值,与z无关.表示方法:X→→Y(Y多值依赖于X,X多值决定Y)
例:

(物理,普通物理学)与(物理,光学原理)对应的一组值都是{李勇,王军},起决定作用的是课程C

  • 平凡的多值依赖:
    若X→→Y,而Z=∅,则称X→→Y为平凡的多值依赖
第四范式

定义:在R(U)中,非平凡多值依赖X→→Y(Y⊈X),且X含有码,称这样子的式子为第四范式
本质:不允许有非平凡且非函数依赖的多值依赖
可能难以理解,翻译一下:
\color{blue}{就是允许平凡且是函数依赖的多值依赖.}
例:

在WSC(W,S,C)中,W代表仓库,S代保管员,C代表商品
有多个仓库,每个仓库配备了多个保管员,每个保管员管理多种商品
在WSC模式中W→→S,W→→C都是非平凡的多值依赖,但是W不是码,而(W,S,C)才是码,故WSC∉4FN
但是若将WSC模式分解为WS(W,S),WC(W,C)
WS虽然有W→→S,确实平凡的多值依赖,但满足不允许有非平凡且非函数依赖的多值依赖,故WS∈4NF,同理WC∈4NF.


第四范式书上讲的也很模糊,网上的也没看太懂,以后知识到达到后再仔细了解,以后有空写范式之间的联系,以及每个范式优缺点,和如何消除缺陷

草图24 (2).png

草图25 (2).png

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

推荐阅读更多精彩内容

  • 一般而言,关系数据库的设计目标是生成一组关系模式,使我们存储信息时避免不必要的冗余,并且让我们可以方便地获取信息。...
    SunnyQjm阅读 951评论 0 5
  • 关系型数据库设计时为确保数据存储规范化,通常需要按照范式设计数据,接下来主要介绍下1NF-3NF递进式数据库设计,...
    稻草人_d41b阅读 17,523评论 2 10
  • 有时候想开始撸代码做系统设计的时候,会有好心的前辈提醒我,“ 小伙子要用数据库吧?记得先设计设计哦,别乱扯张表就用...
    路万奇与青川君阅读 967评论 0 0
  • 当你习惯一个人的时候,别人会觉得你长大了,可是只有你自己知道,那不是长大,而是你对你周围的人或事已经没有抱任何...
    shliy阅读 2,165评论 0 0
  • 晒不黑..然后又没有斑点...所以平时也不太擦....... [抓狂]其实这样更危险,晒不黑的肌肤更缺乏黑色素的保...
    护肤知识阅读 283评论 0 0