of {$slidecount} ½ {$title} ATZJG.NET {$author}

首页






数据库系统基础教程
A First Course in Database systems


Haifeng Xu


(hfxu@yzu.edu.cn)

This slide is based on Jeffrey D. Ullman's work, which can be download from his website.

目录

数据库

数据库

数据库对于当今的任何部门都是至关重要的. 无论何时访问一个主要的网站, 总有一个数据库在幕后服务, 提供你所需要的信息.

数据库管理系统(DBMS)

DBMS--(DataBase Manage System)

数据库就是信息的集合. 一般来讲, "数据库"这个词指的是由数据库管理系统管理的数据的集合.

数据库管理系统将满足

  1. 允许用户使用专门的数据定义语言来创建新的数据库并指定模式(也就是数据的逻辑结构)
  2. 给予用户使用适当的语言来查询数据和修改数据的能力. 这种语言通常称为查询语言(query language)数据操纵语言(data-manipulation language)
  3. 支持对非常大量的数据(TB级甚至更多)长期存储, 允许高效地存取数据以进行查询和修改其中的数据.
  4. 使数据具有持久性(durability), 即能够从故障、多种类型的错误或者故意滥用中恢复.
  5. 控制多个用户同时对数据进行访问, 不允许用户间有不恰当的相互影响(称作孤立性(isolation)), 并且不会发生在数据上进行了部分的而不是完整的操作的情况(称作原子性(atomicity)).

DBMS 有两个不同的命令来源:

课程内容

课程内容

Do you know SQL

解释下面两组语句的区别

SELECT b
FROM R
WHERE a < 10 OR a >= 10;
SELECT b
FROM R;
R
a b
5 20
10 30
20 40
$\ldots$ $\ldots$
 

第一组SQL语句意思为, 从关系 R 中找出所有 a 字段非空(即 a!=NULL) 的元组, 并只取出 b 字段的值.

第二组SQL语句不能排除 a 字段为 NULL 的元组, 它将所有的都列出来.

And how about these?

下面两组语句呢?

SELECT a
FROM R, S
WHERE R.b = S.b;
SELECT a
FROM R
WHERE b IN (SELECT b FROM S);

这两个查询本质上是一样的, 不同之处在于第二个用到了子查询, 不会出现结果中元组重复的问题.

course requirements

实验

项目

What is data model?

什么是数据模型(data model)

数据模型是用于描述数据或信息的标记. 它一般由三部分组成:

  1. 数据结构(structure of the data)
  2. 很多编程语言, 如 C/C++, Java 等, 都有数组、对象等用来描述程序中数据的结构.

  3. 数据操作(operation on the data)
  4. 编程语言中, 在数据上的任何处理都可以称为数据操作.

    但在数据库数据模型中, 只能在数据上附加一些有限的可执行的操作集. 如

    通过这些约束操作, 开发者就有可能在一个较高层次上对数据库操作进行描述, 从而使得数据库管理系统(DBMS)能够更有效地执行这些操作.

  5. 数据上的约束(constraint on the data)

一些重要的数据模型

数据库系统中两种非常重要而且比较优秀的的数据模型是:

关系数据模型, 包括对象关系模型的扩展

半结构化数据模型, 包括 XML 和相关的标准

关系模型与表

关系模型是一种基于表的数据模型

Beers
name manf
Winterbrew Pete's
Bud Lite Anheuser-Busch

Beers 就是关系名, name 和 manf 是属性名, 每一行称为元组(tuple), 或记录(record).

模式(schemas)

关系模式(relation schema)

关系模式指关系名连同其属性列表.

数据库模式(database schema)

指数据库中所有关系的关系模式.

数据库(database)

指一些关系的集合.

Why relations?

为什么使用关系模型?

关系模型在现行的所有商业数据库管理系统中都有出现.

我们使用的例子

Beers(name, manf)
Bars(name, addr, license)
Drinkers(name, addr, phone)
Likes(drinker, beer)
Sells(bar, beer, price)
Frequents(drinker, bar)

relations
 

上面加下划线的属性(组), 代表这是键(key), 即所有元组在 key 对应的属性(组)上不能取相同的值. 这就是一种约束.

SQL 中的数据库模式

SQL 中的数据库模式

创建(声明)一个关系

创建(声明)一个关系

表中声明的元素

表中声明的元素

大多基本的元素: 属性(attribute)+属性的类型(type).

常用的类型有:

例子: Create Table

Create Table

CREATE TABLE Sells (
	bar CHAR(20),
	beer VARCHAR(20),
	price REAL
);

SQL Values

SQL Values

例子

INSERT INTO Sells VALUE('Joe''s Bar', 'Heineken', 3);

SQL 中的日期和时间

Dates and Times




进一步请参考

https://www.yiibai.com/mysql/time.html

键的声明

键的声明(Declaring keys)

Declaring single-attribute keys

单属性主键声明

Declaring single-attribute keys

多属性主键声明

PRIMARY KEY vs. UNIQUE

PRIMARY KEY vs. UNIQUE

Semistructured data

半结构化数据

Graphs of semistructured data

半结构化数据的图示


从节点 $N$ 出发到达节点 $M$ 的弧上的标签 $L$ 可担任下面两个角色之一:

  1. 可认为 $N$ 表示的是一个对象或实体, 而 $M$ 表示 $N$ 的一个属性, 那么 $L$ 表示该属性的名字.
  2. 可认为 $N$ 和 $M$ 都是对象或实体, $L$ 就是从 $N$ 到 $M$ 的一个联系的名字.

例子: Data graph

Data graph

relations

XML

XML

XML documents

XML 文档

Tags

标签(Tags)

例子: XML 文档

XML 文档的例子

<?xml version="1.0" encoding="utf-8"?>
<BARS>
	<BAR>
		<NAME>Joe's Bar</NAME>
		<BEER>
			<NAME>Bud</NAME>
			<PRICE>2.50</PRICE>
		</BEER>
		<BEER>
			<NAME>Miller</NAME>
			<PRICE>3.00</PRICE>
		</BEER>
	</BAR>
	<BAR>
		...
	</BAR>
</BARS>

Attributes

属性(attributes)

Bars, using attributes

使用属性的 Bars

<?xml version="1.0" encoding="utf-8"?>
<BARS>
	<BAR name="Joe's Bar">
		<BEER name="Bud" price=2.50 />
		<BEER name="Miller" price=3.00 />
	</BAR>
	<BAR>
		...
	</BAR>
</BARS>

namepriceBEER 的属性.

注意 BEER 元素是含有两个属性的单标签.

DTD's (Document Type Definitions)

DTD's (文档类型定义)

例子: DTD

DTD 的例子

<!DOCTYPE BARS[
	<!ELEMENT BARS (BAR*)>
	<!ELEMENT BAR (NAME, BEER+)>
	<!ELEMENT NAME (#PCDATA)>
	<!ELEMENT BEER (NAME, PRICE)>
	<!ELEMENT PRICE (#PCDATA)>
]>


  1. 元素后的 * 号表示该元素可以出现的次数 $\geq 0$;
  2. 元素后的 + 号表示该元素可以出现的次数 $\geq 1$;
  3. 元素后的 ? 号表示该元素可以出现的次数 $=0, 1$.

Attributes in XML

XML 中的属性(attributes)

例子: Declaring attributes in DTD

DTD 中声明属性

<!ELEMENT BEER EMPTY>
	<!ATTLIST name CDATA #REQUIRED,
		manf CDATA #IMPLIED>

  1. 保留字 EMPTY (不加小括号) 指明 BEER 没有结束标签, 即是单标签, 也没有子元素.
  2. CDATA 表示 character string.
  3. #REQUIRED 表示该属性必须出现.
  4. #IMPLIED 表示该属性是可以不出现的.

用法:

<BEER name="Bud" />

End






Thanks very much!

This slide is based on Jeffrey D. Ullman's work, which can be download from his website.