数据库关系表示与实现全解析
立即解锁
发布时间: 2025-08-23 00:22:06 阅读量: 2 订阅数: 8 

# 数据库关系表示与实现全解析
## 1. 关系表示方法概述
在确定了实体和关系之后,接下来的问题就是如何表示它们。常见的方法有数据库层次结构、简单网络、复杂网络、实体 - 关系模型和对象 - 关系模型。前三种是传统方法,如今已逐渐被后两种更受认可的方法所取代。下面我们重点介绍后两种方法。
## 2. 实体 - 关系模型
### 2.1 实体 - 关系图(ERD)
实体 - 关系图(ERD 或 E - R 图)是解决数据库表示问题的常用方法。构建 ERD 有两种广泛使用的约定:乌鸦脚符号(Crow’s Foot notation)和陈氏符号(Chen notation)。
### 2.2 ERD 示例与解读
以基于乌鸦脚符号的部分制造环境 ERD 为例,图中有 17 个实体和 18 个连接它们的关系。这些实体包括 Customer、PurchaseInvoice、Supplier 等。每个关系都有一个名称,命名规则取决于所使用的符号约定。例如,使用乌鸦脚符号时,从左到右阅读,名称放在关系线上方;从右到左阅读,名称放在关系线下方。
以下是一些关系的解读示例:
- Employee belongs to Department
- Supplier sends PurchaseInvoice(s)
- PurchaseInvoice contains InventoryItem(s)
- Employee assigned to Project(s)
### 2.3 陈氏符号的 ERD
陈氏符号的 ERD 与乌鸦脚符号的 ERD 传达相同的信息,但在表示上有所不同。陈氏符号以其创始人 Peter Chen 命名,在学术界也广泛使用。在一些情况下,为避免图表过于杂乱,会放宽在每个关系的菱形中写入关系名称的约定。
### 2.4 ERD 中属性的处理
在大型复杂数据库中,尝试在 ERD 中包含实体的属性是不切实际的,除非使用计算机辅助软件工程(CASE)工具进行数据库建模和设计。
### 2.5 多元关系的分解
在很多情况下,ERD 只显示二元关系。所有度数大于 2 的关系都可以分解为一组二元关系。例如,一个三元关系可以分解为三个二元关系。
## 3. 对象 - 关系模型
### 3.1 基本概念
在面向对象的环境中,与 E - R 图相对应的是对象 - 关系图(ORD 或 O - R 图)。其概念与 ERD 相似,但有一些区别:
- 在面向对象范式中,对象类型取代了关系模型中的实体(类型)。
- 表示对象类型的符号与实体符号相似,但有两个扩展区域,分别用于对象类型的属性和操作。
- 首选的绘图约定是统一建模语言(UML)符号。
- 根据面向对象开发工具的不同,可能会有关于关系基数(更准确地说是多重性)的额外符号。
## 4. 传统模型总结
### 4.1 数据库树
数据库树(层次结构)是在 E - R 模型引入之前使用的传统方法,在 RAMIS 系统中成功应用。它是实体和 1:M 关系的集合,满足以下条件:
- 根节点没有父节点
- 每个后续节点有一个单一的父节点
### 4.2 数据库网络
数据库网络方法也是一种传统方法,包括简单数据库网络和复杂数据库网络。简单数据库网络中,任何成员可以有多个不同实体的父节点;复杂数据库网络中至少有一个 M:M 关系,可以通过将所有 M:M 关系替换为 M:1 关系将其简化为简单网络。
## 5. 关系的多重性
### 5.1 多重性的含义
在 ERD(或 ORD)上通常会标明每个关系的多重性(也称为基数),即一个实体(或对象类型)的一个实例可以与另一个实体(或对象类型)的多少个实例相关联。
### 5.2 多重性的表示方法
- 陈氏符号:在每个实体(或对象类型)旁边放置两个数字 [x,y],第一个数字(x)表示最小参与度,第二个数字(y)表示最大参与度。
- 乌鸦脚符号的扩展:使用一个开放圆圈表示参与度为零,一个竖线(|)表示参与度为 1,乌鸦脚表示参与度为多个。常见的组合有:双竖线(||)表示参与度为一个且仅一个;开放圆圈后跟乌鸦脚表示参与度为零或多个;竖线后跟乌鸦脚表示参与度为一个或多个。
以下是多重性表示方法的对比表格:
| 表示方法 | 最小参与度 | 最大参与度 | 示例 |
| --- | --- | --- | --- |
| 陈氏符号 | [x,y] 中的 x | [x,y] 中的 y | [1,3] |
| 乌鸦脚扩展 | 开放圆圈或竖线 | 乌鸦脚 | 开放圆圈 + 乌鸦脚 |
## 6. 关系的实现
### 6.1 实现策略概述
假设采用 E - R 模型,可以按照以下准则实现关系:
| 关系类型 | 推荐实现策略 |
| --- | --- |
| 1:M | 将一个实体的主键存储为另一个实体的外键(外键必须在“多”的一侧) |
| M:M | 引入一个第三个相交关系,原关系/实体与相
0
0
复制全文
相关推荐










