第一范式、第二范式、第三范式

news/2024/6/17 11:47:03

第一范式

存在非主属性对码的部分依赖关系 R(A,B,C) AB是码 C是非主属性 B-->C B决定C C部分依赖于B

第一范式

定义:如果关系R 中所有属性的值域都是单纯域,那么关系模式R是第一范式的

那么符合第一模式的特点就有

1)有主关键字

2)主键不能为空,

3)主键不能重复,

4)字段不可以再分

例如:

 StudyNo   |   Name   |   Sex   |   Contact

20040901      john         Male      Email:kkkk@ee.net,phone:222456

20040901      mary         famale    email:kkk@fff.net phone:123455

以上的表就不符合,第一范式:主键重复(实际中数据库不允许重复的),而且Contact字段可以再分

所以变更为正确的是

 StudyNo   |   Name   |   Sex   |      Email         |      Phone

20040901      john         Male       kkkk@ee.net       222456

20040902     mary          famale      kkk@fff.net      123455

 

第二范式

存在非主属性对码的传递性依赖 R(A,B,C) A是码 A -->B ,B-->C

定义:如果关系模式R是第一范式的,而且关系中每一个非主属性不部分依赖于主键,称R是第二范式的。

所以第二范式的主要任务就是

满足第一范式的前提下,消除部分函数依赖。

StudyNo   |   Name   |   Sex   |         Email         |      Phone    |   ClassNo  | ClassAddress

01                  john        Male       kkkk@ee.net     222456      200401            A楼2

01                   mary       famale    kkk@fff.net       123455      200402            A楼3

这个表完全满足于第一范式,

主键由StudyNo和ClassNo组成,这样才能定位到指定行

但是,ClassAddress部分依赖于关键字(ClassNo-〉ClassAddress),

所以要变为两个表

表一

StudyNo   |   Name   |   Sex   |      Email         |      Phone |   ClassNo

      01            john         Male       kkkk@ee.net  222456   200401     

      01           mary         famale    kkk@fff.net    123455      200402    

表二

 ClassNo  | ClassAddress

 200401      A楼2

 200402      A楼3


第三范式

不存在非主属性对码的传递性依赖以及部分性依赖 ,
StudyNo   |   Name   |   Sex   |      Email         |      bounsLevel   |   bouns

20040901      john         Male       kkkk@ee.net   优秀                    $1000

20040902     mary         famale    kkk@fff.net       良                         $600

这个完全满足了第二范式,但是bounsLevel和bouns存在传递依赖

更改为:

StudyNo   |   Name   |   Sex   |      Email         |      bouunsNo

20040901      john         Male       kkkk@ee.net   1

20040902     mary         famale    kkk@fff.net       2

bounsNo   |   bounsLevel   |   bouns

1                   优秀                $1000

 2                 良                   $600

这里我比较喜欢用bounsNo作为主键,

基于两个原因

1)不要用字符作为主键。可能有人说:如果我的等级一开始就用数值就代替呢?

2)但是如果等级名称更改了,不叫 1,2 ,3或优、良,这样就可以方便更改,所以我一般优先使用与业务无关的字段作为关键字。

 

一般满足前三个范式就可以避免数据冗余。


http://www.niftyadmin.cn/n/1491690.html

相关文章

树莓派上MJPG-streamer安装手顺

motion和MJPG-streamer异同 相同点:都是linux系统上监控用的程序。 不同点: motion通过motion.conf配置文件,可以设定动态感知的动作。比如有宠物进入摄像头范围内,motion自动捕获截图或者视频,然后触发既定的脚本&am…

Debian 8使用自带tar, dd, rsync备份

一、tar # gz # 备份 cd / sudo tar -cvpzf backup.tgz --exclude/media --exclude/proc --exclude/mnt --exclude/sys --exclude/backup.tgz /# 还原 sudo tar -xvpzf backup.tgz -C /# bz2 # 备份 cd / sudo tar -cvpjf backup.tar.bz2 --exclude/media --exclude/proc --ex…

Ubuntn

1,查询当前目录文件列表:ls ls命令默认状态下将按首字母升序列出你当前文件夹下面的所有内容,但这样直接运行所得到的信息也是比较少的,通常它可以结合以下这些参数运行以查询更多的信息: ls / 显示/.下的所有文件和目录 ls -l…

树莓派下mjpg-streamer 挂载多个USB摄像头

1、lsusb查看系统是否识别到USB camera; lsusb 2、ls -al /dev/ | grep video查看识别到的video编号 ls -al /dev/ | grep video 3、在根目录(cd ~,即可调到根目录)进入mjpg-streamer目录: cd mjpg-streamer-master/mjpg-strea…

ubuntu linux基本命令- 改变工作目录命令

该命令更改目录到目录名指定的目录,目录名可以是绝对路径名,也可以是相对路径名称,该命令可以使用通配符。如果目录名缺省则回来用户的主目录。用户必须有对目标目录用于执行和读取权限,才能成功切换到目标目录。 几个例子&#x…

树莓派3B + Pi摄像头+mjpg-streamer

树莓派利用pi Camera模块,通过mjpg-streamer软件获取视频,通过手机端或电脑端浏览实时视频。网上太多的mjpg-streamer使用配置例程,但是问题多多,自己实践的步骤如下 方法/步骤 1 sudo apt-get update #更新软件列表 sudo apt…

Python3之简单搭建自带服务器

WEB开发,我们先从搭建一个简单的服务器开始,Python自带服务模块,且python3相比于python2有很大不同, 在Python2.6版本里,/usr/bin/lib/python2.6/ 目录下会有 BaseHTTPServer.py, SimpleHTTPServer.py, CGIHTTPServer.…

树莓派上MJPG-streamer的安装过程

MJPG-streamer是一个优秀的开源project,它可以通过HTTP的方式访问linux上面的兼容摄像头,从而做到远程视频传输的效果。最近导师的一个project和远程视频传输有关,于是笔者在树莓派上面搭建视频传输环境的时候直接选择了MJPG-streamer。现在将…