数据模型设计(上)- 基础回顾

本课程为数据模型设计的上半部分内容,涵盖了课程大纲中的:1. 数据模型的概念和运用;2. 设计数据模型的部分内容。 课程大纲中的剩余内容可以查看《数据模型设计(下)- 设计步骤与进阶》

课程大纲

  • 数据模型的概念和运用
  • 设计数据模型
  • Zion数据模型的制作
  • 数据模型常用场景的应用
  • 拓展练习

课前准备:

  1. 确保可以在Zion上新建项目完成本课程的制作练习:https://www.functorz.com/
  2. 注册飞书,建议安装飞书客户端:https://www.feishu.cn/
  3. 浏览电商类模板小程序,了解其功能
微信扫码体验电商类小程序模板

数据模型的概念和运用

如果在学习本课程内容之前已经完成过简单的项目学习或者查看过数据模型相关的帮助中心文档,那对数据模型应该有了基础的了解。
数据模型的概念:https://doc.functorz.com/more_module/2f7c
数据模型的设计原则:https://doc.functorz.com/more_module/195b
数据模型的管理界面:https://doc.functorz.com/more_module/c0af
本课程的目的是更系统性的来学习有关数据模型的知识。
在掌握有效的思维方式和方法论后,将帮助面对各种不同的需求场景时,更高效地搭建、制作数据模型

什么是数据模型

数据模型(Data model)是将数据的各种元素组织起来的一种抽象模型,并且它标准化了数据之间以及他们和现实中对象的关系。
数据模型是数据信息的一种可视化呈现,通常会以图表的形式描述他们的对象属性关系
 它看上去通常是这样的
也可能是这样
或者这个样子
或者用大家可能更熟悉的工具excel的话它是这样的
之所以数据模型会有不同的呈现其中的原因主要有两点:
  1. 数据模型的制作过程被称为数据建模(Data modeling),它在不同阶段的作用不同,沟通的对象也不同。
  2. 数据模型会因为需求的变化而做出调整,一个业务或应用程序没有所谓的最终版本的数据模型。而是一个最符合它当下需求以及可预期未来的需求的数据模型
所以我们没有必要去追求一步到位制作一个“完美的”数据模型

数据模型的作用

数据模型的最终目的是为你的整个业务或组织建立清晰的数据准则。为数据库的搭建提供一个蓝图,帮助协同需求方和技术人员。
数据模型的制作分为三个阶段,概念数据模型(Conceptual data model)、逻辑数据模型(Logcial data model)、物理数据模型(Physical data model)。
随着阶段的深入,数据模型的信息会从抽象变得详细具体;从业务语言变为符合技术语言。
1. 概念数据模型
  • 最抽象的数据模型,只包含最主要的数据对象和他们之间是否存在关系,不包含信息细节
  • 用来为业务需求方定义业务流程中用到的信息和规则
  • 不需要有标准的格式和呈现方式,以团队方便理解达成一致为主
2. 逻辑数据模型
  • 在概念数据模型的基础上具体的定义了所有对象的属性,如字段、类型,和他们之间的具体关系
  • 为团队提供一个能够在不同数据库服务上搭建数据的标准
  • 可以通过绘制UML图来完成应用到Zion的逻辑数据模型
这是电商类小程序模板的逻辑数据模型UML图
3. 物理数据模型
  • 在逻辑数据模型的基础上,完善了所有数据添加到数据库中所需要的具体信息
  • 是为某个数据库管理系统或应用设计的
Zion的数据模型模块就是为其数据库设计的物理数据模型工作
在Zion上,我们不需要单独完成物理数据模型,只需要将完整的逻辑数据模型在Zion上制作好就满足了我们对业务数据模型搭建的需求。
合理的数据模型可以有效避免数据设计错误、产生过多无效或重复的数据,提高产品的性能和适用性。减少后期维护和优化的成本。
数据模型还能提高团队的协同效率,明确业务逻辑和要求。同时还能帮助组织更有效地利用数据做业务决策。

设计数据模型

尽管在一些实际情况中,因为业务需求方和建立数据模型的可能是同样的人,或者是自己通过Zion开发项目。我们可能会根据项目的需求和复杂程度跳过概念数据模型的制作或直接在Zion上建立数据模型。
对于数据模型的新手,我们还是建议遵循以下的设计原则和设计步骤,养成良好的设计习惯
本课程我们将主要以《电商类小程序模板》为例来学习数据模型的制作,以绘制UML图的形式完成一个完整的逻辑数据模型为设计结果
先来看一下数据模型由哪些部分组成

数据模型的组成

1. 数据表(tables)
  • 数据表对应的是我们从现实的业务中抽取出来需要分析信息的对象(entities),这些对象可能是实体,比如商品,也可能是抽象的,比如订单;当然也有一些数据表是为了完成特定需求制作的,比如自定义这个数据表是为了在订单页根据状态筛选订单
  • 数据表明确了它所包含的字段。如果用大家熟悉的Excel来理解,整个Excel文件就是数据模型,而数据表就是其中一个Sheet。
数据表“order”在Excel中的形式
2. 字段(fields)
  • 字段也称为属性(attributes),对应的是我们分析信息对象中的具体内容,明确定义了属性的名字、类型(比如“文本”、“图片”、“日期”)
  • 每个数据表通常都会有一个无意义的、静态的字段来为每条数据编号,这个字段被称为主键字段。在大多数表中,会将主键字段命名为“id”,体现为一个随着数据量自增的整数。
  • 在Excel中相对应的就是表格的列(columns)
“order”中的所有字段在Excel中的形式
3. 关系(relations)
  • 关系描述了业务需求中各个对象之间信息传递的方式,提供了数据表间相互引用的通道,实现了数据互通,明确定义了数据表之间的关系类型(1:1,1:N,M:N)。
  • 数据模型就是带有关系的数据表,建立关系的本质是使对方表可以引用当前表的数据。在数据表中体现为一个特殊的字段。关系也可以理解为特殊属性,类型是某个对象,对应的是被引用对象的id。
  • 关系的类型
“order”中的“account”字段就是一个关系字段

设计原则

  数据模型设计最重要的是符合需求,遵循业务需求>数据性能>数据结构的原则。  
这个首要原则可以通过以下几点实现:
  1. 为业务需求提供完整的闭环,并且逻辑自洽。
  2. 具有全局性思维,发挥想象力,考虑业务当中可能出现的极端情况以及业务未来的发展变化。使得数据模型具有适用性和延展性。
  3. 数据表中每个字段跟对象的主要属性是直接关系而不是间接关系。
  4. 将数据表中存在的1:N关系尽可能地拆分成多表建立关系。通过建立数据表的1:N关系,避免过多重复数据。
  5. 在承载相同信息量且无重复信息的情况下,一张数据表的字段设计,应该以数据条数最大化为原则。
  6. 每个字段具有原子性,在满足需求的情况下不必再做拆分。
  7. 不添加不必要的字段和数据关系。

1. 为业务需求提供完整的闭环,并且逻辑自洽。

这个数据模型缺少实现小程序很多其他功能的对象和关系
相对而言这样的数据模型有完整的闭环

2. 具有全局性思维,发挥想象力,考虑业务当中可能出现的极端情况以及业务未来的发展变化。使得数据模型具有适用性和延展性。

3. 数据表中每个字段跟对象的主要属性是直接关系而不是间接关系。

“班主任”和“学生”并不是直接关系
因此我们可以将他们拆分成两个数据表

4. 将数据表中存在的1:N关系尽可能地拆分成多表建立关系。通过建立数据表的1:N关系,避免过多重复数据。

同一个学生可能会参加多个社团
因此我们可以将学生和社团中存在的1:N关系拆分。在本案例中实际用了学生社团表作为“中间表”使得“学生表”和“社团表”建立了M:N关系

5. 在承载相同信息量且无重复信息的情况下,一张数据表的字段设计,应该以数据条数最大化为原则。

改数据表中的3个社团可以用“社团”字段来记录。按照原则4中的实例,应该以数据条数最大化

6. 每个字段具有原子性,在满足需求的情况下不必再做拆分。

“地址”字段可以拆分为具有原子性的“省份”、“城市”和“详细地址”

7. 不添加不必要的字段和数据关系(关系就是特殊的字段)。

“社团名”在该表中是不必要的,因为可以通过关系字段“社团”找到。“班级”这个关系通常会和“学生”建立,因此该表可以通过“学生”找到“班级”,不必要再次添加同样意义的“班级”关系字段
数据表不是统计表,尽管某些数据表因为业务需求存在统计字段(比如阅读量、点赞数等),出于应用程序数据性能和用户体验的角度,要避免在数据模型中加统计字段。
可以参考以下流程图来判断添加的必要性
是否记录在项目的数据模型中的主要判断原因是它会不会影响用户的使用体验,主要考虑“数据性能”的影响。
“人数”字段是一个统计字段,用户在操作过程中可能会使它的值频繁发生改变

数据模型的设计方式主要有两种:

  1. 底层设计(Bottom-up):这种方式通常是工程重塑的结果,用现有的数据、结构和各种表格针对目前的应用程序做数据模型的搭建,从企业的角度来讲是不完整的,并且可能会有部分业务逻辑不完整。
  2. 顶层设计(Top-down):这一过程遵循概念-逻辑数据模型的制作,从更抽象的方式从人们所知道的对象中提取信息,形成一个逻辑数据模型。但是不具有实际开发工具的针对性
与很多设计一样,实际设计数据模型的过程中往往是将这两种方式相结合,思考数据和应用结构的同时,考虑到业务相关领域的特殊需求。 这里推荐在针对Zion制作数据模型的时候先采用顶层设计的思维,然后结合可能现有的数据模型,不断做优化。
以上为本课程上半部分-基础回顾
2022-08-08
0 0