SQL 第一范式、第二范式、第三范式、BCNF范式
一、第一范式 1NF
要求:每一个分量必须是不可分的数据项。
特点:
1)有主键,且主键不能为空。
2)字段不能再分。
示例:(以下例子 不满足 第一范式)
/*学号 年龄 信息*/
Sno Sage Sinfo
1001 19 陕西省西安市,电话:10086
1001 20 陕西,宝鸡
主键:Sno
不满足原因:1)主键重复。2)Sinfo字段可以再分。
二、第二范式 2NF
要求:在范式一的基础上,且每一个非主属性完全函数依赖于码。
特点:
1)满足第一范式。
2)表中的每一个非主属性,必须完全依赖于本表码。
3)只有当一个表中,主码由两个或以上的属性组成的时候,才会出现不符合第二范式的情况。
示例:(以下例子 不符合 第二范式)
/*学号 课程号 得分 课程名*/
Sno Cno Score Sname
1001 001 99 数据库
主键: Sno,Cno
不满足原因:Sname不完全依赖于码,课程名部分依赖于码Cno。
三、第三范式 3NF
要求:在满足第二范式的基础上,且每一个非主属性既不部分依赖于码也不传递依赖于码。
特点:
1)满足第二范式。
2)非主属性不能传递依赖于码。
示例:(以下例子 不符合 第三范式)
/*学号 系别 系主任*/
Sno Sdept Shead
1001 计算机系 张三
主键:Sno
不满足原因:Shead传递依赖于码,Sno->Sdept->Shead,可得Sno->Shead。
四、BCNF
要求:在满足第三范式的基础上,且不允许主键的一部分被另一部分或其它部分决定。
特定:
1)满足第三范式。
2)所有非主属性对每一个码都是完全函数依赖。
3)所有的主属性对每一个不包含它的码,也是完全函数依赖。
4)没有任何属性完全函数依赖于飞码的任何一组属性。
示例:(以下例子 不符合 第BCNF范式)
/*学生 老师 课程*/
Stu Teacher Course
张三 李开复 数据库
假设:每个老师只教一门课。
候选码:
(Stu,Teacher)->Course
(Stu,Course)->Teacher
这两个码由两个属性组成,而且它们是相互交叉的,所以不存在传递依赖,所以为3NF。
但是由于:Teacher->Course,(主键的一部分被另一部分决定),所以不符合BCNF。
SQL 第一范式、第二范式、第三范式、BCNF范式的更多相关文章
- SQL 第一范式、第二范式、第三范式、BCNF
作者 : Dolphin 原文地址: http://blog.csdn.net/qingdujun/article/details/27365979 一.第一范式 1NF 要求:每一个分量必须是不可分 ...
- SQL基础随记3 范式 键
SQL基础随记3 范式 键 什么是范式?哈,自己设计会使用但是一问还真说不上来.遂将不太明晰的概念整体下 什么是 & 分类 范式(NF),一种规范,设计数据库模型时对关系内部各个属性之间的 ...
- bcnf范式
3.5范式--bcnf范式到底是什么呢? 对于bcnf范式,通过查阅资料,我的理解是--主键依赖的去除.比如说:一个仓库管理的表格,有以下属性(管理员编号,仓库号,货物编号,货物数量)其中每个管理员管 ...
- 重温sql 设计的基本三大范式
第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 例如:顾客表(姓名.编号.地址.……)其中"地址"列还可 ...
- BCNF范式及其分解方法(对一次Lab作业的总结)
BCNF是比第三范式更严格一个范式.它要求关系模型中所有的属性(包括主属性和非主属性)都不传递依赖于任何候选关键字.也就是说,当关系型表中功能上互相依赖的那些列的每一列都是一个候选关键字时候,该满足B ...
- oracle系列--基础理论
一.数据库系统架构: 外层(External Level)外层是提供给用户直接操作使用的 概念层(Conceptual Level)用来描述数据库中存放数据的类型.表之间的关系.高级的数据模型.用户的 ...
- .NET软件工程师面试总结
1.手写画出系统架构图,系统代码架构,有什么技术难点? 2.手写画出系统部署图 CDN(一般购买别人的服务器会自动CDN,他们自己配置就OK啦) 3.asp.net 的session怎么实现会话共享 ...
- about oracle
Oracle 劳伦斯.埃里森 Larry Ellison history: 人工管理阶段 文件管理阶段 数据库系统阶段 model:[模型是所研究的系统.过程.事物或概念的一种表达形式] 层次结构m ...
- Oracle 11g
Oracle 11g 第一章 Oracle 11g数据库简介 1.1 认识Oracle11g Oracle 11g是Oracle 数据库最新的版本,目前已经被企业广泛的应用. 1.2 Oracl ...
随机推荐
- 调用系统命令 os.system()和os.popen()
Python中os.system和os.popen区别 Python调用Shell,有两种方法:os.system(cmd)或os.popen(cmd)脚本执行过程中的输出内容.实际使用时视需求情况而 ...
- [数据结构]P2.1 二叉搜索树
二叉树就是每个节点最多有两个分叉的树.这里我们写一写一个典型的例子二叉搜索树,它存在的实际意义是什么呢? 在P1.1链表中,我们清楚了链表的优势是善于删除添加节点,但是其取值很慢:数组的优势是善于取值 ...
- arch Linux 安装完,无法通过 SSH 远程连接 root 用户问题
访问 arch Linux 主机的该文件 [root@eric-laptop ~]# vim /etc/ssh/sshd_config 对应注释部分后边补上下边三行: LoginGraceTime 1 ...
- 树状DP HDU1520 Anniversary party
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:职员之间有上下级关系,每个职员有自己的happy值,越高在派对上就越能炒热气氛.但是必须是 ...
- mysql数据库的基础操作
注 : 本文中注释因为方便写了# ,mysql中规范应为 -- 创建用户 通过root管理员权限可以创建各种用户,并为他们分配权限及可以操作的数据库. 语法:create user '用户名'@'ip ...
- centos 7 安装iptables防火墙
firewalle: 开启6379端口和16379端口 [root@localhost ~]# firewall-cmd --zone=public --add-port=6379/tcp --per ...
- linux配置redis三种启动方式
下载 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 解压 tar -xzf redis-4.0.9.tar.gz -C /usr/ ...
- 网站压力测试工具http_load的安装与使用
一.安装 1.下载地址:http://www.acme.com/software/http_load/http_load-09Mar2016.tar.gz 2.解压后进入目录,执行make & ...
- 安装一个Linux
Linux--虚拟机的的安装: 首先需要一个可执行(VMware-workstation-full-14.1.2-8497320.exe)的文件和一个Linux(CentOS-7-x86_64-DVD ...
- Let me introduce myself
介绍自己,从开学到这上半学期结束,不知道说了多少个版本.开学军训,要自我介绍:军训结束,在班里要自我介绍:参加社团,面试要自我介绍.....不能说对每个人,至少对于我来说,在众人面前开口介绍自己,总还 ...