数据库系统(上)——模型与语言 讨论答案

课程里面讨论的问题都特别有趣,第一章是明确为什么需要学习数据库,为什么学习数据库,学习数据库哪些东西,然后是每章的重要知识点,用于巩固学到的知识,有一个有趣的现象,当你很认真的学完视频并不能完全回答上来这些问题,这就提醒我们要深入的思考,课后利用这些讨论的问题查漏补缺,将学习到的东西转化成自己的。

目录
  • 数据库系统之一 —— 基本知识与关系模型
    • 第1讲 初步认识数据库系统
      • 【1-1】为什么需要数据库?为什么需要学习数据库系统课程?
      • 【1-2】你知道数据库、数据库系统和数据库管理系统的关系吗?
      • 【1-3】你对数据库系统课程的期望是什么?
    • 第2讲 数据库系统的结构抽象与演变
      • 【2-1】结合如“图书管理数据库”谈谈什么是三级模式两层映像?
      • 【2-2】数据、模式和数据模型是一种什么关系?
      • 【2-3】数据库系统是怎样演变的?
    • 第3讲 关系模型之基本概念
      • 【3-1】什么是关系模型?关系模型有什么作用?
      • 【3-2】什么是关系?为什么把表称作关系?
      • 【3-3】为什么要区分实体完整性和参照完整性?
    • 第4讲 关系模型之关系代数
      • 【4-1】关系代数有哪些操作?
      • 【4-2】连接操作都有哪些类型?
      • 【4-3】笛卡儿积究竟是什么?
    • 第5讲 关系模型之关系演算
      • 【5-1】关系演算与关系代数有什么不一样的思维?
      • 【5-2】什么情况下用全称量词,什么情况下用存在量词呢?
      • 【5-3】关系演算为什么不一定是安全的?
  • 数据库系统之二 —— 数据库语言-SQL
    • 第6讲 概览SQL语言
      • 【6-1】SQL语言是怎样借鉴关系代数和元组演算的?
      • 【6-2】如何用SQL语言表达模糊查询?
      • 【6-3】如何表达多表联合查询,需要注意什么?
    • 第7讲 SQL语言之复杂查询与视图
      • 【7-1】你会书写下列查询吗?
      • 【7-2】下列查询结果是什么?
      • 【7-3】这里的视图是什么?
    • 第8讲 SQL语言与数据库完整性和安全性
      • 【8-1】你知道完整性规则四元组的含义吗?
      • 【8-2】你知道都存在哪些完整性吗?
      • 【8-3】你知道安全性规则四元组的含义吗?
    • 第9讲 嵌入式SQL语言之基本技巧
      • 【9-1】高级语言与嵌入式SQL语言交互要解决哪些问题?
      • 【9-2】什么是游标?为什么需要游标?游标是怎样工作的?
      • 【9-3】异常捕获机制有什么特别之处吗?
    • 第10讲 嵌入式SQL语言之动态SQL
      • 【10-1】静态SQL与动态SQL的本质差别在哪里?
      • 【10-2】什么是数据字典?
      • 【10-3】你知道ODBC/JDBC吗?

数据库系统之一 —— 基本知识与关系模型

第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 数据库系统(上):模型与语言 中的讨论内容


本文转载于网络 如有侵权请联系删除

相关文章

  • 一个程序员的正版清单

    使用正版是对我们本身职业的一种尊重,不是吗?好吧,聊点其它的话题,就聊一聊做为一个程序员,你有没有使用盗版软件?我电脑上没有任何盗版,无论是编程工具还是其它软件都是如此,我把它做为自我要求的一个基本。申明我使用的是MacOS系统,这是因为我有时候需要做iOS的开发。不过就算不如此,我也认为:除非是Win特定开发需求,一个程序员最好以MacOS或Linux系统做为自己的主操作系统。正版,开源与免费我主要用的还是开源与免费工具居多,以及极少数付费的工具。开源与免费软件已经足够强大无论是开源的工具,或是有功能限制,也许是其它限制的软件或工具,我们都可以称之为正版软件。接下来我就一一介绍我使用的这些正版的软件或工具。由于我的开发经历几乎包括所有技术方向,意味着无论你从事哪方面的开发,这份清单对你也许都会有所帮助。1.IntelliJIDEACE用途:后端开发IDE简述后端编程人员必备的了,它也是绝对的主流。在我刚毕业的时候,那时候流行的是Eclipse,那时候还有个付费的强大的MyEclipse,就是整合了各种插件。那时候我们基本用的盗版MyEclipse。当然,现在许多人用的是盗版的Inte

  • Sublime 究极技巧2 - 开启Project文件视图,文件检索

    开启project侧边栏:Project->AddFordertoProject找文件:Ctrl+P查找文件找函数:Ctrl+P@操作符(可以是变量名或函数名)模糊匹配:文件#搜索的变量定位到行::行数

  • 程序员的10大成功面试技巧

    我遍览群书,发现关于程序员的面试技巧,好的建议其实并不多。我们也发现,很多很有才华的程序员在面试的时候总是掉链子,这大概是因为他们把大多数时间都用来搞技术开发,而忽略了学习面试技巧的重要性。这何尝不是一种悲剧。有效的面试技巧能让你成功得到工作,即使你对那个领域也并不是非常熟悉。1.给自己写一份非常专业的简历我的建议是,如果你想增加自己的入选机会,那最好还是花点钱制作一份专业的简历。相较于你将来可能得到的巨大收获,这真的只是一个小小的投资。2.研究面试官当我联系程序员来面试的时候,我总是会事先发电子邮件给他,并附上我的名字和博客地址。但是让我惊讶的是,当我给他面试的时候,他竟然对我还是一无所知。再举个正面的例子,我在面试时也碰到过这类开发人员,甚至能对我以前写的一篇博客或者做的教学视频上面的内容侃侃而谈。你说我会推荐哪个?面试官也是人,也会有人性的弱点和特点。DaleCarnegie曾说过,要让别人对你感兴趣,最简单的方法就是你先表达出对对方的兴趣。不管这种方法是否有欠公正,但是如果你想面试成功,那么我建议你事先最好先好好研究一下你应聘的这家公司和面试官(如果知道的话)。当今社会的信息是

  • SQL学习之SQL注入学习总结

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。测试数据库我们本文就以如下数据库作为测试数据库,完成我们的注入分析。相关函数在学习盲注之前,首先要了解一下在sql盲注中所涉及到的函数以及使用方法。mid()---从文本字段中提取字符SELECTMID(column_name,start[,length])FROMtable_name;复制column_name必需。要提取字符的字段。start必需。规定开始位置(起始值是1)。length可选。要返回的字符数。如果省略,则MID()函数返回剩余文本。limit()---返回前几条或者中间某几行数据select*fromtablelimitm,n;复制其中,记录从index0开始,m表示第m条记录,n指第m+1条开始取n条concat、concat_ws、group_concat MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL和concat不同的是,concat_ws函数在执行的时候,不会因为NULL值而返回NUL

  • Python信贷数据处理与初步分析(ZIP解压)

    #!/usr/bin/python #coding=utf-8 ''' @author:lenovo @software:3.6PyCharm @file:8W信贷数据处理.py @time:20170531 @function:Creditdataprocessingandpreliminaryanalysis 信贷数据处理与初步分析 @edition:1.0 ''' #导入模块 from__future__importdivision,print_function importos importpandasaspd importzipfile #设置文件位置文件夹名(本文件为zip) dataset_path='C:\\Users\lenovo\Desktop...\dataset' #设置文件名注意后缀 zip_file_name='loan.zip' #此位置CSV csv_file_name='./loan.csv' defrun_main(): &#

  • 腾讯云云数据库MySQL查询代理规格配置api接口

    1.接口描述接口请求域名:cdb.tencentcloudapi.com。 查询代理规格配置 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:DescribeProxyCustomConf。 Version 是 String 公共参数,本接口取值:2017-03-20。 Region 是 String 公共参数,详见产品支持的地域列表。 InstanceId 是 String 实例ID Offset 否 Integer 分页 Limit 否 Integer 限制 3.输出参数 参数名称 类型 描述 Count Integer 代理配置数注意:此字段可能返回null,表示取不到有效值。 CustomConf

  • 腾讯云验证码公共参数调用方式

    公共参数是用于标识用户和接口签名的参数,如非必要,在每个接口单独的接口文档中不再对这些参数进行说明,但每次请求均需要携带这些参数,才能正常发起请求。 公共参数的具体内容会因您使用的签名方法版本不同而有所差异。 使用签名方法v3的公共参数签名方法v3(有时也称作TC3-HMAC-SHA256)相比签名方法v1(有些文档可能会简称签名方法),更安全,支持更大的请求包,支持POSTJSON格式,性能有一定提升,推荐使用该签名方法计算签名。完整介绍详见签名方法v3。 注意:接口文档中的示例由于目的是展示接口参数用法,简化起见,使用的是签名方法v1GET请求,如果依旧想使用签名方法v1请参考下文章节。 使用签名方法v3时,公共参数需要统一放到HTTPHeader请求头部中,如下表所示: 参数名称 类型 必选 描述 Action String 是 HTTP请求头:X-TC-Action。操作的接口名称。取值参考接口文档中输入参数公共参数Action的说明。例如云服务器的查询实例列表接口,取值为DescribeInstances。 Region String - HTTP请求头:X-

  • 寻找数组中出现次数超过一半的数字

    /* *数组中出现次数超过一半的数字.cpp * *Createdon:2018年4月20日 *Author:soyo */ #include<iostream> usingnamespacestd; intMoreNum(int*p,intlength) { if(p==NULL) returnNULL; intresult=p[0]; inttime=1; for(inti=1;i<length;i++) { if(time==0) { result=p[i]; time=1; } elseif(p[i]==result) time++; else time--; } returnresult; } intmain() { inta[]={1,5,3,5,8,5,5,5,7,5,8}; intnum; num=MoreNum(a,9); cout<<"数组中出现次数超过一半的数字为:"<<num<<endl; intb[]={8,7,3,54}; int*p; p=b; cout<<p[3]<<endl

  • JavaScript-对String,数,数组,日期使用总结

    String使用总结 1.创建字符串 -vars1="aaa";//单引号或双引号都可以 -vars2=newString("aaa"); 2.把字符串转数值 -parseInt(30.05) -parseFloat("4")"4.5"->4.5"4"->4 -Number()和parseFloat()一样 3.字符串转大小写 -转大写str.toUpperCase(); -转小写str.toLowerCase(); 4.获取字符串出现的位置 varstr="abcdefgabc"; -第一个出现的位置 str.indexOf("c"); -最后一个出现的位置 str.lastIndexOf("c"); 5.截取字符串 str.substring(start,?end); 6.替换字符串只会替换第一个 str.replace(old,new); 7.拆分字符串"a,b,c"["a","b","c"] vararr=str.split(","); 数学使用总结 1.获取随机数0-1 Math.random(); 0-100Math.random()*100 0-100整数pa

  • 正交投影矩阵_相机中的透视投影几何——讨论相机中的正交投影

    相机中的透视投影几何——讨论相机中的正交投影,弱透视投影以及透视的一些性质 前言 相机中的成像其本质是从3D实体世界中的物体投影到2D成像平面上,在这个过程中存在着许多投影相关的内容,本文讨论了一些透视投影的内容, 相机的针孔模型 我们曾经在[1]中讨论过关于相机的针孔模型的话题,这里我们要再次提起下这个模型。针孔模型(pinholemodel) 是最简单的可以成像的“设备”,然而其可以精确地得到 透视投影(PerspectiveProjection) 的几何信息,这里所说的透视投影,定义为: 将三维物体的信息映射到二维平面上,称之为透视投影。(Suchamappingfromthreedimensionsontotwodimensionsiscalledperspectiveprojection.)   Fig1.1相机的针孔模型及其透视投影成像。 在针孔模型中,光线通过一个无限小的孔,并且在成像平面上呈现出倒像。呈现出倒像不方便我们的分析,因此我们在分析时通常假设成像平面在焦点之前,距离同样也是焦距(未归一化之前,归一化之后距离就是1了,称

  • sklearn之决策树和随机森林对iris的处理比较

    #Iris鸢尾花数据集是常用的分类实验数据集,由Fisher,1936收集整理。 #是一类多重变量分析的数据集。分为3类,每类50个数据,每个数据包含4个属性。 #可通过4个属性预测鸢尾花属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。   sklearn决策树 fromsklearnimportdatasets,tree importnumpyasnp #载入数据集 iris=datasets.load_iris() iris_data=iris['data'] iris_label=iris['target'] X=np.array(iris_data) Y=np.array(iris_label) #训练 clf=tree.DecisionTreeClassifier(max_depth=5) clf.fit(X,Y) #预测 printclf.predict([[4.1,2.2,2.3,5.4]])     sklearn随机森林 fromsklearnimportdatasets,ensemble imp

  • js - 解决微信环境下,ios软键盘收起后页面空白

    思路:1.判断是否在微信中      2.判断是否在ios中      3.表单元素焦点将页面滚回到顶部 是否是微信环境 isWx(){ letua=navigator.userAgent.toLowerCase();//取得浏览器的userAgent字符串 console.log(ua); if(ua.indexOf("micromessenger")>-1){ returntrue; }else{ returnfalse; } },复制 是否是ios终端 isIos(){ letua=navigator.userAgent.toLowerCase();//取得浏览器的userAgent字符串 console.log(ua); if(ua.indexOf("iphone")>-1||ua.indexOf("ios")>-1){ returntrue; }else{ returnfalse; } },复制 焦点消失滚动到顶部解决留白 //解

  • Django之DRF-- API限速

    什么场景下需要限制访问频次呢?   1)防爬虫:爬虫可能会在短时间内大量的访问服务接口,增加服务器压力   2)对于需要限制访问频次的接口   具体使用配置如下: 1,settings.py加入配置 REST_FRAMEWORK={ 'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination', #限速 'DEFAULT_THROTTLE_CLASSES':( 'rest_framework.throttling.AnonRateThrottle',#匿名限速针对未登录用户的限速,通过IP地址区分用户 'rest_framework.throttling.UserRateThrottle'#登录限速针对已登录用户,通过userid来区分用户 ), 'DEFAULT_THROTTLE_RATES':{ #访问频次单位有:second,minute,hour和day 'anon':'2/minute', 'user':'3/minute' } }复制   2,视图文件加入配置

  • 设计模式解析第二版 课后习题自我解答

    第一章: 1.叙述功能分解中使用的基本方法。 将问题分解成多个功能步骤。 2.导致需求更变的三个原因是什么? 用户对自己需求的看法,会因为与开发人员的讨论,和看到软件新的可能性,而发生变化。 开发人员对用户问题领域的看法,会在开发使该领域自动化的软件的过程中,因为对它更加熟悉而发生变化。 3.我提倡用责任而不是功能来思考。这意味着什么呢?请举一个例子。 每个对象应该自己负责自己,而且应该清除地定义责任。比如学生上课应该知道从上一个教室到下一个教室。 4.给出耦合和内聚的定义,什么是紧耦合? 耦合:两个例程之间联系的紧密程度 内聚:一个例程内部组成部分之间互相的紧密程度。 两个例程之间联系非常紧密。 5.对象接口的目的是什么? 对象的很多方法都将标识为可被其他对象调用。 6.给出类实例的定义。 类的特例(总是一个对象)。类的特殊实例或者实体。每个对象都有自己的状态。 因此同一个类型(类)可以有几个对象。 7.类是一个对象行为的完整定义。这句话说明了对象的哪三个方面? 8.抽象类的作用是什么? 抽象类为我们提供了一种方法,能够给一组相关的类赋予一个名字。 这使我们能够将这一组相关类看成一个

  • 嵌套泛型参数IList&lt;IList&lt;Object&gt;&gt;如何传参

    在调用第三方库的时候,有这么一个泛型参数,如下图:     按照经验,使用两个List嵌套声明变量即可: IList<IList<AnnotatedPoint2D>> outImageGrid2=newList<List<AnnotatedPoint2D>>(); //这里提示编译错误:无法隐式转换。 最后,在stackflow找到一个解决方法: IList<IList<AnnotatedPoint2D>> outImageGrid2=newList<IList<AnnotatedPoint2D>>();  

  • proverif定义密码学算法汇总

      时间:2022/09/11 说明:本文章是汇总自己在阅读proverif相关代码的时候对其中一些定义的密码学算法所进行的汇总   一.级联 来源:https://github.com/purseclab/btmodel_proverif/blob/main/model/ssp.pv (*Concatenationhelperfunctions*) funconcat(bitstring,bitstring):bitstring. funfirst_part(bitstring):bitstring. funlast_part(bitstring):bitstring. equationforallb1:bitstring,b2:bitstring;first_part(concat(b1,b2))=b1. equationforallb1:bitstring,b2:bitstring;last_part(concat(b1,b2))=b2.复制   努力,向上,自律

  • Windows 版本Mongodb 启动

    1、去官网下载windows版本的mongodb进行安装  2、用管理员权限进入cmd,输入mongod--dbpathD:/MongoDBData 注:我配置了环境变量,所以可以直接输入,没有配置的先进入mongodb的安装目录(到bin一层),再输入。 安装目录一般默认是C盘的programfile或者programfile(X86) 3.等待 步骤2输入后会打印日志,如下图 注意红框部分,出现这个算是成功了99%。然后继续等待    到出现黄匡部分,算是彻底好了 4此时在浏览器输入 http://127.0.0.1:27017/,会显示如下信息   5、新增一个cmd窗口输入mongo(有配环境变量)继续后续工作   参考博文 http://blog.csdn.net/wangdan199112/article/details/41694031?locationNum=9

  • 串——BF算法(匹配子串)

        #include<iostream> #include<cstring> usingnamespacestd; #defineMAXLEN255 复制 /* BF算法,匹配子串 */ typedefstruct{ charch[MAXLEN+1]; intlength; }SString; stringStrAssign(SString&S,stringe){ strcpy(S.ch,e.c_str()); S.length=e.length(); for(inti=S.length;i>0;i--){ S.ch[i]=S.ch[i-1]; } return"OK"; } intIndex_BF(SStringS,SStringT){//返回匹配成功的开始位置复制 inti,j; i=j=1; while(i<=S.length&&j<=T.length){ if(S.ch[i]==T.ch[j]){++i;++j;} else { i=i-j+2;j=1; } } if(j&

  • 用Vector作为返回值

    有两种方式,但注意第二章方式,一来效率很低,二来有的编译器会帮你优化掉。参考链接:https://blog.csdn.net/neverever01/article/details/80744148 飞翔的荷兰人 邮箱:fly_cjb@163.com

  • linux12k8s --> 05实战入门

    文章目录 一、优化命令行二、kubernetes带来的变革1、对于开发人员1、对于开发人员的作用 2、对于运维人员1、对于运维人员的作用 三、实战入门k8s中的名称空间(命名空间)1、namespace1、**查看**2、**创建**3、**删除**4、**配置方式** 2、Pod**1、创建并运行**2、**查看pod信息**3、**访问Pod**4、**删除指定Pod****5、配置操作** 3、Label标签1、Label的特点:2、一些常用的Label示例如下1、**命令方式**2、**配置方式** 4、控制器1、deployment(部署长期运行、无状态应用)1、**命令操作**2、**配置操作** 3、deployment详解4、弹性扩容的3种方法5、更新(首先要存在低版本才可以更新)3、回滚 2、DaemonSet(一般用来监控、收集日志)3、扩展 5、Service1、**操作一:创建集群内部可访问的Service**2、**操作二:创建集群外部也可访问的Service**3、**删除Service****4、配置方式**5、扩展(删除默认空间及yam已创

  • 深入理解java虚拟机---java内存区域与内存溢出异常---1内存结构

      本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片、视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cnblogs.com/wengshuhang/p/10073587.html   前言:   毕业后啥也不懂,水了一年,结果现在很多java基础的东西都不会,跳槽时候很艰难,现在开始恶补,首先是jvm--->深入理解java虚拟机(ps:买了半年都没翻过)   写博客的初始目的也只是为了记录一下自己认识到的知识点,而且写过的东西自己也不容易忘,有了博客也方便查看。 第一章是编译jdk,这节我是直接跳过了,我是实在看不进底层c++的实现,要理解的东西太多了,我的小脑袋根本不够用的,而且我认为没有什么实际价值(可以装个B?专门搞这个的大佬可别喷我啊!!!只是对我来说是真的意义不大,就跳过了)。 第二章就是java内存了,现在开始。 首先是我们的内存结构 1、程序计数器:占用很小的空间,主要就是选取下一条需要执行的指令、循环、异常操作等(具体原理不懂=。=) 2、j

相关推荐

推荐阅读