数据库模型设计,第一范式、第二范式、第三范式简单例子理解

数据库设计一般满足第三范式就够了

第一范式(无重复的列)

定义:数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。如果实体中的某个属性有多个值时,必须拆分为不同的属性

通俗解释:一个字段只存储一项信息

eg:班级:高三年1班,应改为2个字段,一个年级、一个班级,才满足第一范式

不满足第一范式

学号 姓名 班级
0001 小红 高三年1班

改成

学号 姓名 年级 班级
0001 小红 高三年 1班

第二范式(属性完全依赖于主键)

定义:满足第一范式前提,当存在多个主键的时候,才会发生不符合第二范式的情况。比如有两个主键,不能存在这样的属性,它只依赖于其中一个主键,这就是不符合第二范式

通俗解释:任意一个字段都只依赖表中的同一个字段

eg:比如不符合第二范式

学生证 名称 学生证号 学生证办理时间 借书证名称 借书证号 借书证办理时间
           

改成2张表如下

学生证表

学生证 学生证号 学生证办理时间
     

借书证表

借书证 借书证号 借书证把你拉时间
     

第三范式(属性不能传递依赖于主属性)

定义:满足第二范式前提,如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。

通俗理解:一张表最多只存2层同类型信息

eg:爸爸资料表,不满足第三范式

爸爸 儿子 女儿 女儿的小熊 女儿的海绵宝宝
         

改成

爸爸信息表:

爸爸 儿子 女儿
     

女儿信息表

女儿 女儿的小熊 女儿的海绵宝宝
     

转自:https://blog.csdn.net/wuyanxiaxia/article/details/22933021

总结

第一范式-列的原子性:一个列只能包含一个属性。

第二范式-主键的唯一统领性:一个表只能有一个主键唯一统领。

第三范式-主键的直接统领性:表的主键必须直接统领其他属性,而非通过其他列统领。

原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/8968776.html

时间: 2024-10-21 06:42:02

数据库模型设计,第一范式、第二范式、第三范式简单例子理解的相关文章

数据库(第一范式,第二范式,第三范式)

数据库(第一范式,第二范式,第三范式) 范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF.通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF). 设计关系数据库时,遵从不同的规范要求

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

今天有群友不是很清楚htm直接存数据库的危害,我简单举个例子

通过这个案例就知道为什么不要把原生的html放数据库了 常见的几种转码 常用的几种显示方法 只有原生html和最下面一种弹框了,变成了持久xss 这个是举的简单例子,其实还有更多方式的xss以及对应的处理,可以自行百度看看

用最简单的例子理解适配器模式(Adapter Pattern)

中国足球的水平虽然不高,但实际上,在每个城市会有一批足球爱好者,他们踢球.看球.懂球.有这样的2个足球爱好者,一个是左脚选手,另一个是右脚选手. public class PlayWithLeft { public void Play() { Console.WriteLine("我是左脚选手"); } } public class PlayWitRight { public void Play() { Console.WriteLine("我是右脚选手"); }

一个小例子对多态简单的理解

class Parent{ int age; String name; public Parent(String name, int age){ this.name = name; this.age = age; } public void writeWay(){ System.out.println("毛笔!"); } } class Child extends Parent{ int age; String name;//这里只说为了说明一个问题,其实完全可以有父类继承而来. pu

【数据库范式】第二范式分析

2.第二范式2NF 定义:数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,即符合第二范式.  简单的说就是不要字段冗余 <注:什么是函数依赖,详见百度百科(http://baike.baidu.com/view/40008.htm). 如果一个表中某一个字段A的值是由另外一个字段或一组字段B的值来确定的,就称为A函数依赖于B.> 2NF可以减少插入异常,删除异常和修改异常. 简单的说,一方面,第二范式肯定要满足第一范式,否则就没有必要谈第二范式. 另一方面,当某张表中的非主键信息不

mybatis入门学习之(1)+简单例子测试

Mybatis 入门之(1)环境配置+简单例子测试 什么是MyBatis? 它是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的XML或注解用于配置和原始映射,将接口和POJOs(Plan Old Java Objects,普通的 Java对象)映射成数据库中的记录. 其实简单一点说mybatis就是一直访问数据库的技术,它是现在比较流行的一个持久层框架,如果你对JDBC熟悉那就更容易

jdbc 事务简单例子

 一.什么是Java事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolation)和持久性(durability)的缩写.事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效.一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态.隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见.持久性表示已提交的

【转载】CANoe 入门 Step by step系列(三)简单例子的剖析

来源:http://www.cnblogs.com/dongdonghuihui/archive/2012/09/26/2704623.html 最好的学习方式是什么?模仿.有人会问,那不是山寨么?但是我认为,那是模仿的初级阶段,当把别人最好的设计已经融化到自己的血液里,变成自己的东西,而灵活运用的时候,才是真正高级阶段.正所谓画虎画皮难画骨.但初级阶段仍然是必须经历的过程,他会使你在达到高级阶段的过程中少走很多弯路,下面我们来迈出这一步.先研究一下别人的简单例子. 最好的例子莫过于Vector