数据库系统概论-006: 关系数据理论

一:问题的提出
    一个学校教务数据库。U={Sno学号, Sdept所在系, Mname系主任姓名, Cno课程号, Grade成绩};
    1: 数据冗余大:如系主任名字重复出现,浪费空间。
    2: 更新异常:由于数据冗余,当更新数据库时,系统需要付出很大的代价来维护数据库的完整性,否则会面临数据不一致的危险。
        如更换系主任后,必须修改与该学生的每一个元组。
    3: 插入异常:如果某个系新成立,尚无学生,则数据库无法记录该系及其系主任的信息。
    4: 删除异常:如果系学生全部毕业,在删除信息时,会删除系及系主任的信息。
    S(Sno,Sdept,Sno->Sdept);
    SC(Sno,Cno,Grade,(Sno,Cno)->Grade);
    DEPT(Sdept,Mname,Sdept->Mname);

二:术语
    1: 函数依赖:设R(U)是属性集U上的关系模式,X,Y是U的子集。
        若对于任意R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性相等,而在Y上的属性不相等,则称X函数决定Y或Y函数依赖于X,记作X->Y;
        如Sname=f(Sno),即Sno决定Sname,这时称Sname函数依赖Sno,记为Sno->Sname;
    2: 非平凡函数依赖:X决定Y,但X不包含Y。
    3: 平凡函数依赖:X决定Y,X包含Y。对于任意关系模式,平凡依赖都是必然成立的。
        例如:(职工号,性别)->职工号,这时称为平凡函数依赖。
    4: 完全依赖:在R(U)中,X决定Y,但对于X的任一真子集X',都有X'不决定Y,则称Y对X完全函数依赖。否则称为部分函数依赖。
    5: 候选码:设K为R<U,F>中的属性或属性集合,若U完全依赖K,则称K为候选码。
    6: 主码:当候选码多于一个时,选择其中一个作为主码。
    7: 主属性:包含在任何一个候选码中的属性。
    8: 非主属性:不包含在任何码中的属性。
    9: 全码:整个属性都是码。
    10: 外码:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X为R的外码。
    11: 多值依赖:
        在关系模式中,函数依赖不能表示属性值之间的一对多的联系。这些属性之间虽然没有直接联系,但存在间接联系。
        把没有直接联系,但有间接联系的联系称为多值依赖。
        举例如下,有这样一个关系 <仓库管理员,仓库号,库存产品号> ,
        假设一个一个产品只能放到一个仓库中,但是一个仓库可以由若干管理员,那么对应于一个 <仓库管理员,库存产品〉有一个仓库号,
        而实际上,这个仓库号只与库存产品号有关,与管理员无关,就说这是多值依赖。
        A: 多值依赖的对称性:X->->Y,则X->->Z。其中Z=U-X-Y。


三:第一范式(1NF)
    每一个分量必须是不可分割的数据项。
1: 特点:有主关键字,主键不能为空,主键不能重复,字段不可再分。
    如联系方式字段:不可同时包含EMAIL和电话。

四:第二范式(2NF):(即消除非主属性部分函数依赖)
    若R属于1NF,且每一个非主属性完全依赖于码,则R属于2NF。
    1: 如关系模式SLC(Sno, Sdept, Sloc, Cno, Grade)。SLOC为学成住处,且每个系的学生住处在同一个地方。码为(Sno, Cno)。
        Grade完全依赖(Sno, Cno)。
        Sdept完全依赖Sno。但是Sdept部分依赖(Sno, Cno)。
        Sloc完全依赖Sno。但是Sloc部分依赖(Sno, Cno)。
        即Grade对码完全函数依赖,而Sdept和Sloc对码是部分函数依赖。
        SC(Sno, Cno, Grade)
        SL(Sno, Sdept, Sloc)
    2: 如果一个关系模式不属于2NF,会产生以下问题:
        A: 插入异常:如当某生未选课,即Cno为空,则该学生信息无法插入。
        B: 删除异常:当某生只选一门课,后又不想选了。
        C: 修改负责:如果换系。
       
五:第三范式:在第二范式的基础上消除传递依赖。(消除非主属性部分依赖和传递依赖)
    1: 如SL(Sno, Sdept, Sloc)码为Sno。
        其中Sno->Sdept, Sno->Sloc, Sdept->Sloc。从而存在传递依赖。
        SD(Sno, Sdept)
        DL(Sdept, Sloc)

六:扩充的第三范式(BCNF)(在3NF的基础上消除主属性对码的部分和传递函数依赖,每一个决定因素都包含码)
    1: 所有非主属性对每一个码都是完全函数依赖。
    2: 所有主属性对每一个不包含他的码,也是完全函数依赖。
    3: 没有任何属性完全函数依赖于非码的任一组属性。
    4: 如STJ(S学生,T教师,J课程)。每个教师只教一门课,每门课都若干教师。
        (S,J)->T;(S,T)->J; 同时T->J;
        这里,由于T->J,从而主属性J部分依赖于码(S,T)。
        STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖。但STJ不是BCNF关系,因为T是决定因素而T不包含码。
        可以分解成ST和TJ。

七:4NF(第四范式:消除多值依赖)
    1: WSC(W仓库,S保管员,C商品):其中仓库有若干个保管员。每个保管员保管所在仓库所有商品。
        按照语义,每个W,S都有一个完整的集合与之对性而不问C的取值,这是W多重依赖S,即W->->S。
        由于每个保管员保管所在仓库所有商品,所以W->->C;
        由于这个关系是全码,这是问题出现了,对于每个仓库,有M(该仓库管理人员数据)*N(仓库产品数目)个数据。
        这是可以分解成WS和WC即S->W及C->W;
    2: 总结:1->M->N;这是可以分解成1->M和1->N。
   
八:5NF(第五范式)

九:总结
    1: 1NF->2NF:消除非主属性对码的部分函数依赖
    1: 2NF->3NF:消除非主属性对码的传递函数依赖
    1: 3NF->BCNF:消除主属性对码的部分和传递函数依赖
    1: BCNF->4NF:消除多值依赖

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值