yii开发crm需围绕业务流转建模:客户分三层(主体、联系人、地址/联系方式),动态记录带上下文(source_type+source_id追溯)、结构化字段;主表加tenant_id、custom_fields_json、version;关键索引不可少。

用Yii开发CRM系统,数据表设计不是堆字段,而是围绕业务流转建模。核心是让客户、联系人、跟进记录、服务工单这些实体之间能自然关联,同时支撑后续的权限控制、统计分析和扩展集成。
以客户为中心,分层设计主干表
不要把所有信息塞进一张customers表。推荐拆成三层:
-
客户主体表(customer):存公司级信息,如
name、industry、scale、status(潜在/成交/流失)、owner_id(归属销售) -
联系人表(contact):一对一或一对多挂接,字段包括
customer_id、full_name、position、mobile、is_primary -
地址与联系方式表(address / contact_method):支持多个办公地址、多种联络方式(微信、邮箱、固话),用
type字段区分类型,便于后期做渠道分析
活动与服务记录必须带上下文
跟进记录(activity)、服务工单(service_ticket)、投诉(complaint)这类动态数据,光有内容不够,要自带“谁在什么时候对哪个客户做了什么”:
- 每条记录都包含
customer_id、contact_id(可为空)、created_by、created_at、updated_at - 加一个
source_type+source_id组合字段,比如值为'lead'+123,表示该跟进来自某条销售线索;这样线索转客户后,历史动作仍可追溯 - 避免用大文本字段存“备注”,而是结构化字段:如
next_step、next_time、result_status(待回复/已预约/已签约)
权限与扩展留好接口字段
Yii的RBAC权限体系依赖数据隔离,表结构要配合:
- 所有主业务表(客户、工单、合同等)都加
tenant_id字段,哪怕当前是单租户,也为将来SaaS化铺路 - 预留
custom_fields_json字段(TEXT类型),不强行预设扩展字段,而是用JSON存用户自定义属性,配合后台配置界面动态读写 - 关键操作加
version或revision字段,方便做数据变更审计或乐观锁控制
索引不是越多越好,但这几个必须有
Yii ActiveRecord查询频繁,没索引的WHERE条件会拖慢整个系统:
-
customer表:联合索引(owner_id, status, created_at)——用于销售看板按归属+状态+时间筛选 -
activity表:索引(customer_id, created_at)和(created_by, created_at)——分别支撑客户时间线和员工工作台 - 所有外键字段单独建索引,如
contact.customer_id、service_ticket.customer_id - 避免在
LIKE '%xxx'字段上建索引,真要模糊查就用全文索引或ES同步











