做产品 PMaker
空格的键盘空格的键盘
设计结构

数据模型先行

数据模型先行 | 设计结构 | 做产品

数据模型先行

界面改一次是几分钟,数据模型改一次是把已有数据也一起迁走。这是整条链路上返工最贵的一环。

你会遇到的现象

  • 某个信息在两个页面显示得不一致,因为它存了两份

  • 想加个筛选,发现这个字段当初是拼在一个文本里的

  • 界面怎么调都别扭,改了半天发现是数据关系不对

让 AI 直接做页面,它会顺着界面推数据:页面上要显示客户名,那就在项目表里加一个客户名字段。单页看没问题,等到有第二个页面也要用客户信息,数据就开始分叉。

怎么定

步骤具体做什么 找名词把内容清单和场景描述里的名词圈出来:项目、客户、改稿记录、对账单 判断实体能被单独列出来、单独增删改的,就是实体;只是某个实体的属性的,就是字段 定关系两两问一遍:一个 A 能对应几个 B,一个 B 能对应几个 A 查重复同一个信息如果出现在两个表里,多半该抽成独立实体

第三步是关键。多对多的关系需要一张中间表,这件事定得越晚,改起来越麻烦。

让 AI 直接做页面,它会顺着界面推数据

页面 A 要显示客户名

项目表 加个「客户名」字段

页面 B 也要用客户信息

又存一份 数据开始分叉

单页看没问题,第二个页面一来就分叉了。改一处要同步改几处,迟早会漏。

先抽出「客户」实体 它能被单独增删改

项目表只存客户 ID 客户名只有一份

两个页面引用同一处 改一处,处处生效

判断实体只要一句话:能被单独列出来、单独增删改的就是实体;只是某个实体的属性的,就是字段。 另外给所有表加一个软删除标记,别真删——用户误删能恢复,关联数据也不会突然断掉。 界面改一次是几分钟,数据模型改一次是把已有数据也一起迁走。

让 AI 定模型时一定要加上这条:「哪些字段将来可能需要被搜索或筛选,据此说明为什么不能把它们塞进一个大文本字段」——AI 为了让界面好写,很容易把几个信息拼成一个字段,等你要做筛选时才发现拆不开。

定错了的信号

  • **同一个东西存了多份。**改一处要同步改几处,迟早会漏。这是最典型的信号。

  • **字段里塞了结构化的内容。**把「张明 138xxxx」存进一个字符串,等要按电话搜索时就得重新拆。

  • **某个表有一堆用不上的空字段。**说明当初把两类不同的东西硬塞进了一张表。

  • **删一条数据会牵连出一堆问题。**关系没定清楚,删了客户之后项目变成孤儿。

软删除在这里值得单独说一句:给表加一个删除标记,而不是真的删掉。用户误删能恢复,关联数据也不会突然断掉。

给 AI 的话

复制 PROMPT · 定数据模型 基于下面这份内容清单和使用场景,先设计数据模型,不要写界面。

内容清单:[粘贴清单] 场景:[谁、在什么时候、做什么]

请输出:

  1. 实体列表。每个实体的字段、类型、是否必填、默认值。
  2. 实体之间的关系,标明一对一、一对多还是多对多。 多对多请明确指出需要中间表。
  3. 逐条检查有没有重复存储:同一个信息是否出现在多个实体里。 有的话说明为什么,或者建议怎么抽出来。
  4. 列出你不确定的地方,比如某个字段该属于哪个实体、 某个关系的多少端。逐条问我,不要自己决定。
  5. 哪些字段将来可能需要被搜索或筛选,据此说明为什么 不能把它们塞进一个大文本字段里。

另外:所有实体都加 created_at 和软删除标记。 我确认之后再写代码。

第五条是提前防坑。AI 为了让界面好写,很容易把几个信息拼成一个字段,等你要做筛选时才发现拆不开。

接着看

理解技术 表和关联是怎么回事,那一篇用两张真实的表演示了一对多。看不懂这里可以先去补。

内容清单 数据模型的原料。清单里的每一条信息,最后都要落到某个实体的某个字段上。

先规格后代码 规格的第一块就是数据。这一篇讲的是那一块具体该怎么定。