************************************************************************ ****原文: blog.csdn.net/clark_xu 徐长亮的专栏 ************************************************************************ 第一范式: 概况为列的唯一性,不能有重复的列(
************************************************************************ ****原文: blog.csdn.net/clark_xu 徐长亮的专栏 ************************************************************************
第一范式: 概况为列的值唯一性,不能有重复的列值( 必须遵守 );
反面例子:
名字 联系方式 ( 字符串类型 )
xxx 12345 ; abc@163测试数据
xxx bcd@163测试数据
xxx 12345;67890;def@163测试数据
危害性:为垃圾数据,无法删除,无法修改;
正确的设计方法:
名字 电话 1 电话 2 电话 3 电话 4 邮箱
第二范式, 属性完全依赖于主键( 必须遵守 )
n 必须满足第一范式
n 必须有主键
n 其他列必须完全依赖于主键
错误的建表方法:
编号 姓名 性别 专业 专业课时
100 xxx m java 600
200 xxx f java 700
违反范式 2 的是另外一种含义,将两个实体放在同一个表中,不方便其中一个实体数据的单独维护 。
编号 姓名 性别 专业 专业课时
100 xxx m java 600
200 xxx f java 700
表 2
专业编号 专业 专业课时
001 java 600
002 java 700
3) 第三范式:属性不依赖其他非主属性
n 必须遵守第二范式
n 去除传递依赖
正确的设计方法为:
编号 姓名 性别 专业编号
100 xxx m 001
200 xxx f 002
表 2
专业编号 专业 专业课时
001 java 600
002 java 700
概况为:
范式 2: 一个表中不能含有两个实体的信息,必须含有一个实体
范式 3 :一个实体中不能引用其他实体的属性,只能引用其他实体的主键
注意:
在某些情况下,出于查询效率的考虑,可能会违反范式 3 ,此时增加了冗余,查询的时候,不需要表连接,增加了表的执行效率,但是可维护性下降,一般为不建议经常维护的表违反第三范式。