MySQL学习笔记(7)之设计范式

设计范式(NF = Normal Format)

范式:规范的格式。

范式是设计关系数据库必须遵守的规则。

如果我们满足了设计范式的要求,则数据库会简洁,结构清晰。

反之,会出现数据冗余,还有插入、删除、修改数据出现异常。

设计范式种类:1NF、2NF、3NF、BCNF(巴德斯科范式)、4NF、5NF(完美范式)。

1NF是最宽松的,依次递增限制越大。

一般数据库只需要满足到3NF就可以了。

1、1NF(第一范式):字段的原子性

要求:数据是二维表,每一列都不能在分割,属性不能再分割,字段保证原子性。

不满足1NF的数据库,则为非关系型数据库。

不满足1NF的2个例子:

name tel age
小明
13988774444,011-15945612

1
小红 16812314725 0
name 手机,座机 age
小明 13988774444,011-15945612 1
小红 16812314725,无 0

解决办法:

name 手机 座机 age
小明 13988774444 011-15945612 1
小红 16812314725 0

2、2NF(第二范式):消除部分(不完全)依赖

要求:满足1NF的前提下,消除字段对主键的部分依赖,从而完全依赖于主键。

依赖:如果字段A一旦确定,则可以指出B字段的值。

部分(不完全)依赖:依赖其中某个部分的值。

不满足2NF的例子:


学生


课程


老师姓名


老师学历


课程教材


上课教室


上课时间

小明 二年级语文上 张三 研究生 二年级语文上册 102 8:00
小红 五年级数学上 李四 博士 五年级数学上册 306 16:00

一个课程,一定指定了某个教材,一年级语文上肯定用的是《一年级语文上册》,那么就有课程推出教材。课程决定了教材,这就叫做部分依赖。

解决办法,拆分成二个或者若干个表:

学生 课程 老师 老师学历 上课教室 上课时间
小明 二年级语文上 张三 研究生 102 8:00
小红 五年级数学上 李四 博士 306 16:00

课程


教材

二年级语文上 二年级语文上册
五年级数学上 五年级数学上册

3、3NF:消除传递依赖

要求:满足2NF的前提下消除传递依赖。

当表里存在不只一类独立实体,数据也可能存在冗余,在插入、修改、删除、时可能出现混乱的情况。

↓解决办法:拆分成3个表,利用主键建立关系。


学生学号


学生姓名


学生课程


教师

110 小明 001 578
911 小红 005 561

课程ID

课程名称 教材名称

001


二年级语文上

二年级语文上册

005


五年级数学上

五年级数学上册

教师ID


老师姓名


老师学历

578 张三 研究生
561 李四 博士

4、BC范式(BCNF):符合3NF,并且主属性不依赖于主属性。

若关系模式属于第一范式,且每个属性都不传递依赖于键码,则R属于BC范式。

通常:BC范式的条件有多种等价的表述:每个非平凡依赖的左边必须包含键码;每个决定因素必须包含键码。

BC范式既检查非主属性,又检查主属性。当只检查非主属性时,就成了第三范式。满足BC范式的关系都必然满足第三范式。

还可以这么说:若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性,则该关系自然达到BC范式。

一般,一个数据库设计符合3NF或BCNF就可以了。在BC范式以上还有第四范式、第五范式。

5、第四范式:要求把同一表内的多对多关系删除。

6、第五范式:从最终结构重新建立原始结构。

时间: 2024-10-13 06:35:15

MySQL学习笔记(7)之设计范式的相关文章

MySQL学习笔记之一 MySQL入门

本人之前接触的关系型数据库主要是oracle和sqlserver,而对于mysql知之甚少,但查阅网上资料发现,mysql与oracle非常相似,所以学起来应该不会很费劲,在总结的时候可能更多的把关注点放在它与oracle的不同之处. 一.简介 MySQL是一个真正的多用户.多线程SQL数据库服务器.SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言.MySQL是一个客户端/服务器结构的实现, 它由一个服务器守护程序mysqld和很多不同的客户程序和库组成. MySQL的普及并不局限于

MySQL学习笔记之三 表类型

你能用的数据库引擎取决于MySQL在安装时候是如何被编译的.要添加一个新的引擎,就必须编译MySQL.仅仅为了添加一个特性而编译应用程序的想法对于Windows的开发人员来说可能有点小题大做,得不偿失,但是在Unix的世界里,这已经成为了标准.在缺省的情况下,MySQL支持三个引擎:ISAM.MyISAM和HEAP.另外两种类型InnoDB和Berkley(BDB),也常常可以使用. ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之初就考虑到数据库被查询的次数远远大于

mysql学习笔记-简介

1.数据存储方式3个阶段 1.人工管理阶段 2.文件系统阶段 3.数据库系统阶段 数据库组成 1.数据库由若干张表组成,表由若干个字段组成 2.关系数据库的表都是二维表 2.数据库泛型(创建数据库必须满足的要求) 1.第一范式(1NF):设计数据库满足的最低要求表中不能有重复字段,并且每个字段不能在拆分 3.数据库技术构成 1.数据库系统 2.sql语句 3.数据库访问技术等 4.sql语言分类 1.DDL(数据定义语言):主要用于创建表,视图,索引,触发器等.其中包括CREATE(创建表),A

MySQL学习笔记-子查询和连接

MySQL学习笔记-子查询和连接 使客户端进入gbk编码方式显示: mysql> SET NAMES gbk; 1.子查询 子查询的定义: 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如:  SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中SELECT * FROM t1 称为Outer Query / Outer Statement (外部查询) SELECT col2 FROM t2 , 被称为Su

MySQL 学习笔记 (limit offset)

select * from table limit (10000,10);这样是很慢的,因为要定位 比较快的写法是 select * from table where id >=(select * from table limit (10000,1) ) limit 10;不要问题为什么! 因为目前也用不到.最直接的方法还是建议把数据弄小,不然就设计一些算法来计算第几应该有哪些资料,直接定位获取 . MySQL 学习笔记 (limit offset)

MySQL学习笔记-锁相关话题

在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因. Mysql常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking): BDB采用页面锁(page-leve locking)或表级锁,默认为页面锁: InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁: 各种锁特点 表级锁(table-level loc

MySQL学习笔记-基础入门

MySQL学习笔记

MySql学习笔记(一)之DQL常用查询

MySql学习笔记(一)之DQL常用查询 前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询. 正文:在学习mysql单表查询之前,我们先做一些准备工作. 需要安装的软件如下: 1.mysql,版本可以选择5.1或者5.5,安装过程可以参考博客:http://www.cnblogs.com/ixan/p/7341637.html 2.mysql图形化管理软件:Navicate,sqlyog(二选一,推荐使用sqlyog). 本文

MySQL学习笔记-自定义函数

MySQL学习笔记-自定义函数 1.自定义函数简介 自定义函数:用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同 自定义函数的两个必要条件:(1)参数  (2)返回值 自定义函数: 创建自定义函数 CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body 关于函数体: 1.函数体可以由合法的SQL语句构成: 2.函数体可以是

Mysql学习笔记(三)对表数据的增删改查。

写在前面:(一些牢骚,可以直接跳到分割线后) 太过敏感的人不会快乐,不幸的是我正是这种性格的人. 从培训机构毕业后,迫于经济方面的压力,和当时的班里的一个同学住在了一起,我们在一个公司上班.谁知道这都是不开心生活的源头,从每天早晨开始心情就很糟糕.他是个脾气很慢的人,我是个急脾气,特别是在早上上班的时候.由此种种吧,实在是不胜枚举.算了,还是不说了,太痛苦了,我不太喜欢说别人的坏话.我是学心理学的,已经用各种方法去安慰自己,但是都不太奏效. 回想以往和朋友的交往中,我虽然不算十分合群的人,但绝对