数据库第二章总结

说明一下:下面会有大量的截图,因为我打不出符号

复习:笛卡尔积

A = {1,2,3};
B = {a,b,c}
A * B = {
    (a,1)(a,2)(a,3),
    (b,1)(b,2)(b.3),
    (c,1)(c,2)(c,3)
}
num = Na * Nb


可以推广到一般形式
  存在 集合 A,B,C,D …… n, 则其笛卡尔积:

A * B * C * D * …… * n = {
(A1,B1,C1,D1,……,n1),(A1,B1,C1,D1,...,n2),
...
}
NUM = Na*Nb*Nc*Nd*...*Nn (所有的n不一定相等)

 ps:笛卡尔积会产生

关系:P33

属性:

    1. 都有一个名称
    2. 允许存在一个属性集合
    3. 属性必须时原子的,即不可分割(1NF,第一范式)
    • 多值属性值不是原子的
    • 符合属性值不是原子的

   4. 特殊值null是每一个域的成员

  ps:空值会给数据库访问带来困难,需要避免使用

概念:

1、关系模式:描述关系的结构
2、关系实例:表示关系的一个特定实例,也就是所包含是一组特定行

变量      -->     关系
变量类型    -->     关系模式
变量值       -->   关系实例

码、键:

1、某个值能够在一个关系中唯一的标志一个元组,则K是R的 超码

例如:身份证号码、学号或者身份证号加学号加银行卡号

2、候选码

超码的一个子集,当超码集合不唯一,超码的集合中的子集称为候选码

3、候选码:k是一个候选码,K是一个主键,则需要用户明确定义。(下划线表示)

就像上面的例子,从身份证,银行卡,学号……里选出一个(黑体)

4、外键:(保证参照完整性)

假设存在关系 r 和 s:r(A, B, C),s(B, D),则在关系r上的属性B称作参照s的外码

r也称为依赖的 参照关系

例如:

学生(ID, name, PID, age)——       参照关系
专业(PID, Pname)——————————    被参照关系(target relation)
其中属性专业号称为学生的外码
instructor(ID, name, dep_name, salary) -    参照关系被参照关系
departerment(dept_name, building, budget) -  被参照关系

ps:参照关系中外码值必须在被参照关系中实际存在或为NULL

关系代数和关系运算:

关系代数是SQL的基础

基本操作:{考虑集合性质}

1、选择操作


2、投影操作:取单个元素,采用投影


3、并操作  {和集合的并集差不多}

  限制:等目,同元(属性的数目必须相同)
    对任意i,r的第i个属性域和s的第i个属性域相同
    (其外模式层采用同一个结构)存疑


4、差运算:


  限制与3相同
5、笛卡尔积:{当一个选择涉及到多个relation,辣么就需要笛卡尔积}
    出现同名属性,当作不同名处理
    复合运算:基本操作的复合


6、更名运算:允许使用其他名字对输出的关系进行重命名

附加运算:{莫得增加新功能,只是简化表达式,都可以被基本表达式所表示}

1、交运算:
  r和s同元
  r和s的属性域是可兼容的


2、自然连接:(个人觉得这就是个查找相同元素并保留其所有属性的运算)
  同名属性只出现一次(名,域对应相同)
  1、r,s必须含有同名属性

  2、连接两个关系中同名属性值相等的元组

  3、结果属性是二者属性的集合

 

 


3、theta连接:连接条件可以由用户来指定
4、除运算:比较复杂,看图吧(凡是查询条件里涉及到“全部,所有”优先考虑除法)

   


5、赋值操作:
  可以将查询表达为一个顺序程序,该程序包括:
    ——一系列赋值
    ——一个值被作为查询结果显示的表达式
      赋值必须赋给一个临时的关系变量

 

 

 

广义投影

允许在投影列表中是由算数来对投影进行拓展


聚集操作:

平均值:
最小值:
最大值:
值的综合:
值的数量:

直接看图吧,符号太难找了

 

 

 

ps:聚集操作的运算结果没有名称,需要与更名运算连用


外连接:

外连接运算时连接运算的扩展,处理缺失信息,
自然连接有一部分找不到的对应元组,外连接将这个找不到的元组加入
自然连接的结构

存在关系 A 和 关系 B

  1. 左外连接,将 B 在 A 中不匹配的元组添加到 自然连接 中,不知道或者不存在的值置为NULL
  2. 右外连接,将 A 在 B 中不匹配的元组添加到 自然连接 中,不知道或者不存在的值置为NULL
  3. 在连接中,将 A 与 B 不匹配的所有元组添加到 自然连接 中,不知道或者不存在的值置为NULL

  

  空值:{特殊值null是每一个域的成员}

  1. 元组的某些值可以为空值
  2. 空值表示不知道 和 不存在
  3. 聚集函数会忽略空值

  空值可以作为返回结果
  遵循SQL对空值的操作

 4.为了消除重复和分组,空值和其他值同等对待

    •   一种方式是两个空值被认为是相同的
    •   另一个方法两个空值被认为是不同的

PS: 两种都可行,最好遵循SQL对空值的处理语义

逻辑比较问题:
考虑
  not(A < 5) 与 (A>=5)

若前式为真,那与后式矛盾;

若后式为真,那与前式矛盾;

所以:

  空值的的任何比较结果都为:unknown

5.使用特殊值的三值逻辑:

OR:(unknown or false) = true
AND:(unknown AND false) = false
NOT:(not unknown) = unknown
  其他都为unknown


在SQL中,谓词P的值为unknown ,那么 "P is unknown"的值为true

数据库的修改:

删除:{通过覆盖实现(赋值操作和差运算)}
  r <- r - E
  其中,r是关系,E是关系代数查询

插入:{赋值操作+并操作}

     r <- r U E

  其中,r是关系,E是关系代数查询

更新:{赋值+广义投影}

posted @ 2020-02-25 15:25  秦_殇  阅读(515)  评论(0编辑  收藏  举报