数据库三范式
完全函数依赖
定义:在R(U)中,如果X->Y,对于X的任意一个真子集X',都有X'不能决定Y,则称Y对X完全函数依赖,记为XY 。
例:(S#,CN)->G
部分函数依赖
定义:在R(U)中,如果X-> Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。
传递函数依赖
定义:在R(U)中,当且仅当X-> Y,Y->Z时,称Z对X传递函数依赖。
例:描述学生(S#)、班级(SB)、辅导员(TN)的关系U(S#,SB,TN)。一个班有若干学生,一个学生只属于一个班,一个班只有一个辅导员,但一个辅导员负责几个班。根据现实世界可得到一组函数依赖:
F={S#->SB,SB->TN}
学生学号决定了所在班级,所在班级决定了辅导员,所以辅导员TN传递函数依赖于学生学号S#。
1、第一范式(1NF):没个字段的值要保证其原子性(不可被拆分)。
eg:不满足1nf:地址:四川省成都市;
正确:地址:省:四川省; 市:成都市;
2、第二范式(2NF):满足第一范式,然后消除部分依赖。(每个表只描述一件事)
没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
eg:不满足2NF:学生信息表:学号(主键),姓名,系名,系主任,课程名称,分数。(正确:学号--》姓名,学号--系名,学号--》系主任,)
问题:1.部分依赖 分数 --依赖--》 (课程名称+学号)
正确,拆分表:学生表:学号,姓名,系名,系主任;
学生成绩:学号,课程名称,成绩;
3、第三范式(3NF): 满足第二范式,消除传递依赖。
eg:不满足3NF:学生信息表:学号(主键),姓名,系名,系主任。
问题: 学号 --》 系名,系名--》系主任;存在传递依赖
正确,拆分表:学生信息表:学号(主键),姓名,系名;
学校系: 系名,系主任;
相关阅读
最近在学习Asp.netMVC的时候,接触到Northwind数据库,发现很多书籍、教程都是用Northwind数据库当作示例进行演示,所以研究了一下,觉得
此处介绍下Oracle的权限等级 sys;//系统管理员,拥有着最高权限 systen;//本地管理员,拥有次高权限 scott;//普通用户 角色(即权限
作者:知乎用户链接:https://www.zhihu.com/question/24696366/answer/29189700来源:知乎著作权归作者所有。商业转载请联系作者获得
Android实现一个简单的SQLite数据库的增删改查 SQLite是一个轻量级的嵌入式数据库引擎,它支持SQL语言,并且占用很少的内存就
SQL server 2016数据库 下载安装 1:获取安装包 获取安装包 点击进去如下图:复制链接到迅雷中下载 2:下载的 SQL server 2016如下图