数据字段怎么写

数据字段是产品需求的底层骨架。无论你在做一个电商后台、一个 AI 写作工具,还是一个 SaaS 管理平台,最终所有功能都会落到一张表上:哪个字段、什么类型、能不能为空、默认值是什么、跟其他字段什么关系。把这些写清楚了,开发才能动手,测试才有标准,验收才有依据。

很多产品经理在写 PRD 时,功能描述、交互流程、页面原型都画得很细,但一到数据字段部分就含糊带过,甚至只写「这里需要展示用户信息」这样一句话。结果开发阶段频繁返工——每个人对「用户信息」的理解不一样,做出来的东西自然也不一样。

这篇文章面向零基础读者,从数据模型的基本概念讲起,一步步带你掌握字段定义的标准格式、关系类型、数据字典模板,以及如何在需求文档里把数据字段写清楚。

为什么小白也要懂数据字段

你可能觉得数据字段是开发的事,产品经理只要画好原型就够了。但实际工作中,你会遇到这些场景:

  • 和开发对齐需求时,开发问你「这个字段是单选还是多选?最大长度多少?允不允许为空?」你答不上来,需求就卡住了。
  • 评审 PRD 时,开发拿着你的文档说「这里写了要展示用户信息,但具体哪些字段没写」,你临时想不全面,评审效率大打折扣。
  • 做数据后台时,运营说「我需要看用户的付费状态」,你需要把这个需求翻译成「订单表里的 status 字段 + 用户表里的 paid_at 字段」,如果你不懂字段,就没法和数据团队沟通。
  • 设计 AI 产品时,你需要定义 Prompt 的输入输出结构、定义 AI 生成的内容要存哪些字段、定义审核状态怎么流转——这些全是数据字段。

懂数据字段不需要你会写 SQL,也不需要你会建数据库表。你需要的是:知道有哪些概念、知道怎么描述一个字段、知道字段之间是什么关系。有了这些基础,你就能在需求文档里写出开发能直接用的数据规格,沟通效率会有质的提升。

数据模型基础概念

在写数据字段之前,先理解三个基础概念:实体(Entity)、属性(Attribute)和关系(Relationship)。

实体(Entity)

实体就是你要描述的「东西」。在 AI 产品出海场景中,常见的实体有:

  • 用户(User):注册和使用产品的人
  • 剧本(Script):用户创建的漫画剧本
  • 分镜(Storyboard):剧本中的每一页分镜
  • 订单(Order):用户付费订阅或购买的记录
  • 角色(Character):剧本中出现的漫画角色

实体不是数据库表,你可以把它理解为「一类事物的抽象」。当你在需求文档里写「我们需要支持用户上传头像」时,「用户」就是一个实体,「头像」是这个实体的一个属性。

属性(Attribute)

属性是实体身上需要记录的「信息项」。以「用户」实体为例:

  • 用户名(username)
  • 邮箱(email)
  • 头像地址(avatar_url)
  • 注册时间(created_at)
  • 订阅状态(subscription_status)

每个属性最终会落地为一个数据字段。在需求文档中,你不需要用「属性」这个词,直接说「字段」就好,开发会理解你的意思。

三层数据模型

数据模型有三个层次,产品经理主要关注第一层就够了:

层次关注什么谁用你需要懂多少
概念模型(Conceptual)有哪些实体、实体之间什么关系产品经理、业务方必须掌握
逻辑模型(Logical)字段名、类型、主外键产品经理 + 开发了解字段定义格式即可
物理模型(Physical)索引、分区、存储引擎开发、DBA知道概念就行

概念模型回答「有什么」,逻辑模型回答「怎么定义」,物理模型回答「怎么实现」。你写需求文档时,写到逻辑模型这一层就够了——定义清楚字段名、类型、约束,开发就能建表。

字段定义的标准格式

一个字段在需求文档中至少要包含以下信息:

信息项说明示例
字段名字段的英文标识,用 snake_case 格式subscription_status
显示名称界面上展示给用户的名称订阅状态
数据类型字段存储的数据种类枚举(enum)
是否必填创建或更新时是否必须提供
默认值未提供时的默认取值free
取值范围可选值的枚举列表或数值区间free / starter / pro / enterprise
业务说明这个字段在业务上是什么意思、怎么使用用户当前的订阅等级,影响功能权限

补充几点容易忽略的细节:

字段命名用英文 snake_case(小写字母加下划线),不要用中文。字段名是给开发看的标识符,中文只在「显示名称」里用。如果团队习惯用 camelCase 也可以,但要统一。

数据类型不需要你写得很专业,用开发能理解的常见类型就好。下面是产品经理常用的数据类型对照:

数据类型适用场景示例
字符串(string)名称、标题、描述等文本内容剧本标题:我的第一本漫画
整数(integer)计数、序号、ID分镜页码:123
浮点数(decimal)金额、比例等需要小数的数值订单金额:9.99
布尔值(boolean)是/否、开/关两种状态是否公开:true / false
枚举(enum)固定选项列表,比如状态、类型订阅状态:free / pro
日期(date)只需要日期,不需要时间注册日期:2026-07-01
时间戳(datetime)需要精确到具体时间的场景最后登录:2026-07-01 14:30:00
文本(text)长文本,比如正文、备注剧本内容:可能上千字
JSON结构不固定的灵活数据AI 生成参数:{ "style": "manga", "ratio": "16:9" }

是否必填默认值要一起看。如果一个字段是必填的,那默认值就没有意义。如果一个字段不是必填的,那就要写清楚不提供时的行为——是用默认值,还是留空(null)。

取值范围在枚举类型时特别重要。不要只写「状态」两个字就结束,要把所有可能的状态值列出来。如果有些状态你还没想清楚,至少写上当前已知的,并标注「后续可能扩展」。

字段之间的关系

现实世界中的事物不是孤立的,数据字段之间也是。理解字段关系,能帮你把需求写得更完整。

一对一(One-to-One)

一个实体对应另一个实体的唯一一条记录。比如:

  • 一个用户对应一个订阅记录
  • 一个剧本对应一个封面图片

在需求文档中,你不需要画 ER 图,只要写清楚「用户表和订阅表通过 user_id 关联,一个用户只能有一条活跃的订阅记录」就行。

一对多(One-to-Many)

这是最常见的关系。一个实体可以有多条关联记录。比如:

  • 一个用户可以创建多个剧本
  • 一个剧本可以包含多个分镜
  • 一个分镜可以有多条 AI 生成的图片

写需求文档时,要说清楚「多」的那一端最多能有多少条。一个用户可以创建「无限个」剧本?还是最多 100 个?这个限制直接影响产品设计和技术实现。

多对多(Many-to-Many)

双方都可以有多个对应关系。比如:

  • 一个剧本可以有多个角色,一个角色也可以出现在多个剧本中
  • 一个用户可以有多个标签,一个标签下也可以有多个用户

多对多关系通常需要一个中间表来管理。你在需求文档中只需要描述业务语义:「一个角色可以属于多个剧本,一个剧本也可以包含多个角色」,开发会知道需要建中间表。

关系类型对照

关系类型业务含义需求文档中的写法典型例子
一对一A 对应唯一的 B用 user_id 关联,一条记录只能对应一条用户 ↔ 订阅
一对多A 对应多个 BA 的列表页展示 B,需要说明数量限制用户 → 剧本
多对多A 和 B 互相多对多需要中间关系表,说明关联属性剧本 ↔ 角色
自引用A 关联自身父子关系、树形结构分类 → 子分类

数据字典模板

数据字典(Data Dictionary)是对所有字段的集中描述。它是需求文档的组成部分,也可以单独维护为一个文档。

下面是一个可以直接套用的模板,以「剧本(Script)」实体为例:

实体名称:script(剧本)

说明:用户创建的漫画剧本,是平台的核心创作单元。

字段名显示名称数据类型必填默认值取值范围业务说明
id剧本 IDstring (UUID)自动生成全局唯一标识
user_id创建者 IDstring (UUID)关联用户表
title剧本标题string1-200 字符展示在列表和详情页
description剧本简介textnull最多 2000 字符展示在详情页和分享页
status剧本状态enumdraftdraft / published / archived控制是否对外可见
genre题材类型enumnullromance / action / fantasy / scifi / comedy / horror用于分类和推荐
cover_url封面图片地址string (URL)null列表页缩略图
page_count分镜总页数integer00-500创建时为空,添加分镜后自动更新
is_public是否公开booleanfalsetrue / falsefalse 时仅创建者可见
ai_modelAI 生成模型stringnull记录使用的 AI 模型,用于溯源
created_at创建时间datetime当前时间按创建时间排序
updated_at更新时间datetime当前时间每次修改自动更新

这个模板可以直接放进 Notion、飞书文档或者 Confluence 中维护。建议每个核心实体一个表格,在 PRD 中通过链接引用,避免信息散落。

实战案例

案例一:AI 漫画角色的数据字段设计

假设你正在做一个 AI 漫画平台,需要设计「漫画角色(Character)」的字段。

先想清楚业务问题:

  1. 角色需要哪些基本信息?名字、描述、头像
  2. 角色由谁创建?需要关联用户
  3. 角色属于哪个剧本?一个角色可以出现在多个剧本中
  4. 角色的外观怎么描述?需要给 AI 用的提示词
  5. 角色有版本概念吗?需要记录 AI 生成的历史版本吗?

基于这些问题,字段定义如下:

字段名显示名称数据类型必填默认值取值范围业务说明
id角色 IDstring (UUID)自动生成全局唯一
user_id创建者 IDstring (UUID)关联用户表
name角色名称string1-50 字符在分镜中引用时的显示名
description角色描述textnull最多 1000 字符角色的背景故事和性格
visual_prompt外观提示词text1-500 字符传给 AI 图像生成的提示词
avatar_url角色头像string (URL)null角色的默认头像
status角色状态enumactiveactive / archived归档后不可在分镜中引用
created_at创建时间datetime当前时间
updated_at更新时间datetime当前时间

注意 visual_prompt 字段。这是一个 AI 产品特有的字段类型——它不是简单的描述文本,而是有特定格式要求的提示词。在业务说明中需要补充格式规范,比如「使用英文,包含外貌、服装、风格关键词,用逗号分隔」。

角色和剧本是多对多关系,需要一张中间表 script_characters

字段名显示名称数据类型必填默认值取值范围业务说明
id关联 IDstring (UUID)自动生成
script_id剧本 IDstring (UUID)关联剧本表
character_id角色 IDstring (UUID)关联角色表
role_type角色类型enumsupportingmain / supporting / cameo在剧本中的戏份
created_at关联时间datetime当前时间

案例二:出海订阅付费的数据字段设计

AI 产品出海几乎绕不开订阅付费。假设你的产品有四种订阅等级:免费版、入门版、专业版、企业版,需要设计订单表的字段。

业务问题:

  1. 订单关联谁?用户
  2. 订单金额怎么存?用小数还是整数?(涉及不同币种)
  3. 支付方式有哪些?Stripe、PayPal?
  4. 订单状态怎么流转?待支付 → 已支付 → 已取消?
  5. 退款怎么处理?需要单独记录吗?

字段定义:

字段名显示名称数据类型必填默认值取值范围业务说明
id订单 IDstring (UUID)自动生成全局唯一,对客展示用短 ID
user_id用户 IDstring (UUID)关联用户表
plan订阅方案enumfree / starter / pro / enterprise购买的方案等级
amount订单金额(分)integer> 0以最小货币单位存储,避免浮点精度问题
currency币种enumUSDUSD / EUR / GBP / JPY出海多币种支持
payment_method支付方式enumstripe / paypal / apple_pay记录支付渠道
payment_id第三方支付流水号stringnullStripe 或 PayPal 返回的交易 ID
status订单状态enumpendingpending / paid / failed / cancelled / refunded状态流转见流程图
paid_at支付成功时间datetimenull仅在 status 为 paid 时有值
expires_at到期时间datetime订阅过期时间
auto_renew是否自动续费booleantruetrue / false用户可随时关闭
created_at创建时间datetime当前时间

注意 amount 字段。金额不要存 9.99 这样的浮点数,而是存 999(以分为单位)。这是支付领域的通用做法,可以避免浮点数精度导致的对账错误。

数据字段设计流程

下面用 Mermaid 流程图展示从需求到字段定义的完整过程:

流程图画布 · 115%
Mermaid 流程图加载中...

关键节点说明:

  1. 明确业务场景:不要上来就写字段,先搞清楚这个模块要解决什么业务问题。
  2. 识别核心实体:从业务流程中提取关键对象——用户、订单、内容、配置等。
  3. 列出属性:针对每个实体,问自己「这个对象需要记录哪些信息?」
  4. 确定类型和约束:每个属性用什么类型存储、是否必填、默认值是什么。
  5. 梳理关系:实体之间怎么关联,一对一、一对多还是多对多。
  6. 编写数据字典:把以上内容整理成表格。
  7. 与开发评审:这一步不能省,开发会帮你发现遗漏和不合理的地方。

数据字段检查清单

写完数据字段后,用以下清单逐项检查:

  • 每个字段都有明确的字段名(英文 snake_case)和显示名称(中文)
  • 每个字段都标注了数据类型,且类型选择合理
  • 枚举类型字段列出了所有可能的取值,不留「其他」这种模糊选项
  • 每个字段都标注了是否必填(Required / Optional)
  • 非必填字段标注了默认值或明确说明「允许为空(null)」
  • 字符串类字段标注了最大长度限制
  • 金额类字段使用整数存储(最小货币单位),避免浮点数
  • 时间类字段统一使用 UTC 时间戳,避免时区问题
  • 实体之间的关系已梳理清楚,一对一、一对多、多对多都标注了
  • 关联字段(如 user_id、script_id)标注了关联的目标表
  • 字段命名风格统一(snake_case 或 camelCase,不要混用)
  • 敏感字段(密码、token 等)标注了加密要求,且不出现在数据字典中
  • 数据字典已与开发团队评审确认
  • 字段定义覆盖了 CRUD 全场景——创建时哪些必填、更新时哪些可改、删除时的级联规则

常见错误与避坑

错误一:只写「状态」,不写取值范围

不要写 status: 状态 就结束了。必须写明 status: draft / published / archived。不写取值范围,开发只能自己猜,猜出来的结果大概率和你想要的不一样。

错误二:字段命名不统一

同一个概念在不同表里叫不同名字——用户表叫 created_time,订单表叫 create_at,剧本表叫 gmt_created。统一命名是团队协作的基础,建议在项目规范文档里定义好命名约定。

错误三:忽略字段级联关系

用户被删除了,他创建的剧本怎么办?分镜怎么办?订单怎么办?字段定义时要考虑级联规则——是级联删除、置空还是软删除。这个问题不在字段表里写,也要在业务规则里写。

错误四:出海产品忽略多语言和时区

做多语言产品时,展示类字段(标题、描述)需要考虑多语言支持。是存一份内容用多语言字段,还是每个语言存一份?时区问题更常见——用户在不同时区看到的「今天」不是同一天,时间展示要统一用 UTC 存储、前端转换。

参考资料

  1. 数据产品经理基础技能:数据需求说明文档怎么写? — 人人都是产品经理,系统讲解数据需求文档的结构和写法
  2. 怎样写好 B 端产品需求文档 — 知乎专栏,B 端需求文档中字段定义的规范说明
  3. Data Dictionary: Components, Examples, Implementation — Atlan,数据字典的组成要素和实际案例
  4. Data Dictionary Examples & Templates — OvalEdge,数据字典模板和最佳实践
  5. How to Data Model Without Getting Too Technical — Bridging the Gap,面向非技术人员的数据建模指南
  6. Data Modeling Dos and Don'ts — XTIVIA,数据建模的常见误区和正确做法
  7. What is a PRD? - Agile - Atlassian — Atlassian,PRD 编写指南,数据需求在其中的定位
  8. 软件开发需求文档怎么写 — 红山科技,需求文档中数据字段的规范写法