数据库复习一

一、sql语句
1、主码: 唯一标识元组 ; 一个表只能有一个主键,主键从候选码中选一个
     超码 : 可以唯一标识元组的属性组合 
     候选码: 超码中最小闭包,即不能在小化的超码
    外码: r2主码:m ,r1主码n,含有属性m,  则m是r1上参照r2的外码地

外键写法: foreign key (Wai_ma ) reference R2;

2、建表数据基本类型
 char(n) 固定长度   varchar(n) 可变长度  numeric(m, n) m位数,n位小数
3、 关系点数
1) 除号: 例如:R /S,表示选择R中与S相关的所有集 
2)聚集函数表示法: 在函数前+G,将需要GroupBy的属性放在G前面,比如   a1,a2Gsum(age)(···) 
3)更名运算 Px(d) x为新名
4) 左、右、全外连接:  左外连接表示左边表与右边不匹配的元组,自动地将右边的属性赋值为空然后加入到新表中 


二、 E-R图设计 

1、实体集    

     联系集 : 不同实体或实体集之间的联系的集合  , 联系集可有有描述性属性。】
     属性:分类: 简单、复合属性 
                          单值和多值属性
                          派生属性: 即通过某种属性的实体派生得来的 如 具有某种属性的实体的数量
2、参照约束 :  指的是实体集中并非所有实体都通过联系集

3、从实体集中删除冗余属性: 

1)删除外码,保留主码

4、E-R设计:(关系模式)

实体集:(属性,属性) // 主码以下划线表明
联系集:

5、E-R图

1 如何表示一对多、多对一、多对多
箭头:箭头为1,线段为多
映射基数:  位于实体集与关系集上线段 
                l..h  l表示最小的映射基数, h表示最大    可以用*表示,表示为没有限制

如: 1..1 表 一对一 ,0,,* 表示己实体可以对应0个也可以对应不限量的彼实体
如何表示属性全部参与: 双线 
2)如何表示实体在联系集中的参与度  双线 表示全部参与
3)如何表示连接到弱实体集的标志j性联系集   双线菱形
4) 如何表示复合、多值、派生属性    ;  多值:{多值属性名} ; 派生:  派生属性名+()
5)弱实体集:  没有足够的属性构成主码的实体集,相反,有主码的成为强实体 
6)标识实体集:能标识弱实体,弱实体依赖于标识实体集

6、E-R图与E-R关系模式的转换
1) 如何转换多值属性强实体集:  用子值代替赋值表示。
2)弱实体集表示:  本身属性加上所依赖标识实体集的主码
3)联系集的表示: 由实体集中的主码和联系集上的描述属性组成,该模式上的主码在实体集中的主码中选(一对一,任选一个;一对多,选多个;多对多,全选)  

;链接弱实体与强实体的联系一般不用给出 (若给出,弱实体的主码的其属性加上依赖实体的主码)

三、关系数据库设计
1、第一范式:  即关系模式没有子结构(即复合属性,多值属性)

 第二范式:满足第一范式的前提下,主关键字都是单值,则一定是第二范式;若不是,则非关键字一定只能依赖于组合关键字,不能依赖于其他非关键字。

2、使用函数依赖进行分解 
1)函数依赖:  a , b为是一个属性集, 两个元组中,a属性相等,可以推出b属性也相等,则说明a->b ,这称为一个函数依赖集。
2)函数依赖的写法: (属性)->R
3) F(一个函数依赖集) F+称为F的闭包,即有F可推出的所有依赖集的集合。

3、BCNF  (Boyce-Codd Normal Form范式)
1)判断具有函数依赖集F的关系模式R满足属于BCNF范式的条件:对所有F+中形如a->b的函数依赖集,下面至少有一项成立
            ·  a->b是平凡依赖集(b包含于a)
            · a是模式R的一个超码
4、 BCNF和保持依赖

5、第三范式 3NF
1) 如何 判断具有函数依赖集F的关系模式R满足属于3NF范式的条件:对所有F+中形如a->b的函数依赖集,下面至少有一项成立
     · 平凡依赖 
      · a是R的一个超码 
     · b-a的每一个属性a都包含于R的一个候选码中。
      也可以说,非主键必须直接依赖于主键,而不能依赖于非主键列,不能存在传递依赖。
问题: 如何判断是包含于一个候选码中
     
6、函数依赖理论
1)函数依赖集的闭包   : 即满足F的实例也满足f,则f被F逻辑蕴含
2)F的闭包,即F+
3)蕴含逻辑公里推理 (即离散数学中的蕴含逻辑公式
4)属性集的闭包
         计算a+: 就是根据a吧所有a能推出的蕴含结果取并集。
         检验a是否为超码: a+是否包含所有R的属性
5)正则覆盖率(canonical cover) 
      作用: 减少检测数据库更新后是否韩满足函数依赖集的工作开销
      无关属性: 即去掉之后不改变闭包的值
     F的正则覆盖Fc定义:  Fc闭包和F一样 ,  Fc的函数依赖左边式唯一 , 即a->b   a只会出现一次 不会再有a->出现; Fc不含无关属性。

  问题:1、 如何计算F的正则覆盖,2 如何判断无关属性
    1、 合并左边相同的依赖集 2、删除无关属性  
    2、 结果相同,查看左边是否有冗余 ,即去掉左边一个属性能否依旧得到右边; 右边多项,查看去掉一项是否结果相同,即是否有由左边单个属性即可得到的属性,如ab->cf, a->c, 即能把c去掉;或者是右边中有一个属性能推出另一个属性,如ac->bd
,b->d,即可把d去掉;
6) 无损分解  
如何判断分解是否无损 
      如果R1交R2是R1或R2的超码,则R上分解是无损的。
7) 保持依赖   : 分解之后是否还保持依赖集
 
7、分解算法
1)BCNF分解  (分解出几个关系模式否属于BCNF,且无损)
     判定一个关系是否属于BCNF 
        1、对于a->b函数依赖,计算a+是否包含所有属性,即判断是否是超码 
        2、判断所有函数依赖集是否违反BCNF判断条件
   判定一各关系分解后的关系Ri是否还属于BCNF     
      

    分解方法:
             1、 找出 R(关系模式)中不属于BCNF的Ri  (即左边a不是超码)
             2、令a->b为一个在Ri成立的函数依赖, 且满足a->Ri 属于F+ 且a交b为空集  那么关系模式分为 (R-b)和(a,b)
       (a,b)一定属于(BCNF)  然后重复1 2 步骤  
         
8、 3NF分解 
1)计算Fc(正则覆盖) 
2) 循环所有Fc中的依赖集, 合并a和b为一个属性集,R1,R2,··,Ri 
3)判断Rj (j属于1~i)是否包含候选码    
       若没有, 则创建Ri+1 (即新建一个数据集)有候选码组成 (候选码人选)
4) 判断在各属性集中是否有一个属性集包含于另一个属性集
      若有, 则令被包含的那个属性集等于Ri+1(即最新建的属性集) ,然后删除Ri+1
 
     

猜你喜欢

转载自blog.csdn.net/maketubu233/article/details/80763976