【学习笔记】数据依赖
数据依赖的概念成
数据依赖是一个关系内部属性与属性之间的约束关系(通过属性间的值是否相等体现)
1函数依赖
在医生工作室里一个医生编号只对应一个医生,一个科目像(内科,外科),医生名字,当医生的编号确定之后就可以确定医生的姓名和所在的科目,等等。。。这一些这些值也就被唯一确定了,总之是Dno函数决定Dname,Dno决定了医生的科目
部分函数依赖:设R(U)是属性集U上的关系,x、y是U的子集,x’是x的真子集,若x→y且x’→y,则称y部分依赖x,记作X→PY
像医生工作室医生被预约,医生的编号不能决定这个函数,必须需要预约的编号,等等多个值决定。因此医生编号属性就部分依赖于医生预约。
完全函数依赖:设R(U)是属性集U上的关系,x、y是U的子集x’是x的真子集。若对于R(U)的任何一个可能的关系,有x→y但x→y,则称y完全函数依赖于x,记作X→FY。
像医生名字完全依赖于医生编码。
传递函数依赖 :设R(U)是属性集U上的关系,x、y、z是U的子集,在R(U)中,若x→y,但y→x,若y→z,则x→z,称z传递函数依赖于x,记作X→TZ。
像医生的编码就可以找到医生的科室,医生的科室就可以找到这个科室的主任医生
2多值依赖
多值依赖” 是一个断言, 指的是两个属性或属性集和相互独立。这种情况是函数依赖概念的广义形式, 意味着每个函数依赖都包含一个相应的多值依赖。
像今天有一个医生在医生工作室签到了,签到的编码不仅仅只依赖于医生的编号,还有时间段,也就是一个函数值不止依赖于一个一个属性。
但是数据依赖存在一些问题
(1) 数据冗余:医生的名字可能大量重复,大量浪费储存空间
(2) 更新异常:某科室的医生如果更换,必须修改有关这个医生有的一切信息,
(3) 插入异常:如果医院开设了一个新的科室,像开设了一个男科,要加入新的医生,但没有医生前来,就不能将这个科室的信息(元组)存入数据库
(4) 删除异常:在删除有关科室的医生的信息的同时,也将这个科室的医生的信息丢掉了。
便提出了规范化的概念
规范化的概念
一个低一级的范式的模式通过模式分解可以转换为若干个高一级的关系的集合
第一范式(1NF)
第一范式(1NF)是指数据库表每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值不能有重复的属性,也就是不能有重复的列。就是不能拥有两个相同的医生编号
第二范式(2NF)
在满足第一范式的基础在要求实体的属性完全依赖于主关键字使数据库表中的每个实例可以被唯一地区分,例如员工信息表中加上了员工编号(emp_id)列,因为每个医生的医生编号是唯一的,因此每个医生可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。
第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]
(医生的编号)→ (姓名, 年龄,性别,系别,科室地址、科室办电话)
但是还存在下面的决定关系
(医生的编号) → (所在科室)→(科室地点, 科室电话)
即存在非关键字段"科室地点"、"科室电话"对关键字段"医生编号"的传递函数依赖
第四范式(4NF)
4NF就是限制关系模式的属性之间不允许有非平凡且有飞函数的多值依赖
满足4NF也就满足bcnf