数据库关系的转换与处理
立即解锁
发布时间: 2025-08-23 00:16:14 阅读量: 2 订阅数: 13 

# 数据库关系的转换与处理
## 1. 二元关系
### 1.1 一对一二元关系
一对一二元关系在实体关系(ER)模型和统一建模语言(UML)中有不同的表示方式。在 ER 模型中,如图 5.1(a) - (c) 所示;在 UML 中,如图 5.2(a) - (c) 所示。
- **双方实体都为必需时**:当两个实体都是必需的(图 5.1a),每个实体都成为一个表,并且任一实体的键可以作为外键出现在另一个实体的表中。
- **一方实体为可选时**:在可选关系中(如图 5.1b 中的部门),其中一个实体应在其转换后的表中包含另一个实体的外键。虽然图 5.1(b) 中的另一个实体“员工”也可以包含一个允许为空的外键(dept_no),但由于员工实体实例的数量远多于部门实例,这将需要更多的存储空间。
- **双方实体都为可选时**:当两个实体都是可选的(图 5.1c),任一实体都可以包含另一个实体的嵌入式外键,外键允许为空。
### 1.2 一对多二元关系
一对多关系在“多”的一侧可以是必需的或可选的,这并不影响转换。在“一”的一侧可以是必需的(图 5.1d)或可选的(图 5.1e)。在所有情况下,外键必须出现在“多”的一侧,这代表子实体。只有在“一”的一侧为可选的情况下,外键才允许为空。外键约束根据关系的具体含义设置,并且可能因关系而异。
### 1.3 多对多二元关系
多对多关系(如图 5.1(f) 所示,两个实体都为可选)需要一个包含两个实体主键的新表。无论是可选还是必需的情况,转换方式都是相同的,并且在两种情况下,外键都必须有“非空”子句。需要注意的是,可选实体意味着从它派生的 SQL 表在特定关系中可能有零行,但这并不影响表定义中的“空”或“非空”设置。
| 关系类型 | 转换方式 | 外键设置 |
| ---- | ---- | ---- |
| 一对一(双方必需) | 每个实体成表,键可互作外键 | 无特殊要求 |
| 一对一(一方可选) | 可选方表含另一方外键 | 可选方外键可空 |
| 一对一(双方可选) | 任一表含对方外键 | 外键可空 |
| 一对多 | “多”方表含“一”方外键 | 可选“一”方外键可空 |
| 多对多 | 新建表含双方主键 | 外键非空 |
### 1.4 二元递归关系
#### 1.4.1 一对一递归关系
单个实体具有一对一关系意味着某种形式的实体实例配对,这种配对可以是完全可选的、完全必需的或介于两者之间。在所有这些情况下(ER 模型见图 5.3a,UML 见图 5.4a),配对实体的键作为外键出现在结果表中。两个键属性来自同一域,但被赋予不同的名称以表明它们的独特用途。
#### 1.4.2 一对多递归关系
一对多递归关系需要在结果表中设置外键(图 5.3b)。外键约束可能因特定关系而异。
#### 1.4.3 多对多递归关系
多对多二元递归关系如图 5.3c 所示为可选关系,并会生成一个新表;它也可以定义为必需关系(使用“必须”而不是“可以”)。两种情况下,外键都定义为“非空”。在多对多关系中,外键的删除和更新约束必须始终是级联的,因为 SQL 表中的每个条目都依赖于所引用主键的当前值或存在性。
```mermaid
graph LR
A[实体] -->|一对一| B(结果表: 含配对实体外键)
A -->|一对多| C(结果表: 含外键)
A -->|多对多| D(新表: 含外键且非空)
```
## 2. 三元和 n 元关系
### 2.1 n 元关系的连接变化
n 元关系有 (n + 1) 种可能的连接变化:所有 n 侧的连接性为“一”;(n - 1) 侧的连接性为“一”,一侧为“多”;(n - 2) 侧的连接性为“一”,两侧为“多”;依此
0
0
复制全文
相关推荐








