数据库原理笔记(I)

此笔记为《数据库系统概论》第一到第二章笔记,会持续更新。

数据库原理笔记

ch1.数据库系统概述

1.数据模型

分类
  • 网状模型(图)
  • 层次模型(树形结构)
  • 关系模型(二维表)
组成要素
  • 数据结构:研究对象类型的集合。对象:与数据类型、内容、性质有关的对象(物质)、与数据之间联系(物质之间的联系)有关的对象。
  • 数据操作:类型有检索、更新(插入、删除、修改)等。
  • 数据的约束条件(完整约束性):一组完整性规则的集合,需满足实体完整性参照完整性
概念模型

用于信息世界的建模,是现实世界到机器世界的一个中间层次,是数据库设计的有力工具,是数据库设计人员和用户之间进行交流的语言。

信息世界中的基本概念:

实体(Entity):客观存在并可相互区别的事物称为实体。

属性(Attribute):实体所具有的某一特性称为属性,一个实体可以由若干个属性来刻画。如学生可由学号、姓名,性别、系别、入学时间等属性来描述。

(Key):能唯一标识实体的属性集称为码。(一个或多个属性,如学生可以通过学号唯一区分)

(Domain):属性的取值范围称为该属性的域。(如成绩0-100分)

实体型(Entity Type):用实体名及其属性集来抽象和刻画,同类实体称为实体型。如:学生(学号,姓名,性别,出生年….)

实体集(Entity Set):同型实体的集合称为实体集。

联系(Relationship):现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。

如下图所示,有一对一、一对多、多对多的三种关系。实体名(如仓库)用矩形框表示,属性(如联系为库存,其属性为仓库存取零件的数量)用椭圆形表示,联系用菱形框表示,ER图(实体-联系图(Entity Relationship Diagram))用无向边连接。

一个实体转化成一个关系数据库中的一张表,一张表就是一个关系模式,新建表来表示联系。相联系的两个实体的码及自己的属性均作为联系的表的属性。

在这里,指的是仓库号、零件号、库存量。

create table kucun(
	lingjianID int,
    cangkuID int,
    kucun int
)

插入数据:insert into kucun values (1,1,8)

其他步骤如下:

创建表:

create table cangku(
	cangkuID int,
	Cname char(80),
	yy char(90)
)

插入数据:insert into cangku values (1,'dddd','kkk');

修改数据:

update kucun set kucun=kucun-8 where cangkuID=3 and lingjianID=1

还可以通过设置主码primary key使实体不相同。

2.关系模型

相关术语:

关系模式:对关系的描述,一般形式为关系名(属性1,属性2,…,属性n)。如学生(学号,姓名,年龄,性别,系别,年级)。相当于概念模型中的实体型关系(Relation):一个关系对应一张二维表。

元组(Tuple):表中的一行即为一个元组。

属性(Attribute):表中的一列即为一个属性,每一属性都有一个属性名。

主码(Key):表中的某个属性组,它可以唯一确定一个元组。

域(Domain):属性的取值范围。

分量:元组中的一个属性值。

关系模式:对关系的描述,一般形式为关系名(属性1,属性2,…,属性n);如学生(学号,姓名,年龄,性别,系别,年级),相当于概念模型中的实体型。

完整性约束有实体完整性、参照完整性和用户定义的完整性三大类。

特点:

(1)优点:建立在严格的数学概念的基础上;概念单一,实体和联系都用关系表示,数据操作结果为关系;存取路径对用户透明

(2)缺点:存取路径对用户透明导致查询效率往往不如非关系数据模型。为提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的难度。

3.数据库系统结构

概念

型(Type):对某一类数据的结构和属性的说明。(如结构体,创建完不动)

值(Value):是型的一个具体赋值。(经常变化)

模式(schema):是数据库系统中全体数据的逻辑结构和特征的描述,是型。

【例】学生记录

记录型:(学号,姓名,性别,系别,年龄,籍贯)

该记录型的一个记录值:(210201,李明,男,计算机,22,江苏)

数据库系统的三级模式结构

模式(Schema):也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,综合了所有用户的需求,一个数据库只有一个模式。模式是数据库系统模式结构的中间层,与数据的物理存储细节和硬件环境无关,与具体的应用程序、开发工具及高级程序设计语言无关。

外模式(External Schema):也称子模式或用户模式,是数据库用户使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。外模式通常是模式的子集,一个数据库可以有多个外模式。同一外模式可以为某一用户的多个应用系统所使用,但一个应用程序只能使用一个外模式。外模式是保证数据库安全性的一个有力措施,每个用户只能看见和访问所对应的外模式中的数据。

(1)外模式/模式映象:定义了外模式与模式之间的对应关系,每一个外模式都对应一个外模式/模式映象,该映象定义通常包含在各自外模式的描述中。

(2)外模式/模式映象保证了数据的逻辑独立性:当模式改变时,数据库管理员修改有关外模式/模式映象,使外模式保持不变;应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。

内模式(Internal Schema):也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,一个数据库只有一个内模式。

模式/内模式映象保证了数据的物理独立性:当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变,应用程序不受影响,保证了数据与程序的物理独立性,简称数据的物理独立性。

ch2.关系数据库

关系数据语言能够嵌入高级语言中使用,是一种高度非过程化的语言,存取路径的选择由DBMS的优化机制来完成。

1.关系数据结构

概念

域(Domain):是一组具有相同数据类型的值的集合。如整数、实数、介于某个取值范围的整数、指定长度字符串集合等。

(大写字母表示型,小写字母表示值)

笛卡尔积(Cartesian Product):给定一组域 D 1 , D 2 , … , D n D_{1},D_{2},\ldots,D_{n} D1,D2,,Dn,这些域可以相同, D 1 , D 2 , … , D n D_{1},D_{2},\ldots,D_{n} D1,D2,,Dn的笛卡尔积为: D 1 × D 2 × … × D n = { ( d 1 , d 2 , … , d n ) | d i ∈ D i , i = 1 , 2 , … , n } D_{1} \times D_{2} \times \ldots \times D_{n} = \left\{ \left( d_{1},d_{2},\ldots,d_{n} \right) \middle| d_{i} \in D_{i},i = 1,2,\ldots,n \right\} D1×D2××Dn={(d1,d2,,dn)diDi,i=1,2,,n}

元组(Tuple):笛卡尔积中每一个元素 ( d 1 , d 2 , … , d n ) \left( d_{1},d_{2},\ldots,d_{n} \right) (d1,d2,,dn)

分量(Component):笛卡尔积元素 ( d 1 , d 2 , … , d n ) \left( d_{1},d_{2},\ldots,d_{n} \right) (d1,d2,,dn)中的每个值di。

基数(Cardinal number):若 D i D_{i} Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为: M = ∏ i = 1 n m i M = {\prod\limits_{i = 1}^{n}m_{i}} M=i=1nmi.

关系: D 1 × D 2 × … × D n D_{1} \times D_{2} \times \ldots \times D_{n} D1×D2××Dn子集称为域 D 1 , D 2 , … , D n D_{1} , D_{2} , \ldots , D_{n} D1,D2,,Dn上的关系,表示为 R ( D 1 , D 2 , … , D n ) R(D_{1} , D_{2} , \ldots , D_{n}) R(D1,D2,,Dn),其中R为关系名,n是关系的(Degree)。当n=1时为单元关系,n=2时为二元关系。关系中的每个元素是关系中的元组,通常用t表示。关系描述有意义的元组的集合。

属性(Attribute):关系是笛卡尔积的有限子集,所以关系也是一个二维表。关系中不同列可以对应相同的域,为了区分,必须对每列起一个名字,称为属性,n目关系必有n个属性。

候选码(Candidate key):若关系中某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。若候选码包含了关系模式的所有属性,则称该候选码为全码(All-key)。

主码(Primary key):若一个关系有多个候选码,则选定其中的一个就称为主码,主码的诸属性称为主属性,不包含在任何候选码中的属性称为非主属性。在任一候选码中的属性都是主属性。

关系的基本性质

列是同质的:每一列中的分量是同一类型的数据,来自同一域;

不同列可来自同一个域:不同列(属性)要给予不同的属性名;

列的顺序无所谓:列的次序可以任意交换;

任意两个元组不能完全相同:这是由笛卡尔积的性质决定的;

行的顺序无所谓:行的次序可以任意交换;

分量必须取原子值:每一个分量都必须是不可分的数据项。

关系模式(Relation Schema)

对关系的描述。关系模式是型(稳定不变),而关系是值(变化)。

关系模式的形式化表示: R ( U , D , d o m , F ) R(U,D,dom,F) R(U,D,dom,F)

其中:R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,dom为属性向域的映象集合,F为属性间的数据依赖关系集合。

2.关系的完整性

关系模型中包括实体完整性、参照完整性(必须支持,被称作是关系的两个不变性)和用户定义的完整性三类完整性约束。

实体完整性

主属性不能为空

参照完整性
外码(Foreign Key)

设F是关系R的一个或一组属性(属性集),但不是关系R的码。如果F与关系S的主码Ks相对应,则称F是关系R的外码,关系R称为参照关系(Referencing Relation),关系S称为被参照关系(Referenced Relation)或目标关系(Target Relation)。

【注】

  • 关系R和S不一定是不同的关系;
  • 目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上;
  • 外码并不一定要与相应的主码同名。

[例1]学生实体、专业实体以及专业与学生间的一对多联系。

学生(学号,姓名,性别,专业号,年龄)

专业(专业号,专业名)

[例2]学生、课程、学生与课程之间的多对多联系。

学生(学号,姓名,性别,专业号,年龄)

课程(课程号,课程名,学分)

选修(学号,课程号,成绩)

【解释】学号不是选修的码,学号与学生的主码有对应的关系,故学号是选修的外码。课程号同理。

[例3]学生实体及其内部的领导联系(一对多) 。

学生(学号,姓名,性别,专业号,年龄,班长)

参照完整性规则

若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应,则对于R中每个元组在F上的值必须:或者==取空值(F的每个属性值均为空值),或者等于S中某个元组的主码值==。

比如专业号要么取空(还未安排,但因为它是主属性,实际上不能为空),要么是专业这个关系中专业号的某一个。

用户定义的完整性

如设定成绩不能大于100,即可通过grade int check(grade<=100)来进行限制。

3.关系代数

常用的关系代数运算符有集合运算符、专门的关系运算符、算术比较符、逻辑运算符。

集合运算

(1)(Union):设R和S具有相同的目n(两个关系都有n个属性),且相应的属性取自同一个域,则R∪S 仍为n目关系,由属于R或属于S的元组组成。R∪S = { t|t ∈ R∨t ∈S }

(2)(Difference):设R和S具有相同目n,且相应的属性取自同一个域,则R - S仍为n目关系,由属于R而不属于S的所有元组组成。R - S = { t|t∈R∧t ∉S }

(3)(Intersection):设R和S具有相同目n,且相应属性取自同一个域,则R∩S仍为n目关系,由既属于R又属于S的元组组成。R∩S = { t|t∈R∧t ∈S } R∩S = R –(R-S)

(4)广义笛卡尔积(Extended Cartesian Product) :设R为n目关系、k1个元组,S为m目关系、k2个元组,则R×S为n+m列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组,共有k1×k2个元组 R × S = { t r t s ^ | t r ∈ R ∧ t s ∈ S } R×S =\left\{ \hat{t_{r}t_{s}} \middle| t_{r} \in R \land t_{s} \in S \right\} R×S={trts^trRtsS}.

广义笛卡尔积前半部分来自R,后半部分来自S

【例】

在这里插入图片描述在这里插入图片描述

专门的关系运算符

(1) R , t ∈ R , t [ A i ] R,t \in R,t\left\lbrack A_{i} \right\rbrack R,tR,t[Ai] :设关系模式 R ( A 1 , A 2 , … , A n ) R\left( A_{1},A_{2},\ldots,A_{n} \right) R(A1,A2,,An)的一个关系为R。t∈R表示t是R的一个元组, t [ A i ] \left. {t\left\lbrack A \right.}_{i} \right\rbrack t[Ai]则表示元组t中相应于属性 A i A_{i} Ai的一个分量。

(2) A , t [ A ] , A ¯ A,t\left\lbrack A \right\rbrack,\overset{¯}{A} A,t[A],A¯ :若 A = { A i 1 , A i 2 , … , A i k } A = \left\{ A_{i1},A_{i2},\ldots,A_{ik} \right\} A={Ai1,Ai2,,Aik} A i 1 , A i 2 , … , A i k A_{i1},A_{i2},\ldots,A_{ik} Ai1,Ai2,,Aik A 1 , A 2 , … , A n A_{1},A_{2},\ldots,A_{n} A1,A2,,An中的一部分,则A称为属性列或域列。 t [ A ] = ( t [ A i 1 ] , t [ A i 2 ] , … , t [ A i k ] ) t\left\lbrack A \right\rbrack = \left( t\left\lbrack A_{i1} \right\rbrack,t\left\lbrack A_{i2} \right\rbrack,\ldots,t\left\lbrack A_{ik} \right\rbrack \right) t[A]=(t[Ai1],t[Ai2],,t[Aik])表示元组t在属性列A上诸分量的集合 A ¯ \overset{¯}{A} A¯则表示 { A 1 , A 2 , … , A n } \left\{A_{1},A_{2},\ldots,A_{n}\right\} {A1,A2,,An}中去掉 { A i 1 , A i 2 , … , A i k } \left\{ A_{i1},A_{i2},\ldots,A_{ik} \right\} {Ai1,Ai2,,Aik}后剩余的属性组。

(3)元组的连接 t r t s ^ \hat{t_{r}t_{s}} trts^):R为n目关系,S为m目关系。 t r ∈ R t_{r} \in R trR t s ∈ S t_{s} \in S tsS t r t s ^ \hat{t_{r}t_{s}} trts^称为元组的连接。它是一个n + m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。

(4)象集(Images Set) Z x Z_{x} Zx:给定一个关系 R ( X , Z ) R(X,Z) R(X,Z),X和Z为属性组。当 t [ X ] = x t[X]=x t[X]=x时,x在R中的象集为: Z x = { t [ Z ] | t ∈ R , t [ X ] = x } Z_{x} = \left\{ t\left\lbrack Z \right\rbrack \middle| t \in R,t\left\lbrack X \right\rbrack = x \right\} Zx={t[Z]tR,t[X]=x} ,它表示R中属性组X上值为x的诸元组在Z上分量的集合。即:在X上选择满足我设定的值,但取的是Z上各个元组的值。

(5)选择(Selection):是从行的角度进行的运算,在关系R中选择满足给定条件的诸元组,记为 σ F ( R ) = { t | t ∈ R ⋀ F ( t ) = ′ 真 ′ } \sigma_{F}\left( R \right) = \left\{ t \middle| t \in R\bigwedge F\left( t \right) =^{'}真^{'} \right\} σF(R)={ttRF(t)=},其中F是选择运算符,是一个逻辑表达式。

(6)投影(Projection):从R中选择出若干属性列组成新的关系,记为 π A ( R ) = { t [ A ] | t ∈ R } \pi_{A}\left( R \right) = \left\{ t\left\lbrack A \right\rbrack \middle| t \in R \right\} πA(R)={t[A]tR},其中A是R中的属性列。投影操作主要是从的角度进行运算,但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)。如:查询学生的姓名和所在系别,可用语句: π S n a m e , S d e p t ( S t u d e n t ) \pi_{Sname,Sdept}\left( {Student} \right) πSname,Sdept(Student)来完成。

(7)关于连接:

【1】连接(Join):又称θ连接,是从两个关系的笛卡尔积中选取属性间满足一定条件的元组,记为在这里插入图片描述
,其中A和B分别为R和S上度数相等且可比的属性组,θ为比较运算符 。

连接运算从R和S的广义笛卡尔积R×S中选取R关系在A属性组上的值与S关系在B属性组上值满足比较关系的元组。

【2】等值连接(Equijoin):θ为=的连接运算称为等值连接 ,它是从关系R与S的广义笛卡尔积中选取A、B属性值相等的元组:在这里插入图片描述
。等值连接有m+n目关系。

【3】自然连接(Natural join):是一种特殊的等值连接,要求两个关系中进行比较的分量必须是相同的属性组,在结果中把重复的属性列去掉。设R和S具有相同的属性组B,则:在这里插入图片描述

在这里插入图片描述

有关Sql语句:

广义笛卡尔积:select * from student,sc

等值连接:select * from student,sc where student.sno = sc.sno

自然连接:select sname,sc.no,ssex from student,sc where student.sno = sc.sno

(8)(Division):给定关系R(X,Y) 和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:(关系R)元组在X上分量值x的象集 Y x Y_{x} Yx包含S在Y上投影的集合。用数学表示为: R ÷ S = { t r [ X ] | t r ∈ R ∧ π Y ( S ) ⊆ Y x } . R \div S = \left\{ t_{r}\left\lbrack X \right\rbrack \middle| t_{r} \in R \land \pi_{Y}\left( S \right) \subseteq Y_{x} \right\}. R÷S={tr[X]trRπY(S)Yx}.,其中 Y x Y_{x} Yx表示x在R中的象集, x = t r [ X ] x=t_{r}\left\lbrack X \right\rbrack x=tr[X].

在实际操作中的步骤如下:

首先找出两个关系的相同属性列,记为Y,然后看所有X上每个分量值对应的象集是否包含S在相同属性列Y上投影。若有,则属于除后的结果。

如在sc表(包含snocno),course(包含cno和其他课程信息如课程名),执行 s c ÷ c o u r s e sc \div course sc÷course,相同的属性列为cno,那么则是将所有sno对应的象集(即选课编号cno)与coursecno上投影集合进行判断归属关系,那么该运算表示的含义则为所有课都选的同学的学号。又如 s c ÷ s t u d e n t sc \div student sc÷student,相同的属性列为sno,则结果为被所有同学都选的课。又如下面的例子:
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值