数据模型的三要素是数据集、数据视图和数据模式

模型与算力

给数据学习者讲清数据集、数据视图、数据模式这套三要素划分,以及它落到实际项目里怎么用、什么时候不适用。

很多人背过数据模型三要素的另一个版本,换成数据集、数据视图、数据模式就懵了,不知道这三个词各指哪一层、为什么要放一起说。这篇不堆定义,先把三者的边界划清,再给一套能拿去做事的对照方法和排查顺序,顺带说清什么场景下这套划分并不好使。

很多人背过的数据模型三要素是另一个版本,一换成数据集、数据视图、数据模式就发懵:这三个词看着都眼熟,但不知道各指哪一层,更不知道为什么要把它们放一起说。这篇不堆定义,先把边界划清楚,再给一套能直接拿去做事的对照方法和排查顺序,最后说清什么场景下这套划分其实不好使。

先说结论:数据集管「有哪些数据」,数据视图管「从哪个角度看」,数据模式管「结构怎么定、约束是什么」。三者叠在一起,才等于一个别人敢用的数据模型。缺一个,要么是「有数据没人敢用」,要么是「有结构没数据」,两种情况在真实项目里都很常见。

先搞清楚这三个词各管什么

这三个词最容易被混着用,是因为它们经常出现在同一段需求描述里。分开看就简单了:数据集是名词,指的是能被人引用、能打版本、能说清来源的那一批数据;数据视图是从这批数据里裁剪出来的角度,面向不同角色、不同用途;数据模式是规则本身,字段叫什么、什么类型、能不能为空、谁跟谁关联。

  • 数据集管的是「有哪些数据」:一份可被引用、可被版本化的数据集合,跟它存在哪、用什么格式存没关系;
  • 数据视图管的是「从哪个角度看这批数据」:给不同角色、不同用途裁剪出来的子集与字段口径;
  • 数据模式管的是「结构怎么定、约束是什么」:字段名、类型、是否可空、主外键这类规则;
  • 三者叠在一起才等于一个能用的数据模型,缺一个就会出现「有数据没人敢用」或「有结构没数据」的尴尬
要素回答的问题典型产物改动它谁受影响
数据集有哪些数据表、主题域、数据源清单下游所有引用方
数据视图从哪个角度看报表视图、接口字段、角色权限集用到该视图的报表与接口
数据模式结构怎么定字段定义、类型、约束、关系所有依赖该结构的数据与视图

三者怎么咬合:一次改动的传导顺序

教科书式的顺序是先定模式、再圈数据集、最后开视图。但真实项目里改需求时,顺序常常是反的:先有人提「我要看这个维度的数据」,也就是先冒出一个视图需求,才回头去动数据集和模式。理解这一点,比记住名词重要得多。

判断一次改动风险大不大,就一个标准:它同时碰到几层。只加一个视图最轻,动数据集中等,动模式最重,因为模式一变,所有依赖它的视图都得重新核一遍。团队里把「谁负责模式、谁负责视图」写清楚,比争论该把它们叫什么名词有用得多。

只改视图
最轻,换口径或加减字段,影响范围通常只限那一两个报表或接口
改数据集
中等,数据来源或范围变了,所有引用方都要确认还能不能对得上
改模式
最重,字段名、类型、约束一变,所有依赖结构的东西都要重新核
三层联动
最麻烦,通常说明需求本身没想清楚,建议先停下来对齐口径

上手前的对照清单与排查顺序

真开始干活的时候,按下面这个顺序走,能少绕很多弯。第一步问数据从哪来、更新频率多高、谁能改,先把数据集这一层落下来;第二步列出所有使用方和各自要看的字段,据此拆视图,别急着建一张大宽表;第三步才定模式,类型和约束宁严勿松,因为这三层里改起来代价最小的恰恰是视图。

  1. 落数据集确认数据来源、更新频率、谁能改;能拉到一份小样本最好,先把范围圈住。
  2. 拆视图列出全部使用方和各自关心的字段,按角色和用途拆,不要用一张宽表糊弄所有人。
  3. 定模式字段名、类型、约束、关系一次写清;改起来代价最小的是视图,所以这一层宁严勿松。
  4. 按顺序排查数据对不上,先查视图口径;视图没错,再查数据集版本;最后才怀疑模式定义。
  5. 小样本回归改完任何一层,用一份小样本从头到尾跑一遍,确认三层仍然对得上再收工。

顺带提一句,涉及工具选型和数据管道搭建时,别人的实测结论只能当参考。想看当下的通行做法和数字,可以到 /tools/speed-test 核对当时的实际情况,再结合自己的数据量做判断。

什么情况下这套划分不适用

任何一套划分都有它管不到的地方,这套三要素也一样。硬套在不适用的场景里,不是严谨,是给自己找活干。下面几种情况值得停一下,别急着往上套。

  • 流式、事件驱动场景里没有稳定的「数据集」概念,硬套等于给每个时间窗造一份假数据集;
  • 以文档型、键值型存储为主的项目,模式约束本来就弱,把模式当强规范会拖慢迭代;
  • 单人小项目、数据量小到一个文件能装下时,分三层是纯负担,一层够用就别硬拆;
  • 跨组织数据交换时,真正卡人的往往是口径和授权而不是层级,这三要素解决不了那类问题

再补一个判断标准:如果一个改动你花在「这到底算数据集还是算视图」上的时间比动手实现还多,那说明当前的划分颗粒度不适合这个项目,直接按团队能共识的口径来,别为了名词对齐搭进去半天。

划分是为了减少沟通成本,一旦它本身变成沟通成本,就该换一套。
下一步把这三层跟你手上正在做的项目对一遍,看有没有哪一层是空的;想横向比较不同方案的落地表现,可以去 /sites 和 /price-watch 看看各类工具与数据的当时情况,再回来决定要不要拆层。

常见问题

数据集、数据视图、数据模式,哪个最应该先定?

没有固定答案,取决于你在改什么。新建项目通常先定数据集来源和模式骨架,再把视图按使用方拆开;如果是接手已有系统改需求,就从视图倒推,先确认使用方到底要看什么,再回头核数据集和模式。判断依据是改动代价,先动改起来最便宜的那层。

数据视图和数据库里的视图是一回事吗?

不完全是。数据库视图是一种实现手段,这里说的数据视图更偏逻辑概念,指面向某类使用方的数据口径。它可以用数据库视图实现,也可以是一张中间表、一段查询或一层接口。别把概念和实现绑死,否则换技术栈时整个模型设计都要重来。

三个要素里哪个最容易出错?

通常是视图。因为数据集有来源可查、模式有约束可验,唯独视图的口径是人为约定的,容易同名字段在不同使用方那里含义不一样。落地时可以给每个视图写一行用途说明和字段口径,改动时逐个核,成本不高但能挡掉大部分对不上的问题。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。