# 模式设计基础

## 数据模型

### 什么是数据模型？

1. 数据模型是一组由符号、文本组成的集合，用以准确表达信息，达到有效交流、沟通的目的。

## 数据模型设计的元素

- 实体 `Entity`

  1. 描述业务的主要数据集合
  2. 谁，什么，何时，何地，为何，如何

- 属性 `Attribute`

  1. 描述实体里面的单个信息

- 关系 `Relationship`

  1. 描述实体与实体之间的数据规则
  2. 结构规则：`1-N`，`N-1`，`N-N`
  3. 引用规则：电话号码不能单独存在

- 数据模型图

  ![image-20200714173014835](../img/modeling/img_6.png)

## 传统模型设计：从概念到逻辑到物理

|            | 概念模型 `CDM`                                     | 逻辑模型 `LDM`                                   | 物理模型 `PDM`                                               |
| ---------- | -------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------ |
| 目的       | 描述业务系统要管理的对象                           | 基于概念模型，详细列出所有实体，实体的属性及关系 | 根据逻辑模型，结合数据库的物理结构，设计具体的表结构，字段列表及主外键 |
| 特点       | 用概念名词来描述现实中的实体及业务规则，如'联系人' | 基于业务的描述和数据库无关                       | 技术实现细节和具体的数据库类型相关                           |
| 主要使用者 | 用户<br />需求分析师                               | 需求分析师<br />架构师及开发者                   | 开发者<br />`DBA`                                            |

## 从开发者的视角：概念模型

![image-20200714173847089](../img/modeling/img_7.png)

## 从开发者的视角：逻辑模型

![image-20200714173916135](../img/modeling/img_8.png)

## 从开发者的视角：第三范式下的物理模型

### 第三范式原则

- 数据在库里尽量不存在冗余

### 物理模型图

![image-20200714174059620](../img/modeling/img_9.png)

## 模型设计小结

### 数据模型三要素：

- 实体
- 属性
- 关系

### 数据模型的三层深度

- 概念模型，逻辑模型，物理模型
- 一个模型渐渐细化的过程
- 概念模型是抽象的，描述业务的对象，这一层很模糊
- 逻辑模型，就是将概念模型实体化，具体到这个业务有哪几个对象，每个对象有什么属性，对象与对象之间的关系
- 物理模型，就是基于具体的物理数据库结构，将逻辑模型进一步细化，将对象具体为一个个列表字段，可能冗余的字段抽成一个个表，也就是第三范式，库的数据尽可能不冗余