### 数据库设计过程
在《数据库课件总结:Database Chapter Six Outline》中,重点讨论了数据库设计中的几个关键概念和步骤。我们关注的是**设计过程**,它包括两个主要阶段:概念设计和逻辑设计。
#### 概念设计
概念设计阶段的主要目标是选择一个数据模型,并将需求转化为一个概念性的数据库模式。这一阶段不涉及具体的实现细节,而是专注于理解业务需求、实体之间的关系以及这些实体如何存储和组织信息。
在这个阶段,可能会遇到的问题包括:
- **冗余**(Redundancy):指同一数据在数据库中多次出现的现象,这可能导致数据更新时的一致性问题。
- **不完整性**(Incompleteness):指数据缺失的情况,可能是因为某些实体的数据没有被完整地记录下来。
#### 建模
在概念设计阶段,数据库可以通过以下方式建模:
1. **实体**(Entities):实体是指在系统中存在并能与其他对象区分开的对象。例如,在一个学校系统中,“学生”、“教师”等都是实体。
2. **属性**(Attributes):实体具有一定的属性,这些属性描述了实体的特征。比如,“学生的姓名”、“年龄”等。
3. **实体集**(Entity Sets):同一类型的实体组成的集合被称为实体集,它们共享相同的属性。
4. **关系**(Relationships):关系指的是不同实体之间的关联。例如,一个“教师”可以教授多个“课程”,而一个“课程”也可以由多名“教师”教授。
5. **关系集**(Relationship Sets):数学上表示为实体之间的一种关联关系,形式化定义为:{(e1,e2,…en)|e1E1,e2E2,…,enEn},其中(e1,e2,…,en)表示一个具体的关系。
#### 参与(Participation)
实体集E1、E2、…、En参与关系集R。这种参与可以是一对多、多对一或一对一等不同的类型,取决于具体的应用场景。
#### 角色(Role)
角色表示实体在某种关系中所扮演的功能。例如,在师生关系中,“教师”和“学生”分别扮演着不同的角色。
#### 递归关系集(Recursive Relationship Set)
当同一个实体集参与到一个关系集中不止一次时,就形成了递归关系集。这种情况通常出现在实体自身之间存在某种关系的情况下,如“部门”与自己之间存在的上级与下级关系。
#### 描述性属性(Descriptive Attributes)
描述性属性可以是关系集的属性,用于描述该关系集的特性。
#### 度(Degree)
度是指参与某个关系集的实体集的数量。例如,在二元关系集中,有两个实体集参与。
### 属性
实体通过一组属性来描述,这些属性代表了实体集成员共有的描述性属性。属性可以分为以下几种类型:
- **简单属性**(Simple Attributes):不能进一步分解的属性。
- **复合属性**(Composite Attributes):由多个简单属性组成。
- **单值属性**(Single-Valued Attributes):对于每个实体,属性只有一个值。
- **多值属性**(Multi-Valued Attributes):例如,电话号码就是一个多值属性,一个实体可以有多个电话号码。
- **派生属性**(Derived Attributes):可以从其他属性计算得出的属性,不存储在数据库中,但在查询时会根据其他属性进行计算。
### 映射基数约束(Mapping Cardinality Constraints)
映射基数约束表达了通过关系集另一个实体可以关联到多少个实体。在二元关系集中,映射基数可以是以下类型之一:
- **一对一**(One-to-One):每个实体只能关联到另一个实体集中的一个实体。
- **一对多**(One-to-Many):一个实体可以关联到另一个实体集中的多个实体。
- **多对一**(Many-to-One):多个实体可以关联到另一个实体集中的一个实体。
- **多对多**(Many-to-Many):一个实体可以关联到另一个实体集中的多个实体,反之亦然。
### E-R 图
E-R 图(实体-关系图)是一种图形化表示实体及其关系的方法,它主要包括以下几个元素:
- **矩形**(Rectangles):表示实体集。
- **菱形**(Diamonds):表示关系集。
- **椭圆**(Ellipses):表示属性。
- **双椭圆**(Double Ellipses):表示多值属性。
- **虚线椭圆**(Dashed Ellipses):表示派生属性。
- **下划线**(Underline):用于标识主键属性。
- **角色标签**(Role Labels):可选的,用来描述实体在关系中的角色。
通过对这些概念的理解,我们可以更深入地了解数据库设计的基本原理和技术,这对于有效地管理和操作数据至关重要。