柒微博客

其它编程

数据库设计范式讲解-逻辑结构设计

2019-08-30 其它编程 115

基础知识

实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,比如说“老师与学校的关系”。

属性:在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。

元组(记录):表中的一行就是一个元组。

分量:元组的某个属性值。在一个关系数据库中,它是一个操作原子,即关系数据库在做任何操作的时候,属性是“不可分的”。否则就不是关系数据库了。

码=超键:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码

全码:如果一个码包含了所有的属性,这个码就是全码。

主码=主键:我们在建立数据库的时候,需要为每张表指定一个主码,主码也叫主键。所谓主码就是在实体集中区分不同实体的候选码。一个实体集中只能有一个主码,但可以有多个候选码

关键:唯一可以决定整个关系的码就是关键码

主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。简单来说,主属性是候选码属性的并集

非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。

外码=外键:一个属性(或属性组),它不是码,但是它别的表的码,它就是外码。


部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。

例子:学生基本信息表R中(学号,身份证号,姓名)当然学号属性取值是唯一的

          在R关系中:(学号,身份证号)->(姓名),(学号)->(姓名),(身份证号)->(姓名);

          所以姓名部分函数依赖于(学号,身份证号)


完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。

例子:学生基本信息表R(学号,班级,姓名)假设不同的班级学号有相同的,班级内学号不能相同

           在R关系中,(学号,班级)->(姓名),但是(学号)->(姓名)不成立,(班级)->(姓名)不成立

            所以姓名完全函数依赖与(学号,班级)



传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

例子:在关系R(学号 ,宿舍, 费用)中,

           (学号)->(宿舍)   宿舍!=学号      ,(宿舍)->(费用),费用!=宿舍,

           所以符合传递函数的要求;


第一范式:列不可再分

例:一个人的联系方式有三个,则不满足第一范式,这个联系方式应该单独拿出来做一个表(手机号码表)


第二范式:属性完全依赖于主键

简单点说就是消除部分依赖。

判断是否符合第二范式,不符合则分解成第二范式:

  1.先求出表中的FD关系

  2.分析求出关键码(唯一可以决定整个关系的码就是关键码

  3.通过FD关系判断是否存在局部依赖,如:(职工名,项目名) ->(部门名,部门经理) 这是局部依赖

  4.将局部依赖关系分解成2NF:

R1项目名,部门名,部门经理) 

R2(职工名,项目名,工资)



第三范式:不存在传递函数依赖

简言之:第三范式就是属性不依赖于其它非主属性。

数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c  属性之间含有这样的关系,是不符合第三范式的



转载请说明来源于"柒微博客"

本文地址:http://7we.net/article-133.html

文章评论

请您先登录|注册后再进行回复
回复区