数据库知识点整理

第一章 关系数据模型


1、数据的独立性

数据独立性:指用户的应用程序与存储在磁盘上的数据是相互独立的。

数据模型是对现实世界的模拟。包括层次模型、网状模型、关系模型等。

模式是数据库中全体数据的逻辑结构和特征的描述,不涉及到具体的值。是所有用户的公共数据视图,不涉及物理存储细节和硬件环境,也与具体的应用程序、开发设计语言无关。一个数据库只有一个模式。比如学生选课数据库模式中,包含学生记录、课程记录和学生选课记录。

外模式:是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述。是模式的子集,一个数据库可以有多个外模式。

内模式:是数据物理结构和存储方式的描述,比如堆存储还是升序降序存储,索引是B+树索引还是hash索引,数据是否压缩、加密等。

数据库的二级映像功能:

外模式/模式映像(保证逻辑独立性),每个外模式都对于一个映像,外模式变了,模式可以保持不变。 

模式/内模式映像(保证物理独立性),数据库存储结构变了,模式可以保持不变。

2、关系数据库的一些术语

关系:一个关系对应通常说的一张表

元组:表中的一行

属性:表中的一列

域:是一组具有相同数据类型的值的集合。例如自然数、整数、大于0的数


笛卡尔积:

基数为2×2×3=12

 

关系:R(D1,D2,D3……Dn)

 

n 码:表中的某个属性组可以唯一确定一个元组。

n  超码是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地标识一个实体。如果K是一个超码,那么K的任意超集也是超码,也就是说如果K是超码,那么所有包含K的集合也是超码。

n  不含有多余属性的超码是候选码,它的任意真子集都不能成为超码。例如,如果K是超码,那么所有包含K的集合都不能是候选。码候选码的诸属性为主属性,其他属性为非主属性

n  是从多个候选码中任意选出一个做为主码,如果候选码只有一个,那么候选码就是主码。

 

关系可以有三种:基本关系、查询表、视图表

 

基本关系:行和列的顺序无所谓,分量必须是不可分的数据项

可以有完全相同的行或者列

关系模式:关系模式是对关系的描述。表示为R(U,D,DOM,F)R为关系名,U为属性名集合,D为属性来自的域,DOM属性向域的映像集合(属性的类型、长度),F为属性间数据的依赖关系集合。

关系模式通常可以简记为R(A1,A2,A3…An)A为属性名。

关系是关系模式在某一时刻的状态或内容,关系模式是静态、稳定的,关系是动态、变化的。

 

关系操作:

查询、插入、删除、修改

查询包括:选择、投影、连接、除、并、差、交、笛卡尔积

 

 

关系代数运算&关系代数表达式

包括4类运算符,其中基本的关系代数是并、差、选择、投影、笛卡尔积

传统的集合运算:

①并(属于R或属于S)

Õcourse_id (s semester=“Fall”  Λ year=2009 (section)) È  Õcourse_id (s semester=“Spring”  Λ year=2010 (section))

两个关系必须同元且属性数目相同,对应次序的属性的域必须相同

②差(属于R不属于S)

Õcourse_id (s semester=“Fall”  Λ year=2009 (section))− Õcourse_id (s semester=“Spring”  Λ year=2010 (section))

两个关系必须同元且属性数目相同,对应次序的属性的域必须相同

③交(属于R且属于S)

r∩s等同于r-(r-s)

④笛卡尔积(前一个属性属于R,后一个属性属于S,且有(n+m)列属性,有k1×k2个元组)instructor×teaches

 

专门的关系运算:

①选择(在关系R中选择满足给定条件的元组)

s p(r)  p为谓词,r为关系

s dept_name=“Physics”(instructor)选出关系instructor中属于物理系的元组

Ù (and), Ú (or), Ø (not)将多个谓词联系起来

 

②投影(在关系R中选择若干属性列形成新的关系,因为取消某些列,可能出现重复行,要去除所有重复行)

 

 


列举我们希望在结果中出现的属性作为π的下标,作为参数的关系在括号中。

ÕID, name, salary (instructor)

找出物理系所有教师的名字

Õ name (s dept_name=“Physics”(instructor)) 关系代数的运算结果仍为关系,把多个关系代数运算组合成一个关系代数表达式

 

③连接(从两个关系的笛卡尔积中选取属性间满足一定条件的元组)

等值连接:A,B属性值相同的元组

自然连接:特殊的等值连接,要求两个关系中进行比较的分量必须是相同的属性组,并在结果中去掉重复的属性列。

自然连接

首先形成两个参数的笛卡尔积,然后基于两个关系模式中都出现的属性上的相等属性进行选择,最后去除重复属性。在排序时,都有的属性排在最前面,然后排第一个关系的属性,最后排第二个关系的属性。 (相等属性不止一个的话,都相等的才能连接,一个相等不算)

      Õr.A, r.B, r.C, r.D, s.E (sr.B = s.B Ù r.D = s.D (r  x  s))

外链接运算:因为某些元组不粗在公共属性上相等值,会被舍弃。在结果中创建代空值的元组,以此来保留在连接中丢失的那些元组。

左外连接 右外连 全外连接

④除运算

给定关系R(X,Y),S(Y,Z),除运算后得到新的关系P(X),P中X所对应的Y,必须包含S中的Y。

其他还有:

①更名运算r x (E)  x为名字,E为关系代数表达式

对关系中的某个属性赋予别名。

eg:找到大学里的最高工资

首先计算出一个由非最高工资组成的临时关系:

4   Õinstructor.salary (s instructor.salary <d.salary 
                                     
(instructorx rd (instructor))) 

在d关系中包含了更加高的工资。

第二步:用所有的工资减去非最高工资,得到最高工资

4   Õsalary (instructor) –
  
Õinstructor.salary (s instructor.salary <d,salary 
                                      
(instructorx rd (instructor)))

②赋值¬

③广义投影

在投影列表中使用算术运算和字符串函数等来对投影进行扩展。例如

ÕID, name, dept_name, salary/12 (instructor)求每月工资

④聚集

可以用distinct附加在函数名后,例如查询2010年春季学期教课的老师数。

Gcount-distinct(ID)(……)

如果要用到groupby功能,例如每个系的平均工资:

dept_name G average(salary)(instructor)   //用dept_name进行分组

⑤删除

删除:r ¬ rE    删除一整个元组

删除所有名称为Perryridge的支行的记录

branch(branch_name,brance_city,assets)

⑥插入

r ¬  r  È  E   E可以是多个元组,可以是一个元组

插入一个账户信息

⑦更新

 


练习示例:

例10中:要求所有Cno都会出现在Course中Cno集合中,剩下Sno的取值集合,再与Student自然连接。好高级!!!

 

关系演算(以数理逻辑为基础)可分为元组关系演算和域关系演算

 

元组关系演算Tuple Relational Calculus

{t | P (t ) }  使谓词P为真的元组t的集合,用t[A]表示元组t在属性A上的值,并用t∈r表示元组t在关系r中。

eg:找出所有工资在80000美元以上的教师ID、name、dept_name和salary

{t|t∈instructorÙ t[salary]>80000}

如果只要ID属性,需要引入数理逻辑“存在”,$ t Î r (Q (t )),表示关系r中存在元组t使谓词Q(t)为真。

eg:找出工资在80000美元以上的所有教师的ID

  {t |$ s Î instructor (t [ID ] = s [ID] Ù s [salary ] > 80000)}

是这样的元组t的集合,在关系instructor中存在元组s,s的salary属性大于80000,同时t和s的ID属性相等。变量t只定义在ID属性上,只有ID属性进行限制,所以得到ID。

 

eg:Find the names of all instructors whose department is in the Watsonbuilding

{t |$s Î instructor (t [name] = s [name ]
     Ù $u Î department (u [dept_name] = s[dept_name]
                         Ù u [building] = “Watson” ))}

变量s保证与t的name值相同,u保证与s的dept_name值相同。

eg:找出在2009秋季学期开设不在2010春季学期开设的课程

{t |$s Î section (t [course_id] = s [course_id ] Ù 
                           s [semester]= “Fall” Ù s [year] = 2009 )
 Ù Ø $u Î section ([course_id ] = u [course_id] Ù 
                           u [semester]= “Spring” Ù u [year] = 2010)}

"t Î r (Q (t ))对关系r中所有的元组t,Q均为真

(完全不懂)

24、域关系演算

{ < x1, x2,…, xn > | P (x1, x2,…, xn)

egFindthe ID, name, dept_name, salary for instructors whose salary is greaterthan $80,000

{< i, n, d, s> |< i, n, d, s> Î instructor Ù s > 80000}}

 


展开阅读全文

没有更多推荐了,返回首页