Lecture1-2

数据库是一个存储和处理数据(任何类型的信息)的系统。
数据库引擎可以对数据库中的信息进行排序、更改和保存。

数据库 The Database

一个由逻辑上相关的数据及其描述组成的共享集合,旨在满足一个组织的信息需求。
可能是大型的数据储存库–由许多部门和用户同时使用

逻辑相关 “logically related”

当我们分析一个组织的信息需求时,我们试图确定实体、属性和关系。
实体entity: 是在数据库中表示的组织中的一个独特的对象(一个人,地方,概念或事件)
属性attribute:是描述我们希望记录的对象的某些方面的属性
关系relationship:实体之间的联系

The Database Management System (DBMS)

一种软件系统,使用户能够定义、创建、维护和控制对数据库的访问
它允许用户定义数据库,通常是通过数据定义语言(DDL:Data Definition Language)

它允许用户插入、更新、删除和检索数据库中的数据,通常通过数据操作语言、
(DML:Data Manipulation Language)

拥有一个用于所有数据和数据描述的中央存储库允许DML为这些数据提供一个通用的查询工具,称为查询语言。
最常见的查询语言是结构化查询语言(SQL:Structured Query Language)

数据库管理系统的三层/模式体系结构 Three Level/Schema Architecture of a DBMS

概念层面Conceptual Level :
概念级有一个概念模式,它为用户群体描述了整个数据库的结构。概念模式隐藏了物理存储结构的细节,集中于描述实体、数据类型、关系、用户操作和约束。

可以认为,就是为了用户的方便而设置的层次

内部层面Internal level:
数据库在计算机上的物理表现。这一层次描述了数据是如何存储在数据库中的。数据结构,数据记录的组织,等等。

就是给机器看的,用户一般不会涉及这个层面
存储数据库Stored Database:
物理计算机磁盘上的内部级别和概念级别的组合。
已经完全是硬件的模样了

Data Definition Language (DDL)

一种允许DBA或用户描述和命名应用程序所需的实体、属性和关系的语言,以及任何相关的完整性和安全约束

A language that allows the DBA or user to describe and name the entities, attributes, and relationships required for the application, together with any associated integrity and security constraints.

DDL用于定义模式或修改现有模式。它不能用于操作数据
它不能用于操作数据
它不能用于操作数据!

Data Manipulation Language (DML)

操作数据的语言来了

一种语言,提供一组操作,以支持对数据库中保存的数据的基本数据操作

A language that provides a set of operations to support the basic data manipulation operations on the data held in the database.

一般而言,数据操作通常包括:
1.将新数据插入数据库;
2.修改数据库中存储的数据;
3.检索数据库中包含的数据;
4.从数据库中删除数据

DML中涉及数据检索或数据操作的部分被称为查询语言query language

数据建模和概念建模 Data Modelling and Conceptual Modelling

数据模型Data Model : 用于描述和操作数据、数据之间的关系以及对组织或项目中的数据的约束的概念的集成集合。

一个模型是对现实世界中的对象和事件及其关联的表示

概念模型独立于所有实现细节,而逻辑模型假定了解目标DBMS的底层数据模型

它是一个抽象的概念,集中在一个组织的基本的、固有的方面,而忽略了偶然的属性。
数据模型的目的是表示数据并使数据易于理解

一个数据模型由下面几个方面构成:
a.一种结构部件 a structural part,由一组规则组成,根据这些规则可以构造数据库
b.一个操作部件 a manipulative part,,定义允许对数据执行的操作类型(包括用于更新或检索数据库数据以及更改数据库结构的操作)
c.一组完整性约束 a set of integrity constraints,确保数据的准确性

数据库管理系统的功能

1:DBMS:数据存储、检索和更新 Data storage, retrieval, and update
DBMS必须为用户提供在数据库中存储、检索和更新数据的能力

这是DBMS的基本功能

2:DBMS:用户可访问的目录 A user-accessible catalog
DBMS必须提供一个目录,其中存储数据项的描述,并且用户可以访问该目录。

3:DBMS: 交易支持 Transaction support
DBMS必须提供一种机制,以确保与给定事务对应的所有更新都已完成,或者没有更新。

如果交易在执行过程中失败了,也许是因为计算机崩溃,数据库将处于不一致的状态:一些更改已经完成,而另一些则没有

4:DBMS:并发控制服务 Concurrency control services
当多个用户同时更新数据库时,DBMS必须提供一种机制,以确保数据库正确更新。

5:DBMS:恢复服务 Recovery Services
DBMS必须提供一种机制,以便在数据库以任何方式受损时恢复数据库。

如果服务失败,则必须将数据库返回到一致状态

此故障可能是系统崩溃、媒体故障、导致DBMS停止的硬件或软件错误造成的,也可能是用户在事务期间检测到错误并在事务完成前中止事务造成的

6:DBMS:授权服务 Authorization Services
DBMS必须提供一种机制,以确保只有授权用户才能访问数据库。

我们不难设想,在一些情况下,我们希望防止数据库中的一些数据被所有用户看到。

7:DBMS:通信服务 CommunicationServices
一个DBMS必须能够与通信软件集成。

8:DBMS:数据库完整性 Database Integrity
DBMS必须提供一种方法,以确保数据库中的数据和对数据的更改遵循某些规则。

“数据库完整性”是指存储数据的正确性和一致性:可以将其视为另一种数据库保护。

尽管完整性与安全性相关,但它有更广泛的含义:完整性与数据本身的质量有关。完整性通常用约束表示,约束是数据库不允许违反的一致性规则

https://www.icourse163.org/course/BNU-1002842007?tid=1461106442

9:DBMS:促进数据独立性的服务 Services to promote data independence
一个DBMS必须包括支持程序独立于数据库实际结构的设施。

10:DBMS:实用程序服务 Utility Services
DBMS应提供一组实用程序服务。

SQL

SQL使得在大型数据库中搜索模式成为可能,SQL经过优化以搜索,并在最快的时间内搜索和查找与查询匹配的模式

Lecture 3-4

Lecture 3 Structured Query Language (SQL)

SQL:Structured Query Language 结构化查询语言

前言

到现在为止。我们讨论了如何建模和安排数据库中的数据
那么我们应该·如何从数据库中插入、删除、修改或选择数据
那么我们就可以使用SQL语言来做这件事

SQL

我们可以使用SQL:
1.在数据库中创建和删除表
2.检索和更新表中的数据

这些操作分别被称为数据定义语言 Data Definition Language (DDL) statements
以及数据操作语言 Data Manipulation Language(DML) statements

DDL

DDL允许用户定义新表和相关的元素
大多数商业SQL数据库在其DDL的专有扩展,允许控制数据库系统的非标准功能
对DDL说,有四种最基本的语句:
CREATE:在数据库中创建对象
ALTER:允许用户以各种方式修改现有对象(例如在现有表格中增加一列)
RENAME:顾名思义rename
TRUNCATE:删除一个表中的所有数据(非标准但常见)
DROP:使数据库中的现有对象被删除,通常是无法恢复的

DML

常见操作包括:
SELECT:查询数据库中的数据
INSERT:向表中插入数据
UPDATE:更新表中的数据
DELETE:从表中删除数据

CODING:Create

我们可以用下面的语句创建表:
CREATE TABLE


([(<size)]<column constraint),

-);

这部分有机会的话还是看专门的去学吧

:指的是表的名称,它必须是一个字母数字标识符
:是属性(列的名字),也必须是一个字母数字标识符

:代表了表的类型,有以下几种比较常见的类型:
INTEGER:整数。可以指定最大位数
DECIMAL:还可以都指定最大小数位数,比如DECIMAL(4,3)代表四位整数三位小数
REAL:实数
BIT:bit 字符串
DATE:日期
TIME:24小时时间
TIMESTAMP:date+time,日期加时间
CHAR:固定大小的字符串,必须指定最大大小
VARCHAR:可变尺寸的字符串或文本

用于指定性质的属性(used to specify a property of an attribute),可能是以下几种之一:
UNIQUE:代表column value 必须是唯一的,和该类在的其它值不同,常用于key
NOT NULL:不能包含NULL值
PRIMARY KEY:代表这个attribute是primary key的一部分
REFERENCES

:此属性是外键forign key的一部分,此时必须给出另外一个表的名称

外键:代表其它表中的主键

DEFAULT:如果在插入或更新元组期间未指定值,将这个值运用
CHECK:检查在修改或插入此属性值时是否满足条件,例如,我们希望每个恒星的年龄介于0到200之间

这是一种指定键的替代方法
PRIMARY KEY()
FOREIGN KEY () REFERENCES

示例
比如我们想要创建一个代表的表,包含四列:lastName,FirstNmae,Address,Age
对应的类型是,varcher,varcher,varchar,integer

1
2
CREATE TABLE Person( LastNamevarchar(30), FirstNamevarchar(10), Address varchar, Age integer)   
CREATE TABLE <表名>( 列名 列名 数据类型 数据类型)

CODING:Select

我们可以利用Select,对数据库进行关系限制relational restrict,项目projrct,连接操作join operation

Select语句用于从表中选择数据。表格结果存储在结果表中(称为结果集 result-set)

–SELECT column_name(s) FROM table_name;

注意,SQL语句不区分大小写,SELECT与select相同

比如我们想要从 叫”Persons”的表里面,得到”FirstName”和”Lastname”这样的列的内容,使用下面这条语句:
SELECT LastName, FirstNameFROM Persons;

想要选取所有列,我们可以用星号来代替列名,获得所有列,比如:
SELECT * FROM Persons;
SQL的查询结果,被存储在一个结果集result-set里面

更多例子详见PPT

如果我们想要进一步限制返回的数据,我们可以使用WHERE关键词

有的时候我们想要限制检索的行,就使用WHERE
COMPARISON:将一个表达式的值和另外一个表达的值进行比较
RANGE:测试表达式的值是否在指定的值范围内
SET MEMBERSHIP:测试表达式的值是否等于一组值
PATTERN MATCH:测试字符串是否匹配指定的模式
NULL:测试列中是否具有NULL值

在SQL中,一样可以使用其它语言那些=,<,>!=等比较符号

SELECT Student_No, Student_NameFROM STUDENTWHERE year = 2;
这样的语句可以为我们从表中检索到 year = 2的数据

Select studentname,studentid, studentyobfrom Student where studentyob< 1990
选择1990年以前出生的所有学生

Same,我们也可以使用AND&&,OR||,NOT!来进行条件的添加

另外,查询字符串STRING或者字符VARCHAR时,需要使用引号

小结

SQL对于我们查询数据库中的数据来说是一个非常强大的工具

SQL是一种语言,它非常强大,我们将在下一讲中看到,我们可以做更复杂的查询类型

SQL对于保留字,表名,属性不区分大小写
但是对字符串数据的内容,区分大小写。比如’Fiona’和’FIONA’

Lecture 4

一些操作

Count:计算结果集中的函数

Count(*) 适用于任何表——它用于计算 ResultSet 中的行数

比如我们现在想要计算一次比赛中,足球队伍的总数,我们可以写:
select count(*) from footballteam

ORDER BY:排序方式
ORDER BY位于SQL语句的末尾,当我们使用它的时候,会尝试对结果进行一次排序

比如我们现在想要按照团队名称的升序进行排序
```select teamname,stadiumcap from footballteam where (stadiumcap> 40000) ORDER BY teamname asc``

asc表示我们期望的排序是升序
desc表示我们期望的排序是降序

=‘XXXX’:字符串搜索
我们同样可以利用字符串搜索数据,不过注意:这是非常严格
比如,我们想知道哪些球队使用Adidas作为球衣
select teamname,shirtmaker from footballteam where (shirtmaker= 'Addiddas') order by teamname desc
还记得lecture3的说明吗,这里的大小写是严格的

意思是 ‘Adidas’和 ‘Adidas’不一样

模式匹配 PATTERN MATCHING

对我们来说,能够进行更复杂的字符串匹配是非常有用的,这样我们就可以对数据库中的数据进行更复杂的搜索

我们使用一种叫做模式匹配的技术 PATTERN MATCHING

LIKE

SQL 中的 LIKE 操作符(更具体地说是在 PostgreSQL 中)允许我们进行模式匹配
这就是SQL可以开始执行分析或查询的地方,而我们人类无法很快完成这些分析或查询

比如,我们现在想知道“哪些球队的经理的名字以字母 A 开头”,我们可以写下:
select teamname,managerfrom footballteam where (manager LIKE 'A%')

‘A%’是什么?意思是——返回所有第一个字符为大写字母A的字符串

这里的百分号%表示,字符串剩下的内容(AXXXXX中的XXXXX)

同理,如果我们想知道“哪支球队有以“体育场”结尾的正式体育场名称”

select teamname,stadiumname from footballtea mwhere (stadiumname LIKE '%Stadium')

“哪些球队的名字中出现了”sea”的地方?”
select teamname,stadiumname from footballteam where (teamname LIKE '%sea%')

另外,% 运算符也匹配空格和标点符号

or运算也同样可以被用于这种情况:
select teamname,stadiumname,manager from footballteam where (teamnameLIKE '%sea%') or (manager LIKE '%es')

lecture 5

Entity Relationship Modelling 实体关系建模

假设您被要求设计一个简单但健壮的数据库来记录欧洲内所有乘客采取的航班。这是航空旅行统计所必需的。数据库还应存储哪个航空公司提供或交付了航班

您应该仔细概述此数据模型的实体、关系和属性。您还应该概述关系模式

复合属性与简单属性 Composite versus Simple Attributes

不会再被分的属性被称为简单属性或者原子属性simple or atomic attributes

复合属性可以形成层次机构,比如说 街道地址可以进一步细分为三个简单的组件属性(号码、街道和公寓号码)

单值属性与多值属性 Single-Valued versus Multivalued Attributes

大多数属性对于特定实体具有单一值,这类属性被称为单值属性。比如说,年龄就是一个人的单值属性

一些属性,对于某个实体来说可以有多个数值。这些属性就被我们称为多值属性。比如,一个人的大学学位,可能是没有,一个,两个甚至更多
多值属性可能有下限和上限,以此来限制每个单独实体允许的值的数量

存储属性与派生属性 Stored versus Derived Attributes

某些情况下,两个(甚至多个)属性的属性值是相关的,比如一个人的Age和BirthDate属性。
这种情况下下,年龄是可以从出生日期推断出来的,即可以从生日属性派生,则称Age为派生属性,BirthDate为存储属性

空值 NULL Values

1.在某些情况下,特定实体可能没有适用的属性值
2.如果我们不知道特定实体的属性值,也可以使用 NULL

NULL的未知类别可以进一步分为两种情况:
1.第一种情况出现在已知属性值存在但缺失时——例如,如果一个人的 Height 属性被列为 NULL
2.第二种情况出现在不知道属性值是否存在时——例如,如果一个人的 Home_phone 属性为 NULL

关系模式 Relational Schema

我们已经使用的符号通常称为“关系模式 RelationalSchema”
有的时候,它会比画表简单、清晰 比如:

1
2
3
–customer (name, number, street)
–loan (number, amount)
–branch (name, city, assets)

此时,我们还必须考虑一个重要的概念,称为关系的基数比 CARDINALITY ratioof

Cardinality Ratios for Binary Relationships

二进制关系的基数比率指定实体可以参与的最大关系实例数

The cardinality ratio for a binary relationship specifies the maximum number of relationship instances that an entity can participate in.
比如说,公司和工人的WORKS_FOR二元关系可以是:
DEPARTMENT:EMPLOYEE 它的基数比是 1:N

二元关系类型的可能基数比为 1:1、1:N、N:1 和 M:N

(停在17页)

键 Key

我们可以引入键的概念来辅助我们

SuperKey

SuperKey是实体集的唯一标识符
一组由一个或多个属性组成的集合允许我们唯一地标识实体集中的实体

候选密钥

用于标识元组的候选键,它们是最小超键(SuperKey),它们具有以下特点:
1.独一无二:没有两个元组包含相同的候选密钥
2.不可约Irreducible:我们不能用候选密钥的某个子集来代替它
3.一个实体集可能拥有多个候选密钥
(因此我们需要单独使用 Customer#,而不是{Customer#,Name})

主键 PrimaryKey

主键是数据库设计器选择的候选键,对于一个实体entity/关系集relationship set 的标识符

若存在多个候选密钥,则选择是任意的
在ER图中绘制为带下划线的属性
任何剩余的候选密钥被称为”备用密钥”

外键 Foreign Keys

外键指的是一个实体集中的属性,在其它实体中作键

外键表示您是另一个表或另一个实体集中的主键或候选键

(这之后的笔记主要只记录SQL相关部分)

Lecture 6

SQL操作

利用这样的搜索,显然我们的搜索是有限的
只有某些模式我们能够匹配

本质上我们只能匹配开头/中间/结尾之一

让我们利用正则表达式来辅助搜索

正则表达式

在这里,我们已经将正则表达式编写为了字符串中的一组规则
任何带有 % 的都是正则表达式(如前文复习的例子)
正则表达式大同小异,我们参照下面这张图即可:

比方说我们想在列表中寻找两个连在一起的r:
SELECT * form Lectrue6 WHERE Owner SIMILAR TO '%r{2}%'
关键词是SIMILAR TO 以及’’中所写的正则表达式

Eg2:寻找两个或以上连在一起的’o’的姓
SELECT * form Lectrue6 WHERE Owner SIMILAR TO '5 %o{2,}%'

eg3:寻找一共有五个字母的,以y结尾的名字
SELECT * from Lecture6 WHERE Owner SIMILAR TO '____y %'
其中有四个下划线,代表需要填补四个位置

或运算依旧适用,比如我们想要查找GAP/DAN/POW/CORE中任一:
SELECT * from Lecture6 where BitcoinaddressSIMILAR TO '%(GAP|DAN|POW|CORE)%';

注意|以及括号(),括号意味着这一系列查找词是在一起的

正则表达式特殊字符

列间操作

我们可以对列进行算术计算(如果它们是数字数据类型)

计算符:power(A,x) log(x) sqrt(x) abs(x)
可以参照:https://www.postgresql.org/docs/9.6/functions-math.html