加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 大数据 > 正文

数据库设计所必须满足的规范:设计范式

发布时间:2021-06-24 09:41:08 所属栏目:大数据 来源:互联网
导读:提到数据库的设计范式,我们可以将它理解为数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入 (insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目
提到数据库的设计范式,我们可以将它理解为数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入 (insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了 大量不需要的冗余信息。
 
 
 
设计范式是不是很难懂呢?并不事这样得,大学教材上给我们一堆数学公式我们当然看不懂,也记不住。所以我们很多人就根本不按照范式来设计数据库。
 
 
 
事实上,设计范式用很形象、很简洁的话语就能说清楚,道明白。本文将对范式进行通俗地说明,并以笔者曾经设计的一个简单论坛的数据库为例来讲解怎样将这些范式应用于实际工程。
 
 
 
范式的说明
 
 
第一范式(1NF):数据库表中的字段都是单一属性的,不可再分{个人理解:就像一个家庭,有几个儿子,其它的儿子都是由一个部份构成,唯独有一个儿子需要两个部份构成,即这就不是一个正常的家庭,呵呵,说得过分了}。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
 
 
 
例如,如下的数据库表是符合第一范式的:
 
 
 
 数据库设计
 
而这样的数据库表是不符合第一范式的:
 
 
 
 数据库设计
 
很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。
 
 
 
第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。{个人理解:如在一个家庭里面,任何决定都只能是爸爸、妈妈一致通过后才能够算数,就说明是正常的;如果有一个女儿可以只由妈妈决定做什么,那么这就违背了原则,就不满足约定。}
 
 
 
 
 
 
 
假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:
 
 
 
(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
 
 
 
这个数据库表不满足第二范式,因为存在如下决定关系:
 
 
 
(课程名称) → (学分)
 
 
 
(学号) → (姓名, 年龄)
 
 
 
即存在组合关键字中的字段决定非关键字的情况。
 
 
 
由于不符合2NF,这个选课关系表会存在如下问题:
 
 
 
(1) 数据冗余:
 
 
同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。
 
 
 
(2) 更新异常:
 
 
若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读