再简化一轮

SalesRoomRe · 2026-08-03 · 去掉 role、去掉 user_channels:两张新表 + 两列

先拆开:这是三个独立的问题

问题答案
customer_owners 要不要 role不要
客户 ↔ 人 是不是多对多
要不要 user_channels不要 —— 但理由和 ①② 无关

你问「去掉 role 那还需要 user_channels 吗」—— 这两件事其实不相干,缠在一起才觉得乱。

① role 去掉 —— 你是对的

判据很简单:现在没有任何代码会因为 role 不同而做不同的事。 PM、开发、销售,在推送这件事上待遇完全一样 —— 都是「跟这个客户的人」,都该收到。

加一个没人读的字段= 现在就欠一笔债。以后有人看到它会问「这个要不要填」,而没人答得上来
将来真要区分呢那时候加一列即可,而且那时候才知道该怎么分。现在猜,大概率猜错

现有的 sales_owner / pm_owner / fde_owner 三个字段是 frontmatter 的历史遗留, 实际用法就是「都发」 —— 它们的区分从来没被消费过。

② 客户 ↔ 人 = 纯多对多,你说的角度对

去掉 role 之后,这张表就剩下它本来的样子:

CUSTOMERS

CUSTOMER_OWNERS

string

id

PK

string

customer_id

FK

哪家客户

string

user_id

FK

谁在跟

RUNS_USERS

一个客户 N 个人,一个人 N 个客户。两个销售一起跟 = 两行;销售 + 产品 = 也是两行。 不需要额外概念。

③ user_channels 也不要 —— 但真正的理由在这

你上一轮批的是 lark_open_id 这个列名带了 lark。那个批评是对的, 但解药不一定是建表:

耦合来自列名lark_open_id → 加 Teams 要 ALTER TABLE
解耦只需要中性列名channel_account_id → 存什么由渠道类型决定,加 Teams 不改 schema

那还要不要一对多?取决于一个事实:一个人会同时用两家 IM 吗。

我们是 per-box 单租户 —— 一个盒子 = 一个组织 = 一套 IM。
Sparticle 全员用 Lark;将来某个客户组织用 Teams,那是整个盒子用 Teams。
所以「人 ↔ 渠道账号」在一个盒子里就是一对一 —— 一列足够,不需要表。

放哪
渠道类型(lark / teams)盒子级配置 —— 它是组织的属性,不是人的
这个人在那渠道的 idusers.channel_account_id 一列

⚠️ 真到了「一人多渠道」那天(比如切换期要双发),再从一列迁到一张表 —— 那是很轻的迁移,而现在建表是为一个猜出来的需求付钱

最终 schema:两张新表 + 两列

RUNS_USERS

string

id

PK

= control.db UUID

int

cp_user

1=本组织成员

int

notify

新增 · 收不收消息

string

channel_account_id

新增 · 中性名 · 不含 lark

CUSTOMER_OWNERS

string

id

PK

string

customer_id

FK

string

user_id

FK

CUSTOMERS

DELIVERIES

string

id

PK

string

user_id

FK

发给谁

string

channel

当时走的哪条 · 留痕

string

event_type

prep summary alert

string

ref_id

meeting_id 等

string

status

sent failed

string

error

失败原因

改动
users 加 2 列notify · channel_account_id
customer_owners新表 · 纯多对多 · 两个字段
deliveries新表 · 送达台账

deliveries.channel 仍然保留 —— 它记的是当时实际走了哪条。 将来换渠道后,历史台账仍能说清楚那条消息是从哪发出去的。

对比一下,少了多少东西

版本新表被砍掉的原因
v1user_channels我先提了
v2(取消 user_channels)理由说错了(把「避免副本」说成「避免建表」)
v3user_channels + customer_owners(带 role) + deliveries你指出一对多不该压进列 —— 对,但我矫枉过正
v4customer_owners + deliveriesrole 没有消费方 · 渠道是组织级属性,per-user 是一对一

四版下来砍到最小,而每一次砍都有具体理由 —— 这个来回是值得的。

Generated as a visual answer · open in browser