关系模型与SQL语言入门
立即解锁
发布时间: 2025-08-23 00:33:55 阅读量: 9 订阅数: 32 


数据库系统概念第六版精华
# 关系模型与 SQL 语言入门
## 1. 关系模型概述
关系数据模型基于表的集合。数据库系统的用户可以对这些表进行查询、插入新元组、删除元组以及更新(修改)元组等操作。以下是一些关键概念:
- **关系与实例**:关系的模式指其逻辑设计,而关系的实例指某一时刻的内容。数据库的模式和实例也有类似定义。关系的模式包括其属性,还可选择包含属性的类型和关系上的约束,如主键和外键约束。
- **键的概念**
- **超键**:是一个或多个属性的集合,其值能唯一标识关系中的元组。
- **候选键**:是最小的超键,即形成超键的属性集,但其任何子集都不是超键。
- **主键**:从关系的候选键中选择一个作为主键。
- **外键**:是引用关系中的一组属性,对于引用关系中的每个元组,外键属性的值必须作为被引用关系中某个元组的主键值出现。
- **模式图**:是数据库模式的图形表示,展示数据库中的关系、它们的属性以及主键和外键。
- **关系查询语言**:定义了一组对表进行操作的操作符,并以表作为结果输出。这些操作可以组合成表达式来表达所需的查询。
- **关系代数**:提供了一组操作,以一个或多个关系作为输入,并返回一个关系作为输出。像 SQL 这样的实用查询语言基于关系代数,但增加了许多有用的语法特性。
### 1.1 关键术语总结
|术语|解释|
|----|----|
|表|关系数据模型的基本存储结构|
|关系|等同于表|
|元组|表中的一行|
|属性|表中的一列|
|域|属性的取值范围|
|原子域|不可再分的域|
|空值|表示缺失的值,可能存在但未知,或根本不存在|
|数据库模式|数据库的逻辑设计|
|数据库实例|某一时刻数据库的内容|
|关系模式|关系的逻辑设计|
|关系实例|某一时刻关系的内容|
|键|包括超键、候选键和主键|
|外键|引用其他关系主键的属性集|
|参照完整性约束|确保外键值的有效性|
|模式图|数据库模式的图形表示|
|查询语言|用于查询数据库的语言,包括过程式和非过程式语言|
|关系操作|如选择元组、选择属性、自然连接、笛卡尔积和集合操作|
|关系代数|对关系进行操作的代数系统|
### 1.2 实践练习示例
以下是一些实践练习的示例,帮助理解上述概念:
- **练习 2.1**:考虑特定的关系数据库,确定合适的主键。
- **练习 2.2**:考虑从 instructor 表的 dept name 属性到 department 表的外键约束,给出可能违反该外键约束的插入和删除操作示例。
- **练习 2.3**:对于 time slot 关系,解释为什么 day 和 start time 是该关系主键的一部分,而 end time 不是。
- **练习 2.4**:在 instructor 表的某个实例中,没有两个教师具有相同的姓名。能否得出 name 可以作为 instructor 表的超键(或主键)的结论?
- **练习 2.5**:先对 student 和 advisor 表进行笛卡尔积操作,然后对结果使用谓词 s id = ID 进行选择操作,结果是什么?用关系代数符号表示为 s id=I D(student × advisor)。
## 2. SQL 查询语言概述
SQL 是目前使用最广泛的数据库查询语言,它不仅可以查询数据库,还能定义数据结构、修改数据库中的数据以及指定安全约束。
### 2.1 SQL 的发展历程
- IBM 在 20 世纪 70 年代初开发了 SQL 的原始版本,最初称为 Sequel,后来演变为 SQL(Structured Query Language)。
- 1986 年,美国国家标准协会(ANSI)和国际标准化组织(ISO)发布了 SQL 标准 SQL - 86,随后又发布了 SQL - 89、SQL - 92、SQL:1999、SQL:2003、SQL:2006 和最近的 SQL:2008 等标准。
### 2.2 SQL 的组成部分
SQL 语言由以下几个部分组成:
- **数据定义语言(DDL)**:提供定义关系模式、删除关系和修改关系模式的命令。
- **数据操作语言(DML)**:提供从数据库中查询信息、插入元组、删除元组和修改元组的能力。
- **完整性**:包括指定数据库中存储的数据必须满足的完整性约束的命令。违反完整性约束的更新操作将被禁止。
- **视图定义**:包括定义视图的命令。
- **事务控制**:包括指定事务开始和结束的命令。
- **嵌入式 SQL 和动态 SQL**:定义了如何将 SQL 语句嵌入到通用编程语言(如 C、C++ 和 Java)中。
- **授权**:包括指定对关系和视图的访问权限的命令。
### 2.3 SQL 数据定义
#### 2.3.1 基本类型
SQL 标准支持多种内置类型:
- **char(n)**:固定长度的字符串,用户指定长度为 n。也可以使用完整形式 character。
- **varchar(n)**:可变长度的字符串,用户指定最大长度为 n。完整形式 character varying 与之等效。
- **int**:整数(机器依赖的整数子集)。完整形式 integer 与之等效。
- **smallint**:小整数(机器依赖的整数类型子集)。
- **numeric(p, d)**:定点数,用户指定精度。该数字由 p 位(包括符号)组成,其中 d 位在小数点右侧。
- **real, double precision**:浮点数和双精度浮点数,精度取决于机器。
- **float(n)**:浮点数,精度至少为 n 位。
每个类型可能包含一个特殊值 null,表示缺失的值。在比较 char 类型和 varchar 类型时,可能会出现问题,建议使用 varchar 类型以避免这些问题。SQL 还提供了 nvarchar 类型来存储使用 Unicode 表示的多语言数据,但许多数据库甚至允许在 varchar 类型中存储 UTF - 8 编码的 Unicode 数据。
#### 2.3.2 基本模式定义
使用 `create table` 命令来定义 SQL 关系。例如,创建一个名为
0
0
复制全文
相关推荐









