数据库范式

范式

数据库设计的⼀套要求。
要求要说满⾜,所以有“满⾜第⼏范式”。

⽬的

消除数据冗余。即,做到同样的数据不存第⼆遍。

惯例

现在数据库设计最多满⾜3NF,普遍认为范式过⾼,虽然具有对数据关系更好的约束性,但也导致数据关系表增加⽽令数据库 I/O 更易

繁忙,原来交由数据库处理的关系约束现更多在数据库使⽤程序中完成。
( 参考:https://zh.wikipedia.org/wiki/数据库规范化 )

“三范式”虽然有⽤,但仍然要具体问题、具体分析,该打破打破。

套路


问题⼀:如何解决 “两条记录完全重复”?

学号 姓名 年龄
20125112 张三 22
20125113 李四 21
20125112 张三 22

法1:加主键,要求主键不能重复。

「第⼀范式要求:1.要有主键」

法2:设计⼀张只有⼀个字段的表。(字段名info,字符串型)

info
20125112_张三_22

这样就不会有重复数据了,但是傻⼦才会这样设计。
这样不便查询年龄等原⼦信息,需全部拿出正则切割。

傻⼦都能设计出满⾜1NF的表格。

「第⼀范式要求:2.列不可分」

  • 例外
    “产品批号”往往以位段藏蕴多层信息,却不必分割保存,只作为⼀个⾃然单位。

  • 注意
    列不可分,却也不能重复。

    1. 两个字段都是“年龄”
    2. “出⽣年⽉”与“年龄”。
  • 灵活
    有些故意存在的冗余是为了程序好写。


问题⼆:设计“多对多”关系表时有哪些注意?

学⽣选课表。
学号、学⽣姓名、⼯号、教师姓名。
学⽣姓名、⽼师姓名冗余。若觉还好,那同时再有“教师简介”字段呢?
如何解决冗余?

  • 思路
    表要有主键,思考主键担当。
    学号可以重复,不能担当主键。
    学号和教师编号⼀起,担当“组合主键”
    于是,该表就不合2NF了。

「第⼆范式要求:当⼀张表有多个字段作为“组合主键”时,不是主键的那些字段,不能够依赖于“组合主键”的一部分(“部分主

键”)。」

⽩话⽂:
某些字段不能依赖于⼀部分主键,⽽要依赖于整个主键的组合。
叫,不能存在“部分依赖”。
(字段不能部分依赖于主键 → 翻译成人话字段不能依赖于部分主键
(有组合主键,才谈得上部分依赖)

如,学⽣姓名依赖于学号,学号不是主键,学号是主键的⼀部分。
这叫“部分依赖”,会产⽣数据冗余。

  • 对策
    拆表。

    • 学⽣表(id学号,学⽣姓名)
    • 教师表(id⼯号,教师姓名)
    • 关系表(学号,⼯号)
  • 检索
    表连接。


问题三:Student (id学号, 姓名, 年龄, 性别, 系别, 系办地址, 系办电话) 有啥问题?

  • 概念
    a→b 意为 a决定b,b依赖a

  • 可知
    (学号)→ (姓名,年龄,性别,系别,系办地址,系办电话)
    却⼜:
    (学号)→ (系别)→(系办地点,系办电话)
    于是,该表就不合3NF了。

「第三范式要求:不是主键的这些字段必须“直接依赖”于主键。」

⽩话⽂:
某些字段除了依赖主键,不能还可以依赖于不是主键的字段。
叫,不能存在“传递依赖”。
(主键字段 → ⾮主键字段x → ⾮主键字段y)
(直接依赖于的字段,就是紧贴在前的决定字段)
(直接依赖,对应的是传递依赖)
如,系办地点、系办电话直接依赖于系别,系别直接依赖于学号。这叫,系办地点、系办电话“传递依赖”于学号,会产⽣数据冗余。

  • 对策
    拆表。

  • 学⽣(id学号,姓名,年龄,性别,系别)

  • 系别(id系别,系办地址,系办电话)

  • 检索
    表连接。


以下可略:BCNF范式

「BCNF范式的要求:不存在主键字段决定主键字段的情况。」

  • 对策
    将主键中能“⼀对⼀”的关系,拆出来另建表存。
  • 仓库管理关系表(仓库ID, 存储物品ID, 管理员ID, 数量)

⼀个管理员只在⼀个仓库⼯作。⼀个仓库可以存储多种物品。

  • 可知
    (仓库ID, 存储物品ID) → (管理员ID, 数量)
    (管理员ID, 存储物品ID) → (仓库ID, 数量)
    却⼜:
    (仓库ID) → (管理员ID)
    (管理员ID) → (仓库ID)

参考:数据库范式1NF 2NF 3NF BCNF实例分解
http://blog.csdn.net/fpf_721521/article/details/548927

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

推荐阅读更多精彩内容