-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
“PHZ”
committed
Dec 20, 2024
1 parent
9b7de37
commit c6a55dc
Showing
6 changed files
with
85 additions
and
23 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
--- | ||
title: 数据库-4 | ||
date: 2024-12-20 09:55:54 | ||
tags: | ||
- 学习笔记 | ||
--- | ||
|
||
## 关系型数据库的结构(语法) | ||
|
||
### 关系型数据库基础介绍 | ||
|
||
关系型数据库由一系列表的集合组成。对于关系模型: | ||
|
||
- $A_1, A_2,..., A_n$为模型中的属性 | ||
- $D_1, D_2,..., D_n$为模型中属性的域,即对于每个属性允许的取值。 | ||
- 属性的域是一系列允许的值的集合 | ||
- 属性值通常是原子的,即不可再分的,符合第一范式(1NF) | ||
- 特殊值`NULL`是每个域的成员,表示该值未知。但是`NULL`的操作可能会导致一些未知错误,比如索引失败 | ||
- $R=(A_1, A_2,..., A_n)$是关系模式(relation schema) | ||
- 关系实例`r`在模式`R`上的定义表示为$r(R)$ | ||
- 其当前的值由表指定 | ||
- 对于关系实例`r`的的一个元素`t`被称为元组(tuple),用表中的一行表示 | ||
|
||
或许感觉对于`r`、`R`和`t`的关系有一定的不明确。简单的来说,`R`定义了一个表的结构,`r`是对于表结构`R`的具体实现,而`t`是`r`中的一个元素,也就是表中的一条数据。 | ||
|
||
对于关系顺序一般是无关的,这个无关体现在两个方面: | ||
|
||
1. 对于表中存储的**属性**,其排列顺序无关。即$(A_1, A_2,..., A_n) = (A_2, A_1,..., A_n)$ | ||
2. 对于表中存储的**数据**,其排列顺序无关。 | ||
|
||
**数据库架构**(Database schema)是数据库的逻辑结构 | ||
**数据库实例**(Database instance)是数据库中某一特定时刻的数据快照(snapshot)。 | ||
|
||
举例如下: | ||
|
||
- 数据库架构:instructor (ID, name, dept_name, salary) | ||
- 数据库示例:![数据库实例](/img/数据库(4)/数据库实例.png) | ||
|
||
|
||
### 关系型数据库的键 | ||
|
||
关系型数据库中存在一些特殊的键,包括有主键、侯选键和外键 | ||
|
||
- **主键**是用于唯一标识表中每一条记录的一个或多个属性(列)的组合。主键的值必须是唯一的,并且不能为空(即 NOT NULL) | ||
- **唯一性**:每个主键值在表中必须是唯一的,不能重复。 | ||
- **非空性**:主键列不能包含 NULL 值,确保每条记录都有一个有效的标识。 | ||
- **稳定性**:主键的值应尽量保持不变,以避免数据引用混乱。 | ||
- **候选键**是能够唯一标识表中每一条记录的一组最小属性(列)。换句话说,候选键是没有冗余属性的候选集,每个候选键都是一个潜在的主键。 | ||
- **最小性**:候选键中的每个属性都是必需的,去掉任何一个属性后,该组合就不再具有唯一性。 | ||
- **多样性**:一个表中可能存在多个候选键,但最终只能选择其中一个作为主键。 | ||
|
||
- **外键**是依附于其他表的键,其本身会根据其他表中相应键的变化产生变化 | ||
- **参照完整性**:外键的值必须存在于被引用表的主键或唯一键中,或者可以是 NULL(如果允许)。 | ||
- **约束行为**:当被引用表中的数据发生变化(如删除或更新)时,可以通过定义外键约束的行为(如级联删除、级联更新)来自动处理相关联的数据。 | ||
- 数据库表之间存在外键关系,导入数据时,先导入被参照关系 r2 (department) 中的数据,再导入参照关系 r1 (instructor) 中的数据。 | ||
- 任何在参照关系 r1(instructor)中的外键属性(dept_name)出现的值,必须至少在被参照关系 r2(department)的某个元组的属性中存在。 | ||
|
||
参考数据库模式图 | ||
![模式图](/img/数据库(4)/模式图.png) | ||
|
||
外键在模式图中的表示如下图所示 | ||
![外键模式图](/img/数据库(4)/外键模式图.png) | ||
|
||
## 关系模型操作(关系代数) | ||
|
||
### Pure Languages | ||
|
||
在关系型数据库中,有几种语言其在表达能力上是等价的,其中包括: | ||
|
||
1. 关系代数(Relational Algebra) | ||
2. 元组关系演算(Tuple Relational Calculus) | ||
3. 域关系演算(Domain Relational Calculus) | ||
上述纯粹的语言具有相同的表达能力,能够完成相同类型的数据查询操作。其中关系代数是关系数据库查询和操作的基础。 | ||
|
||
### 关系代数的基本操作 | ||
|
||
系代数作为一种过程式语言,包含以下六个基本操作。这些操作是构建复杂查询的基础。 | ||
|
||
1. 选择(Selection): 选择满足特定条件的元组。 | ||
- 符号: | ||
2. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.