SQL 第一范式、第二范式、第三范式、BCNF范式

SQL 第一范式、第二范式、第三范式、BCNF范式,第1张

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。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/585449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存