课程里面讨论的问题都特别有趣,第一章是明确为什么需要学习数据库,为什么学习数据库,学习数据库哪些东西,然后是每章的重要知识点,用于巩固学到的知识,有一个有趣的现象,当你很认真的学完视频并不能完全回答上来这些问题,这就提醒我们要深入的思考,课后利用这些讨论的问题查漏补缺,将学习到的东西转化成自己的。
目录- 数据库系统之一 —— 基本知识与关系模型
- 数据库系统之二 —— 数据库语言-SQL
数据库系统之一 —— 基本知识与关系模型
第1讲 初步认识数据库系统
【1-1】为什么需要数据库?为什么需要学习数据库系统课程?
当前是互联网与大数据的时代,一切以数据说话,数据库越来越重要。那为什么需要数据库呢?数据库是思维还是技术呢?什么是数据库?数据库与大数据有什么关系?应该怎样学习数据库呢?请你畅想一番并分享给大家。
1.为什么需要数据库?
everything over DB,进入信息化社会所有业务都在数据库的基础上实施。数据库是信息积累与运用的基础:形成“数据库”,实现“积累” ;应用“数据库”, 实现积累的效益; “数据库”的管理与控制。发现数据价值。2.数据库是思维还是技术?
数据库是一种技术,更是一种思维!3.什么是数据库?
数据库是电子化信息的集合。将信息规范化并使之电子化,形成电子信息‘库’,以便利用计算机对这些信息进行快速有效的存储、检索、统计与管理。
相互之间有关联关系的Table的集合。
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。4.数据库与大数据有什么关系?
大数据是基于数据库的应用;大数据建立在数据库之上,数据库支撑大数据。
数据库是一种存放数据的仓库,数据库中的数据积累到一定量,就成了大数据,大数据一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。5.应该怎样学习数据库呢?
学习数据库系统理论配合实战写SQL文练习,在学习理论的时候要记笔记,随时翻阅。
【1-2】你知道数据库、数据库系统和数据库管理系统的关系吗?
视频中专门介绍了数据库、数据库系统与数据库管理系统的概念并做了区分,学习以后,那你知道数据库、数据库系统和数据库管理系统之间的关系吗?请分享你的观点。
数据库系统(DBS)是一个工作环境,它包括数据库(DB)、数据库管理系统(DBMS)、数据库应用(DBAP)、数据库管理员(DBA)和计算机基本系统。
数据库(DB)是相互有关联关系的数据的集合。
数据库管理系统(DBMS)是管理数据库的一套管理系统。
【1-3】你对数据库系统课程的期望是什么?
也许你是因为大数据来学习数据库系统课程,也许你是因为要掌握信息技术来学习数据库系统,也许你是要学习一种思维、一项技术来学习数据库系统。不管什么原因,你选择学习数据库系统,那么你对本课程的期望是什么呢?你想要学习什么内容呢?请分享你的观点。
为了学习数据库的思维,为之后的数据库设计打下基础。
第2讲 数据库系统的结构抽象与演变
【2-1】结合如“图书管理数据库”谈谈什么是三级模式两层映像?
视频中介绍了数据库系统的标准结构—三级模式两层映像。那什么是三级模式两层映像呢?你能否结合一个具体的数据库系统,比如图书管理数据库系统、学生管理数据库系统等,来谈谈什么是三级模式两层映像呢?哪些管理内容对应哪些模式?其作用又是怎样的呢?视频中说其实现了两个独立性,那这两个独立性是指什么?有什么作用?请分享你的观点。
1.结合图书管理数据库系统谈谈什么是三级模式两层映像呢?
三级模式包括:外模式(用户模式)、逻辑模式(概念模式)、内模式(物理模式)。
其中外模式是指用户能够看到与处理的数据的结构描述,例如图书管理员看到的图书借阅记录的表;逻辑模式指从全局角度理解/管理的数据的结构描述,含相应的关联约束,是DBMS中管理的所有表以及他们之间的关联关系,约束关系等;内模式指存储在介质上的数据的结构描述,含存储路径、存储方式、索引方式,例如用于存储数据的的计算机基本系统等。
两层映像:E-C Mapping、C-I Mapping。前者是将外模式映射为概念模式,从而支持实现数据概念视图向外部视图的转换,便于用户观察和使用,也就是从数据库管理系统以表或者视图的形式拿出表,提供应用程序给用户使用。后者是将概念模式映射为内模式,从而支持实现数据概念视图向内部视图的转换,便于计算机进行存储和处理,就像把抽象的模式转化为数据再存储。2.两个独立性是指什么?有什么作用?
逻辑数据独立性:当概念模式发生变化时,可以不改变外模式(只需改变E-C Mapping),从而无需改变应用程序。
物理数据独立性:当内部模式发生变化时,可以不改变概念模式(只需改变C-I Mapping),从而不改变内部模式。
【2-2】数据、模式和数据模型是一种什么关系?
视频中介绍了几个重要的概念:数据、模式和数据模型。请你谈谈数据、模式和数据模型是一种什么关系?什么是模式?什么是数据模型?请分享你的观点。
1.数据、模式和数据模型是一种什么关系?
模式是对数据的抽象,数据结构是对模式的抽象,反过来则是一个具体化的过程,模式是对数据的结构的描述,数据模型是对模式的结构的描述。
2.什么是模式?什么是数据模型?
数据是事物的符号表示。模式是数据库的整体的逻辑结构。数据模型是对现实世界事物及事物的联系的抽象表示。
【2-3】数据库系统是怎样演变的?
视频中介绍了数据库系统的演变,尤其介绍了数据库系统的几个重要发展,那你能否说说从上世纪60年代提出数据库的概念以来,数据库系统是如何演变的呢?现在各行各业都在聚集数据,都在使用数据库,可以说数据库已经是计算领域一项重要的不可或缺的技术,那你能否谈谈都有哪些类型的数据库呢?它们在管理方面有什么异同呢?请你总结一下并分享给大家。
1.数据库系统是如何演变的呢?
由文件系统到数据库,从第一代的层次与网状数据库到第二代的关系数据库再到第三代的面向对象的数据库。数据库从一条一条数据的查询变成了以集合的形式可以多条多条的查询。
数据库技术确立阶段:到60年代中,三大数据库层次、网状及关系数据库相机提出并进行了深入研究;商用数据库出现并应用,但多为网状及层次型系统,关系数据库理论逐渐形成;数据库技术成熟阶段:到70年代,标准化数据库系统结构模型被提出,关系DB系统迅速发展:如SQL、QBE等,关系理论日益完善,包括规范化理论,关系语言,RDB的设计与实现,新型关系模型等,数据可应用已十分普及,渗透到社会各个方面,出现众多DB技术分支,DB走向全面成熟;数据库技术深化发展阶段:85年以来,数据库方法逐步理论化、数据库设计理论不断完善,新型数据模型、专用数据模型,专用型、新型数据库系统,不断涌现,数据库技术+其他计算机技术结合 == 面向各行各业的专用数据库。
2.有哪些类型的数据库呢?
层次数据库、网状数据库、关系数据库、关系对象数据库、面向对象数据库、XML数据库等
第3讲 关系模型之基本概念
【3-1】什么是关系模型?关系模型有什么作用?
E.F.Codd提出了关系模型,并获得了计算机领域的最高奖图灵奖。那什么是关系模型呢?关系模型有什么价值呢?关系模型对数据库系统的发展究竟有什么贡献呢?请分享你的观点。
1.什么是关系模型?
关系模型就是处理table的,她由三个部分组成:
一、描述DB各种数据的基本结构形式(table/relation);
二、描述table与table之间所可能发生的各种操作(关系运算);
三、描述这些操作所应遵循的约束条件(完整性约束)。
2.关系模型有什么价值呢?
关系模型是最重要的一种数据模型,结合关系数据库语言可以实现DBMS。
通过关系模型中的数学描述,用抽象的数学思维指导关系数据可语言的设计,并通过完整性等约束保障DBMS的执行结果的安全性。
3.关系模型对数据库系统的发展究竟有什么贡献呢?
关系模型的建立思维可以用到数据库系统的开发上。开发数据库系统的一般思维:数学描述指导软件设计(设计用户使用的语言或者形式)保障开发的正确性,最终形成软件系统,用户使用语言描述希望的操作—广义的程序,这个程序被软件系统执行,得到结果。
【3-2】什么是关系?为什么把表称作关系?
E.F.Codd用数学的形式严格的定义了什么是“表”,他是怎么定义的?为什么要如此定义呢?通过定义,他把“表”称为了关系,为什么要把“表”称为“关系”? “表”和“关系”真的是完全一样的吗?请分享你的观点。
1.如何用数学的形式严格的定义“表”?
E.F.Codd受到表的启发,用关系来定义表。关系可用R(A1:D1 , A2:D2 , … , An:Dn )表示,可简记为R(A1 , A2 , … , An ),这种描述又被称为关系模式(Schema)或表标题(head) ,其中R是关系的名字, Ai 是属性, Di 是属性所对应的域, n是关系的度或目 (degree), 关系中元组的数目称为关系的基数(Cardinality)
2.为什么要把“表”称为“关系”?
关系是表的概念的抽象。而表中的一条记录称为实体,也就是现实中实际存在的事物或人。表之间的数据具有一一对应的关系,所以也把表称作为关系。
3.“表”和“关系”真的是完全一样的吗?
不一样。理论上,关系的任意两个元组不能完全相同。(集合的要求:集合内不能有相同的两个元素);现实应用中,表(Table)可能并不完全遵守此特性
【3-3】为什么要区分实体完整性和参照完整性?
视频中讲关系模型的三个部分之一就是完整性,包括实体完整性、参照完整性和用户自定义的完整性?那什么是完整性?为什么要保证实体完整性和参照完整性?他们对数据库正确性有什么作用?其中这里又提出了一个候选键的概念,为什么要重视候选键,它的作用是什么?请分享你的观点。
1.什么是完整性?
根据现实世界和理论定义的对关系合法的约束。
2.为什么要保证实体完整性和参照完整性?他们对数据库正确性有什么作用?
实体完整性:关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不容许的。实体完整性是用来唯一标识实体的要求(即现实世界中唯一存在的一个事物、人或个体)。不能为空,需要唯一确认,表示的是这一条记录的实体的完整唯一,通常用主键描述,不能为空且不重复。
参照完整性:参照完整性表示的是两个关系之间的联系,是表与表之间的引用。对应的就是外键,外键约束实现参照完整性。外键要么取空值,要么取引用的表的主键值。如果关系R1的某个元组t1参照 了关系R2的某个元组t2,则t2必须存在;可以为空值,是说明未参照,但是只要参照了另一个关系,就必须在另一个关系中存在。
3.为什么要重视候选键,它的作用是什么?
候选键是指关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了。由此可见它的作用是唯一标识元组,满足关系中元组不重复的定义。
第4讲 关系模型之关系代数
【4-1】关系代数有哪些操作?
关系代数最重要的五个操作是什么?利用这五个操作表达各种查询的基本思路是什么?它是怎样体现集合思维的?请分享你的观点。
1.关系代数最重要的五个操作是什么?
交,差,积,选择,投影。
2.利用这五个操作表达各种查询的基本思路是什么?
“以集合为中心“;“一个集合,施加一个操作得到一个集合,依次施加关系代数操作,进而得到所需结果”。
3.它是怎样体现集合思维的?
我们在进行上述运算时,针对的不是集合中的数据就是集合本身。例如选择和投影操作,就是得到集合中的子集。每个关系里面有个属性是一个集合,一个元组也是一个集合。通过对这些集合的简单操作组合成复杂一点的操作就形成了交、差、积等运算。
【4-2】连接操作都有哪些类型?
视频中讲了若干类型的连接操作,问都有哪些类型的连接操作?这些连接操作的作用是什么,差别是什么?视频中说“连接”操作不是基本的操作,对一个任何的查询,那如果不让你使用连接操作,你应该怎么做呢?请分享你的观点。
1.都有哪些类型的连接操作?
θ-连接(θ-Join):关系R和关系S的笛卡尔积中, 选取R中属性A与S中属性 B之间满足 θ 条件的元组。
等值连接(Equi-Join):是θ-连接的一个特例,当关系R中的属性A的值和关系S中属性B的值相等,可以做等值连接;
自然连接(Natural-Join):是一种特殊的等值连接。当关系R和关系S有相同的属性B,并且他们的值相等才能做自然连接;
外连接(Outer-Join):两个关系R与S进行连接时,如果关系R(或S)中的元组在S(或R)中找不到相匹配的元组,则为了避免该元组信息丢失,从而将该元组与S(或R)中假定存在的全为空值的元组形成连接,放置在结果关系中,这种连接称之为外连接;
左外连接(Left Outer Join):自然连接(或θ-连接) + 左侧表中失配的元组;
右外连接(Right Outer Join):自然连接(或θ-连接) + 右侧表中失配的元;
全外连接(Full Outer Join): 自然连接(或θ-连接) + 两侧表中失配的元组。
2.差别是什么?
一是属性可以相等也可以不相等;二是属性的值可以相等也可以不相等。
选择的属性和值都相等做自然连接;选择不同的属性相同的值做等值连接;选择不同的属性两者的值满足某个条件做θ连接。外连接 = 自然连接 (或θ连接) + 失配的元组(与全空元组形成的连接)
3.对一个任何的查询,那如果不让你使用连接操作,你应该怎么做呢?
第一步做积运算:对两个表进行广义笛卡尔积;第二步做选择运算:从广义笛卡尔积中选取出符合条件 的元组,去重;第三步做投影运算:在选择的列上进行投影操作,得到最终的结果。
【4-3】笛卡儿积究竟是什么?
关系是用“笛卡儿积的子集”来定义的,本讲我们又介绍了关系的笛卡儿积运算?那笛卡尔积究竟是什么呢?定义关系的笛卡儿积与本讲的关系的笛卡儿积运算是一回事吗?你能讲清楚他们的差别吗?请分享你的观点。
1.什么是广义笛卡尔积(Cartesian Product)?
关系R和关系S做广义笛卡尔积的结果是由关系R中的元组与关系S的元组进行所有可能的拼接(或串接)构成。
2.定义关系的笛卡儿积与本讲的关系的笛卡儿积运算是一回事吗?
两者不一样。定义关系的笛卡儿积,自变量的值域是域,域是无限集合。关系也是一个抽象的无限集合。两个关系做笛卡尔积运算,如果关系的自变量确定,那么结果也是确定的。
第5讲 关系模型之关系演算
【5-1】关系演算与关系代数有什么不一样的思维?
你已经学习了关系代数,也学习了关系演算。视频中说这是两种不同的思维,那你能从类似高级语言的层次谈谈,这两种思维有什么差别吗?请分享你的观点。
1.关系代数和关系演算这两种思维有什么差别吗?
关系代数以集合操作作为基础运算。关系演算以谓词演算作为基础运算。
【5-2】什么情况下用全称量词,什么情况下用存在量词呢?
视频中讲了在关系演算中很重要的是两个量词的使用:存在量词和全称量词,你能说说什么情况下用全称量词,什么情况下用存在量词吗?能否举些例子来让其他学友更好地理解这两个量词呢?请分享你的观点。
所有、全部用全称量词,只有、只要用存在量词
【5-3】关系演算为什么不一定是安全的?
视频中讲,关系代数运算是安全的,而关系演算不一定是安全的。那关系演算为什么不一定是安全的?什么是安全的运算?什么是安全的关系演算?视频中又讲三种关系运算是等价的,这是正确的吗?请分享你的观点。
安全运算是指不产生无限关系和无穷验证的运算。
在【非】关系中可能存在无线关系;【存在、所有】关系中可能存在无穷验证。
在一定安全约束条件下,关系演算是安全的,并且三种关系运算是等价的。
数据库系统之二 —— 数据库语言-SQL
第6讲 概览SQL语言
【6-1】SQL语言是怎样借鉴关系代数和元组演算的?
SQL语言有一条SELECT-FROM-WHERE语句,功能非常丰富?问,你能否将SELECT-FROM-WHERE语句,转换成关系代数和元组演算公式吗?或者反过来呢?SQL语言是如何借鉴了关系代数和元组演算语言的?请分享你的观点。
1.你能否将SELECT-FROM-WHERE语句,转换成关系代数和元组演算公式吗?
关系代数:从关系中选择满足where条件中的元组,投影出某些列;
2.SQL语言是如何借鉴了关系代数和元组演算语言的?
SQL是一种介于关系代数与元组演算的结构化查询语言,其功能并不仅仅是查询。从理论上借鉴了多种代数关系,例如并、差、积、选择、投影等,对应在SQL中的DML的多个功能。
【6-2】如何用SQL语言表达模糊查询?
现实中有一类查询就是模糊查询,类似于“查询姓张的”“查询名字中包含一个‘英’字”的,问用SQL语言如何表达模糊查询,请你举出例子?这里的“查询”和百度或谷歌上的“搜索”是否一样,它们有什么不同的,你知道吗,请百度一下,分享你的观点。
1.用SQL语言如何表达模糊查询,请你举出例子?
模糊查询可以用的字符有,1.‘%’:表示任意类型和长度的字符;2.‘_’:表示单个字符,对表达式的字符长度有要求;3.‘[ ]’:表示该范围中的任意一个;4.‘[^ ] ’:表示字符不能被包括在括号中。
2.这里的“查询”和百度或谷歌上的“搜索”是否一样,它们有什么不同的?
sql的模糊查询和百度谷歌上的搜索不一样,谷歌的模糊搜索,举个例子,搜索 画家:毕加索 但是我打错了 写成 画家:比价锁 ,百度还是可以搜出来毕加索的,我理解的是它有一些模糊的字词库,更智能一些.
【6-3】如何表达多表联合查询,需要注意什么?
视频中讲了多表联合查询。以视频中学生表、课程表和选课表为例,如何表达“检索学习了数据库系统课程的所有同学”,请写出其SQL语句。你能否总结一下书写SELECT-FROM-WHERE的规律呢?在书写多表联合查询的过程中,要注意什么?请分享你的观点。
1.如何表达“检索学习了数据库系统课程的所有同学”,请写出其SQL语句?
select sname
from student s, sc,course c
where s.s#=sc.s# and sc.c#=c.c# and c.cname="数据库"
2.你能否总结一下书写SELECT-FROM-WHERE的规律呢?
where 中的连接词要写对,并且清楚where语句针对的是一行数据,也就是元组,这个很重要。
第7讲 SQL语言之复杂查询与视图
【7-1】你会书写下列查询吗?
已知关系模式:S(Sno,Sname,Sclass),C(Cno,Cname,Cteacher),SC(Sno,Cno,Scgrade)。其中,S为学生关系:Sno学号, Sname姓名,Sclass班级; C为课程关系:Cno课程号, Cname课程名, Cteacher任课教师;SC为学生选课关系:Scgrade成绩。你能书写出下列SQL语句吗?这些语句的书写是衡量你是否掌握数据库语言的标志。(1)找出学过“李明”老师讲授课程的所有学生;(2)找出学全了“李明”老师讲授课程的所有学生;(3)找出没学过“李明”老师讲授课程的所有学生;(4)找出没学全“李明”老师讲授课程的所有学生。针对这三个关系,你认为还有什么查询比较难呢,请你出些题目为其他同学?限定这三个关系,能否穷举出所有类别的查询呢,请试一试?
(1) ‘学过’理解为存在
select distinct Sname
from S
where exists (select * from S,C,SC where Cteacher = '李明' and S.Sno = SC.Sno
and SC.Cno = C.Cno)
(2)‘学全了’理解为‘不存在李明老师的课该同学没学过’。‘没学过’理解为‘不存在’
select distinct Sname
from S
where not exists(select * from C where Cteacher = '李明' and not exists (select * from
SC where S.Sno = SC.Sno
and SC.Cno = C.Cno))
(3) ‘没学过’理解为‘不存在’
select distinct Sname
from S
where not exists(select * from C where Cteacher = '李明' S.Sno = SC.Sno
and SC.Cno = C.Cno))
(4)没学全就是学过的减去学全的: (1)-(2),用差except
select distinct Sname
from S
where exists (select * from S,C,SC where Cteacher = '李明' and S.Sno = SC.Sno
and SC.Cno = C.Cno)
except
select distinct Sname
from S
where not exists(select * from C where Cteacher = '李明' and not exists (select * from
SC where S.Sno = SC.Sno
and SC.Cno = C.Cno))
【7-2】下列查询结果是什么?
已知关系模式:S(Sno,Sname,Sclass),C(Cno,Cname,Cteacher),SC(Sno,Cno,Scgrade)。其中,S为学生关系:Sno学号, Sname姓名,Sclass班级; C为课程关系:Cno课程号, Cname课程名, Cteacher任课教师;SC为学生选课关系:Scgrade成绩。
下列查询的结果是什么?
(1)SELECT * FROM SC WHERE Cno= ‘C01’ and Cno= ‘C02’;
(2)SELECT Sno FROM SC SC1, SC SC2 WHERE SC1.Scgrade>SC2.Scgrade;
(3)SELECT Sno FROM SC WHERE Scgrade<60 and count(*)>2;
(4)SELECT Sno, Avg(Scgrade) FROM SC WHERE Scgrade<60 Group by Sno;
请试着回答一下,并分享你的观点。
(1)错误,没有查询结果,因为where语句是针对单个元组,一条一条的遍历。
(2)报错:SQL_ERROR_INFO: "Column 'Sno' in field list is ambiguous"。因为不能识别Sno到底是SC1还是SC2的。
另外'Sno'改成'SC1.Sno'也不对,因为where条件少了SC1.Sno = SC2.Sno,在没有学号的约束下,
①当所有Scgrade的值都相等时,为空集;
②当存在Scgrade中有不相等的值时,可能输出所有学号也可能输出部分学号,而且学号会重复。
(3)错误。count()函数是聚集函数不能用在where子句中,理由见(1).
(4)不及格同学的学号和不及格的课程成绩的平均值
【7-3】这里的视图是什么?
我们在前面介绍了三级模式两层映像的结构,本讲我们介绍了Table和视图。你能说说,视图和三级模式两层映像有什么对应关系吗?有人说“视图就是外模式”,也有人说“视图是外模式再加上外模式到概念模式的映像”,你认为哪种说法正确呢?请说说SQL语言是如何支持三级模式两层映像的?为什么要用视图呢?请试着回答一下,并分享你的观点。
1.视图和三级模式两层映像有什么对应关系吗?
视图对应外模式、table对应模式、存储文件对应内模式。2.SQL语言是如何支持三级模式两层映像的?
(1)SQL语言是如何支持三级模式?
①(DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作,用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束 。
②(DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。
③ 包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。
④ 嵌入式SQL的使用规定。涉及到SQL语句嵌入在宿主语言程序中使用的规则。
3.为什么要用视图呢?
(1)用来进行数据展示和分析。使用视图可以定制用户数据,聚焦特定的数据。
视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
(2)视图可以使程序与数据独立
第8讲 SQL语言与数据库完整性和安全性
【8-1】你知道完整性规则四元组的含义吗?
你知道数据库完整性约束规则如何表达吗?视频中给了一个四元组,这个四元组的含义是什么?SQL语言是如何支持这个四元组表达的规则的实现的?它的表完整性、列完整性和触发器分别实现了这个四元组的哪些内容?请试着回答一下,并分享你的观点。
1.数据库完整性约束规则如何表达?这个四元组的含义是什么?
Integrity Constraint ::= ( O,P,A,R)
O:数据集合:约束的对象?
列、多列(元组)、元组集合
P:谓词条件:什么样的约束?
A:触发条件:什么时候检查?
R:响应动作:不满足时怎么办?
2.SQL语言是如何支持这个四元组表达的规则的实现的?
在A的触发条件下检查约束对象O的P约束,满足时更新不满足拒绝R。
3.它的表完整性、列完整性和触发器分别实现了这个四元组的哪些内容?
Create Table 定义完整性约束,其中Col_constr实现列约束,table_constr实现表约束。另外可以使用断言ASSERTIO还有触发器。
【8-2】你知道都存在哪些完整性吗?
数据库完整性被分成了很多种类型,你知道都有哪些类型的完整性呢?能否举些不同完整性的例子呢?这些完整性,怎样通过SQL语言实现呢?请试着回答一下,并分享你的观点。
1. 数据库完整性被分成了很多种类型,你知道都有哪些类型的完整性呢?
数据库完整性主要包括:实体完整性、参照完整性、用户自定义完整性。
按照约束状态分类有静态约束和动态约束;按照约束来源分类有结构约束和内容约束;按照约束条件分类有域完整性越苏和关系完整性约束。
2. 能否举些不同完整性的例子呢?
域完整性约束条件 :施加于某一列上,对给定列上所要更新的某一候选值是否可以接受进行约束条件判断,这是孤立进行的,比如说主键的设定,自增等完整性约束。
关系完整性约束条件 :施加于关系/table上,对给定table上所要更新的某一候选元组是否可以接受进行约束条件判断,或是对一个关系中的若干元组和另一个关系中的若干元组间的联系是否可以接受进行约束条件判断‘。例如,12<数量*单价<100,数量和单价是列名。
结构约束 :来自于模型的约束,例如函数依赖约束、主键约束(实体完整性)、外键约束(参照完整性),只关心数值相等与否、是否允许空值等;
内容约束 :来自于用户的约束,如用户自定义完整性,关心元组或属性的取值范围。例如Student表的Sage属性值在15岁至40岁之间等。
静态约束 :要求DB在任一时候均应满足的约束;例如Sage在任何时候都应满足大于0而小于150(假定人活最大年龄是150)。
动态约束 :要求DB从一状态变为另一状态时应满足的约束;例如工资只能升,不能降:工资可以是800元,也可以是1000元;可以从800元更改为1000元,但不能从1000元更改为800元。
3. 这些完整性,怎样通过SQL语言实现呢?
实现思想是【O , P ,A ,R】:在A的触发条件下检查约束对象O的P约束,满足时更新不满足拒绝R。
Create Table 定义完整性约束,其中Col_constr实现列约束,table_constr实现表约束。另外可以使用断言ASSERTIO还有触发器。
【8-3】你知道安全性规则四元组的含义吗?
你知道数据库安全性控制规则如何表达吗?视频中给了一个四元组,这个四元组的含义是什么?SQL语言是如何支持这个四元组表达的规则的实现的?在这个过程中视图起什么作用?请试着回答一下,并分享你的观点。
1. 你知道数据库安全性控制规则如何表达吗?
AccessRule ::= ( S, O, t, P)
2. 这个四元组的含义是什么?
S: 请求主体(用户)
O: 访问对象
t: 访问权利
P: 谓词
3. SQL语言是如何支持这个四元组表达的规则的实现的?
S在访问O时根据P的条件拥有t的权利。
{AccessRule}通常存放在数据字典或称系统目录中,构成了所有用户对DB的访问权利;
用户多时,可以按用户组建立访问规则
访问对象可大可小(目标粒度Object granularity):属性/字段、记录/元组、关系、数据库
权利:包括创建、增、删、改、查等
谓词:拥有权利需满足的条件
4. 在这个过程中视图起什么作用?
1)视图是安全性控制的重要手段
2)通过视图可以限制用户对关系中某些数据项的存取
3)通过视图可将数据访问对象与谓词结合起来,限制用户对关系中某些元组的存取
4)用户定义视图后,视图便成为一新的数据对象,参与到存储矩阵与能力表中进行描述
第9讲 嵌入式SQL语言之基本技巧
【9-1】高级语言与嵌入式SQL语言交互要解决哪些问题?
本讲给大家介绍了高级语言与嵌入式SQL语言交互的方法。你能说一说,高级语言与嵌入式 SQL语言交互要解决哪些问题吗(仅从思路上谈即可)?你能否结合你学习过的高级语言,交流一下这个问题呢?请试着回答一下,并分享你的观点。
1.高级语言与嵌入式 SQL语言交互要解决哪些问题吗(仅从思路上谈即可)?
一、级语言要连接数据库、关闭数据库。
二、使用高级语言能把变量传给数据库
三、高级语言写的SQL语句数据库可以执行
四、数据库执行完之后要将结果返回高级语言系统,这个时候需要建立传递关系
五、高级语言要像数据库一样看SQL语句是否执行发生错误,如果有错误需要把错误传递到高级语言系统中
六、出现错误问题要即时回滚然后才能关闭数据库,以此保证事务的一致性。
【9-2】什么是游标?为什么需要游标?游标是怎样工作的?
本节给大家介绍了“游标”。你能说一说,什么是游标?为什么需要游标?游标是怎样工作的吗?高级语言是一条语句一条语句的处理,而SQL语言产生的是集合,二者如何交互呢?请试着回答一下,并分享你的观点。
1.什么是游标?
游标是指向某检索记录集的指针
2.为什么需要游标?
检索多行结果,则需使用游标(Cursor)。通过这个指针的移动,每次读一行,处理一行,再读一行… , 直至 处理完毕
3.游标是怎样工作的?
使用游标(Cursor)需要先定义、再打开(执行)、接着一条接一条处理,最后再关闭。读一行操作是通过Fetch…into语句实现的:每一次Fetch, 都是先向下 移动指针,然后再读取;记录集有结束标识EOF, 用来标记后面已没有记录了。
4.二者如何交互?
ODBC支持的可滚动Cursor标准的游标始终是自开始向结束方向移动的,每fetch一次,向结束方向移动 一次;一条记录只能被访问一次;再次访问该记录只能关闭游标后重新打开,它在应用程序与实际的DBMS之间提供了一种通用接口。使用可滚动游标是可使游标指针在记录集之间灵活移动、使每条记录可以反复被访问。
【9-3】异常捕获机制有什么特别之处吗?
本节给大家介绍了嵌入式SQL语言的异常捕获机制,其中提到了它与正常的程序执行流程是有差异的,你看到了吗,是什么差异呢,这种差异的作用是怎样的呢?什么是SQLCA?它有什么作用呢?请试着回答一下,并分享你的观点。
1.嵌入式SQL语言的异常捕获机制与正常的程序执行流程的差异?
状态捕获语句Whenever的作用范围是其后的所有Exec SQL语句,一直到程序中出现另一条相同条件的Whenever语句为止,后面的将覆盖前面的;状态捕获语句Whenever的使用容易引发无限循环
2.什么是SQLCA?具有什么作用呢?
SQLCA是一个已被声明过的具C语言的结构形式的内存信息区,其中的成员变量用来记录SQL语句执行的状态,便于宿主程序读取与处理 ;SQLCA是DBMS(执行SQL语句)与宿主程序之间交流的桥梁之一
第10讲 嵌入式SQL语言之动态SQL
【10-1】静态SQL与动态SQL的本质差别在哪里?
A01-A04节给大家介绍了动态SQL。你能说一说,静态SQL和动态SQL的本质差别在哪里吗?构造动态SQL语句需要注意什么呢,请你归纳一下,分享给大家。
1.静态SQL和动态SQL的本质差别在哪里吗?
静态SQL,在编译阶段就可以确定数据库要做什么事情,而动态SQL语句可以在程序中动态构造,形成一个字符串,然后再交给DBMS执行,交给DBMS执行时仍旧可以传递变量。
静态 SQL:静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的。静态 SQL 语句的编译是在应用程序运行前进行的,编译的结果会存储在数据库内部。而后程序运行时,数据库将直接执行编译好的 SQL 语句,降低运行时的开销。
动态 SQL:动态 SQL 语句是在应用程序运行时被编译和执行的,例如,使用 DB2 的交互式工具 CLP 访问数据库时,用户输入的 SQL 语句是不确定的,因此 SQL 语句只能被动态地编译。动态 SQL 的应用较多,常见的 CLI 和 JDBC 应用程序都使用动态 SQL。
另外还要注意一点,在SQL中如果某些参数没有确定,如"select * from t1 where c1>? and c2<?",这种语句是静态SQL,不是动态SQL,虽然个别参数的值不知道,但整个SQL的结构已经确定,数据库是可以将它编译的,在执行阶段只需将个别参数的值补充进来即可。
【10-2】什么是数据字典?
本节给大家介绍了数据字典。什么是数据字典?数据字典有什么作用?你知道数据字典存储在哪里吗?你知道怎么样使用数据字典吗?高级语言中怎样利用数据字典的信息呢?你能检索一下SQLDA是请试着回答一下,并分享你的观点。
1.什么是数据字典?
数据字典(Data dictionary),又称为系统目录(System Catalogs)
一、是系统维护的一些表或视图的集合,这些表或视图存储了数据库中各类对象的定义信息,这些对象包括用Create语句定义的表、列、索引、视图、权 限、约束等,这些信息又称数据库的元数据--关于数据的数据。
二、不同DBMS术语不一样:数据字典(DataDictionary(Oracle))、目录表(DB2 UDB)、系统目录(INFORMIX)、系统视图(X/Open)
三、不同DBMS中系统目录存储方式可能是不同的,但会有一些信息对DBA公开。这些公开的信息,DBA可以使用一些特殊的SQL命令来检索。
2.数据字典有什么作用?
DBA通过数据字典指定系统目录的内容构成、含义和作用;应用程序员构造动态SQL可能需要知道数据字典中的信息;数据库管理系统实现算法需要用到数据字典中的信息
3.你知道数据字典存储在哪里吗?
不同DBMS中系统目录存储方式可能是不同的,但会有一些信息对DBA公 开。这些公开的信息,DBA可以使用一些特殊的SQL命令来检索;DBA要熟悉 DBMS的各种检索 系统目录的命令
4.你知道怎么样使用数据字典吗?
可以使用SQL语句来访问这些表中的信息: Select Column_Name From ALL_TAB_Columns Where Table_Name = ‘STUDENT’
5.高级语言中怎样利用数据字典的信息呢?
高级语言中构造复杂的动态SQL时,需要了解数据字典及SQLDA
【10-3】你知道ODBC/JDBC吗?
A07-A09节给大家介绍了ODBC/JDBC。你知道ODBC/JDBC吗?ODBC/JDBC帮我们解决了什么问题?它是怎样解决的?ODBC/JDBC和嵌入式SQL语言在解决高级语言和SQL语言交互方面的思路一样吗?有什么异同呢?请试着回答一下,并分享你的观点。
1.ODBC/JDBC是什么?
ODBC是一种标准---不同语言的应用程序与不同数据库服务器之间通讯的标准.一组API(应用程序接口),支持应用程序与数据库服务器的交互。
一、应用程序通过调用ODBC API, 实现与数据服务器的连接
二、向数据库服务器发送SQL命令 。一条一条的提取数据库检索结果中的元组传递给应用程序的变量 ;具体的DBMS提供一套驱动程序,即Driver库函数,供ODBC调用,以便实现数据库与应用程序的连接。
三、ODBC可以配合很多高级语言来使用,如C,C++, C#, Visual Basic, Power-Builder等等
2.ODBC/JDBC帮我们解决了什么问题?
应用程序通过ODBC与数据库服务器进行通讯。
3.它是怎样解决的?
应用程序使用SQLExecDirect()向数据库发送SQL命令; 使用SQLFetch()获取产生的结果元组; 使用SQLBindCol()绑定C语言变量与结果中的属性 。当获取一个元组时,属性值会自动地传送到相应的C语言变量中 ;SQLBindCol()的参数: ODBC定义的stmt变量,查询结果中的属性位置 ;SQL到C的类型变换,变量的地址。对于类似字符数组一样的可变长度类型,应给出:一、变量的最大长度;二、当获取到一个元组后,实际长度的存储位置;三、注:当返回实际长度为负数,说明是一个空值。
4.ODBC/JDBC和嵌入式SQL语言在解决高级语言和SQL语言交互方面的思路一样吗?有什么异同呢?
ODBC的思路:建立数据库连接、分配语句句柄、用句柄执行SQL、建立语言变量与句柄属性的对应、获取一条条记录、释放语句句柄、断开数据库连接;
JDBC的思路:建立数据库连接、创建语句对象、用语句对象执行SQL,并返回结果对象、从结果对象获取一条条的记录、提取对象的属性值传给高级语言变量、释放语句对象、断开数据库连接;
嵌入式SQL语言的思路:建立数据库连接、声明一个游标、打开游标、获取一条记录(直到记录获取完毕)、关闭游标、断开数据库连接。
注意:以上答案仅是我个人的想法,不代表正确答案。
问题来自:中国大学MOOC 数据库系统(上):模型与语言 中的讨论内容
标签:关系,数据库,视图,元组,完整性,答案,SQL,数据库系统,模型 From: https://www.cnblogs.com/chengyj/p/17066699.html