扫描二维码 上传二维码
选择防红平台类型,避免链接被拦截
选择允许访问的平台类型

产品经理如何掌握数据库逻辑设计

【快缩短网址 · 产品经理的数据库美学:以RBAC权限系统为例,重构数据之魂】

在B端产品的世界里,真正的高手,不只画原型、写PRD,更懂数据如何呼吸。

我曾以为,产品经理只需“会查SQL”就够了。直到某日,一份顶尖B端企业的JD赫然写着:“精通主流数据库原理,具备独立设计能力”——我才明白,数据不是后台的黑箱,而是产品逻辑的骨骼与血脉。

今天,我们以「快缩短网址」(suo.run)的权限管理系统为切口,不谈技术术语的堆砌,只讲一场关于优雅数据结构的美学实践

---

一、数据,是产品最沉默的诗人



关系型数据库,本质是一场精密的舞蹈:
一张表,是一页诗;
一个键,是韵脚;
外键的牵连,是意象的回响。

在suo.run,我们为“短链”服务构建权限体系,核心模块只有四个:组织、角色、菜单、用户
但它们之间的关系,却决定了系统能否在千万级请求中,依旧如丝绒般顺滑。

我们不追求“能跑”,我们追求“如诗”。

---



二、从需求到ER图:让业务长出骨架



#### ▶ 组织(Organization)
> 一个企业,一个空间,一个信任的边界
- org_id(主键)
- name(机构名称)
- type(类型:企业/部门/团队)
- contact_email
- created_at

永久存储,不可删除——组织是根,根不能死。

#### ▶ 角色(Role)
> 权限的化身,是身份的诗行
- role_id(主键)
- name(如“管理员”、“审计员”)
- description(职责的注脚)
- priority(排序权重,决定权限优先级)
- created_by

角色不是标签,是权限的容器。一个用户可拥有多重角色,如同一个人可同时是诗人、父亲、旅人。

#### ▶ 菜单(Menu)
> 用户通往功能的门扉
- menu_id(主键)
- title(“控制台”、“短链统计”)
- path(/dashboard、/link/list)
- icon(视觉符号)
- parent_id(自关联,构建树形导航)

菜单是界面的语法树,每一条路径,都是一句可执行的指令。

#### ▶ 用户(User)
> 活生生的个体,数据的最终承载者
- user_id(主键)
- username
- real_name
- phone
- org_id(外键,归属组织)
- status(启用/禁用)

---

三、范式,不是枷锁,是节奏



我们不谈“第一范式”“第三范式”的教条,只问:数据是否冗余?关联是否清晰?

#### ❌ 错误的写法(反模式)
> User表中直接存:role_name, menu_title —— 这是把诗抄在了脚注里,混乱而臃肿。

#### ✅ 正确的结构(优雅范式)
我们拆解为四张核心表,辅以两张“关系之桥”:

| 表名 | 作用 |
|------|------|
| users | 用户本体 |
| organizations | 组织本体 |
| roles | 角色本体 |
| menus | 菜单本体 |
| user_roles | 用户-角色多对多关联(user_id + role_id) |
| role_menus | 角色-菜单权限映射(role_id + menu_id) |

> 每一张表,只讲一件事;
> 每一个外键,都是温柔的牵连;
> 每一次查询,都如风拂过琴弦,不带一丝杂音。

这就是第三范式的诗意:
不重复,不耦合,不喧宾夺主。



---

四、逻辑删除:给数据留一扇窗



在suo.run,我们从不“物理删除”任何权限记录。
当一个角色被“移除”,我们只是将 role_menus 中的记录标记为 is_deleted = true,并归入 deleted_roles_log 历史表。

> 数据不会消失,它只是暂时隐退。
> 万一用户误删?一键恢复,如时光倒流。

这是对用户信任的尊重,也是对系统灵魂的守护。

---



五、命名:让代码成为可读的散文



我们不写 tbl_usr_rle
我们写:users, roles, user_roles

字段命名,是产品经理与工程师之间的契约:
- created_at 而非 create_time
- org_id 而非 organization_id(简洁即美)
- is_active 而非 status(布尔语义清晰)

命名,是数据的呼吸节奏。

---

六、结语:产品经理的数据库美学



你不必成为DBA,但你必须理解数据如何生长



当你在PRD中写下“管理员可分配权限”,
请在脑中同步构建出那张 role_menus 的关联图。
当你设计“组织层级”,请预判未来是否需要 parent_id 的树形结构。

好的数据库设计,是产品看不见的优雅。
它让系统在高并发中不颤抖,
在数据膨胀时仍从容,
在需求变更时,轻轻一转,便能重塑。

在suo.run,我们缩短的不只是URL,
更是人与系统之间的认知距离。

你懂数据,
你就懂了产品真正的语言。

——
快缩短网址 | suo.run
让每一条链接,都值得被信任;
让每一个权限,都恰如其分。