Skip to content

数据库设计

数据库模型

数据库设计中最常采用的模型为实体(Entity)关系(Relationship)模型,简称ER模型

核心思想是将现实世界中的复杂数据表示为一组实体,并描述这些实体之间的关系。

由实体、属性、关系三部分组成:

  • ①抽取实体:实体通常对应现实世界中的一个对象,例如:学生、班级、教师、课程。

  • ②分析属性:每个实体都包含一组属性,这些属性用于描述实体,例如学生包含姓名、年龄、性别等属性。

  • ③分析实体和实体之间的关系:关系用于描述各实体之间的联系,例如学生和班级之间存在从属关系。

其中关系可分为一对一一对多多对多三种,例如学生和班级之间的关系为一对多、学生和课程之间的关系为多对多

实体关系模型通常使用实体关系图(ER diagram)进行表示。下图是一个简易的选课系统的实体关系图,其中方框代表实体,方框之间的连线则代表实体间的关系,连线两端的不同符号用于表示一对一、一对多、多对多的关系。

ER图示例.drawio

符号说明如下:

符号说明
表示0个
表示1个
表示多个

上述符号通常是两个成对使用,其分别表示最小值最大值。例如上述ER图中的班级学生之间的连线,班级一侧的符号表示(最小值和最大值都是一),学生一侧的符号表示(最小值是一,最大值是多),其表达的含义就是班级和学生之间的关系为一对多,一个学生只对应一个班级,而一个班级会对应多个学生(且至少对应一个学生)。

数据库设计流程

传统的数据库设计流程分为三个阶段:

  • 概念模型设计阶段
  • 逻辑模型设计阶段
  • 物理模型设计阶段

概念模型设计

概念模型是一个粗略的初步设计,其只关注实体和关系,不体现最终建表所需的各种细节信息(例如实体的属性)。下图便是一个典型的简易选课系统数据库的概念模型。

设计概念模型通常有四类方法:

  • 自顶向下。即首先定义全局概念结构的框架,再逐步细化。

  • 自底向上(常用)。即首先定义各局部应用的概念结构,然后再将他们集成起来,得到全局概念结构。

  • 逐步扩张。首先定义最重要的核心概念结构,然后向外扩张,以滚雪球的方式逐步生成其他的概念结构,直至总体概念结构。

  • 混合策略。即自顶向下和自底向上相结合。

逻辑模型设计

相较于概念模型,逻辑模型会包含更多的细节信息,例如实体的属性、用于关联两个实体的字段等等。需要注意的是,逻辑模型并不关注具体的数据库实现(例如MySQL或者Oracle)。下图是上述选课系统数据库的逻辑模型。

ER图之间可能有冲突,冲突主要分为三类:

  • 属性冲突
  • 命名冲突
  • 结构冲突

物理模型设计

相较于逻辑模型,物理模型会包含更多的与所选数据库相关的具体信息,例如存储引擎、字段类型、索引等信息。一般而言,物理模型会包含最终建表所需的所有信息,下图是上述选课系统数据库的物理模型。

提示

所有表建议加上创建时间(create_time)、更新时间(update_time)、是否删除(is_deleted)三个字段

不建议真正删除,用状态标识就好了

Released under the MIT License.