在日常项目中,发现公司很多研发同事在系统表结构设计或数仓表结构设计过程中,对概念模型、逻辑模型、物理模型的认识不是很清晰,所以今天这篇文章和大家一起梳理下,什么是概念模型、逻辑模型、物理模型,以及如何通过概念模型、逻辑模型、物理模型来进行系统表结构设计或数仓表结构设计。
一般情况,在进行设计时一般会分开成三个步骤:概念模型阶段 > 逻辑模型阶段 > 物理模型阶段
,每个步骤负责各自部分,层层递进,最终一步步完成完整设计。
各用一句话总结来说就是
概念模型
找出你需要设计的系统、业务层面的核心实体以及实体间的关系。
逻辑模型
进一步整理完善系统实体、实体间的关系,以及确定实体的属性。
物理模型
确定之前模型中的实体、关系、属性如何映射到具体实现,以及确定具体实现中由于技术或其他原因需要做的额外调整。
零、ER实体关系模型
ER实体关系模型一般由
实体(Entity)
、属性(Property)
、关系(Relationship)
组成
我们通常称使用实体(Entity)
、属性(Property)
、关系(Relationship)
来表示数据关联和事物描述的这种对数据抽象建模为ER实体关系模型。
实体
通常为参与到过程中的主体,客观存在的,比如商品、仓库、货位、汽车,此实体非数据库表的实体表。
属性
对主体的描述、修饰即为属性,比如商品的属性有商品名称、颜色、尺寸、重量、产地等。
关系
现实的物理事件是依附于实体的,比如商品入库事件,依附实体商品、货位,就会有“库存”的属性产生;用户购买商品,依附实体用户、商品,就会有“购买数量”、“金额”的属性产品。
*
实体之间一般存在已下几种关系:
1:1
即1对1的关系1:n
即1对多的关系n:m
即多对多的关系
ER实体关系模型一般严格遵循第三范式(3NF)
,数据冗余程度低,且数据的一致性容易得到保证。但是由于数据分布于众多的表中,所以查询会相对复杂,在大数据量的场景下,查询效率相对较低。
一、概念模型阶段
概念模型阶段要做的事有两件
确定实体确定实体间的关系
举个例子,我们准备要开发一个校园管理系统,通过和产品经理、需求方沟通,这个系统主要目的是为了解决学生、班级、老师之间归属关系录入、统计和查看。
在概念模型阶段,我们可以将我们涉及到业务层面的核心的三个实体 1、学生 2、班级 3、老师 ;
归属关系:
班级与学生是属于一对多的关系:一个班级至少有一个或多个学生,每个学生只能归属于一个班级;老师与班级是属于多对多的关系:一个班级至少有一个或多个老师,一个老师至少属于一个或多个班级;老师与课程是属于一对多的关系:一个老师只能教授一门课程,多个老师可以教授同一门课程;
使用powerdesigner
画出来的概念模型如下:
二、逻辑模型阶段
逻辑模型阶段要做的事也是两件
各个实体间的关系都有哪些约束每个实体都有哪些业务属性以及属性的业务类型
逻辑模型阶段要做的事,总结一句话来说,“整理完善系统所有实体、实体间的关系,给实体添加字段属性”;
例如班级这个实体,我们需要将班级ID、班级名称等 班级实体下的所有字段属性梳理出来,并将这些字段的长度和约束确定下来;
实体字段属性定义要尽量满足三范式定义,在下一个章节我们会讲到什么是三范式,为什么要遵循三范式;
此时多对多的关系,例如老师与班级的归属关系,我们需要单独建立一张关系表,进行处理;
我们使用powerdesigner
画出来的逻辑模型如下:
三、物理模型阶段
物理模型阶段需要做的事情比较多
确定业务属性如何转换成数据库形式:类型,字段集,表确定实体和实体间的关系如何转换成数据库的表,主键,外键确定数据库表字段的其他数据库特性:默认值,是否非空,触发器确定数据库表中除业务需要之外需要冗余的字段以及是否需要其他数据库表
生成的逻辑模型如下:
四、生成DDL语句
逻辑模型就可以直接生成DDL语句了