关于数据库相信在学习java编程的小伙伴们都不陌生,对于数据的管理查询等一系列的操作是重要的,所以为了减少数据的冗余,会在关系型数据库中有一定的规范,就是数据库设计三范式。今天为大家介绍一下数据库设计三范式是什么以及包括哪三个范式。
数据库设计三范式是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库,设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些规范被称作范式,越高的范式数据库的冗余度就越低。这是数据库设计三范式的基本定义。
下面来具体介绍数据库设计三范式包括的三个范式的内容:
1、第一范式
定义:要求有主键,数据库中不能出现重复记录,每一个字段是原子性不能再分;不符合第一范式的示例:
存在问题有两个,一是数据存在重复记录,数据不唯一,没有主键;二是联系方式可以再分,不是原子性。
关于数据库设计三范式的第一范式需要注意,每一行必须唯一,也就是每个表必须有主键,这是我们数据库设计的最基本要求,主要通常采用数值型或定长字符串表示,关于列不可再分,应该根据具体的情况来决定,如联系方式,为了开发上的便利可能就采用一个字段了。
2、第二范式
定义:第二范式是建立在第一范式基础之上,要求数据库中所有非主键字段完全依赖主键,不能产生部分依赖;(严格意义上说:尽量不要使用联合主键)
示例:
确定主键:
以上虽然确定了主键,但此表会出现大量冗余,主要涉及到的冗余字段为“学生姓名”和“教师姓名”,出现冗余的原因在于:学生姓名部分依赖了主键的一个字段学生编号,而没有依赖教师编号,而教师姓名部分依赖了主键的一个字段教师编号,这就是第二范式部分依赖。
解决方案如下:
学生信息表
教师信息表:
教师和学生的关系表:
学生编号(PK) fk→学生表的学生编号 |
教师编号(PK) fk→教师表的教师编号 |
1001 |
001 |
1002 |
002 |
1003 |
001 |
1001 |
002 |
以上是一种典型的“多对多”的设计。
3、第三范式
定义:建立在第二范式基础之上,要求非主键字段不能产生传递依赖于主键字段。
以上是一种典型的“多对多”的设计。
从上表可以看出,班级名称字段存在冗余,因为班级名称字段没有直接依赖于主键,班级名称字段依赖于班级编号,班级编号依赖于学生编号,那么这就是传递依赖,解决的办法是将冗余字段单独拿出来建立表,如:
学生信息表:
学生编号(PK) |
学生姓名 |
班级编号(FK) |
1001 |
张三 |
01 |
1002 |
李四 |
02 |
1003 |
王五 |
03 |
1004 |
六 |
04 |
班级信息表:
以上设计是一种典型的一对多的设计,一存储在一张表中,多存储在一张表中,在多的那张表中添加外键指向一的一方的主键。
关于数据库设计三范式还有大家需要知道的注意事项:(1)第二范式与第三范式的本质区别:在于有没有分出两张表;(2)第二范式是说一张表中包含了多种不同实体的属性,那么必须要分成多张表,第三范式是要求已经分好了多张表的话,一张表中只能有另一张标的ID,而不能有其他任何信息,(其他任何信息,一律用主键在另一张表中查询);(3)必须先满足第一范式才能满足第二范式,必须同时满足第一第二范式才能满足第三范式。
以上是对数据库设计三范式内容的介绍,在数据库中的关系必须满足一定的要求,就是要满足不同的范式,所以想使用好java数据库的话,数据库设计三范式的内容是必须要掌握的。希望上面的内容可以帮助到大家,尤其是java零基础的朋友们,相信通过这篇文章对数据库设计三范式有了一定的认识和了解,后面再学习深入的知识会更得心应手一些。
不写代码你养我啊08-23 11:30
HelloWorld09-29 17:28
兔子06-15 17:15