CRM系统数据库表结构设计方案
1. 设计概述
本文档提供一套完整的CRM(客户关系管理)系统数据库表结构设计,涵盖以下核心模块:
- 基础管理(用户、角色、权限)
- 客户管理(客户信息、联系人)
- 销售管理(线索、商机、订单、合同)
- 跟进管理(跟进记录、活动)
- 产品管理
- 系统设置(数据字典、配置)
2. 详细表结构设计
2.1 基础管理模块
2.1.1 用户表(sys_user)
CREATE TABLE sys_user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL COMMENT '用户名',
password VARCHAR(100) NOT NULL COMMENT '密码',
real_name VARCHAR(50) COMMENT '真实姓名',
email VARCHAR(100) COMMENT '邮箱',
mobile VARCHAR(20) COMMENT '手机号',
avatar VARCHAR(200) COMMENT '头像',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
dept_id BIGINT COMMENT '部门ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_username (username)
);
2
2.1.2 部门表(sys_department)
CREATE TABLE sys_department (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
dept_name VARCHAR(50) NOT NULL COMMENT '部门名称',
parent_id BIGINT DEFAULT 0 COMMENT '父部门ID',
leader_id BIGINT COMMENT '部门负责人ID',
sort INT DEFAULT 0 COMMENT '排序',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
2.1.3 角色表(sys_role)
CREATE TABLE sys_role (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
role_name VARCHAR(50) NOT NULL COMMENT '角色名称',
role_code VARCHAR(50) NOT NULL COMMENT '角色编码',
description VARCHAR(200) COMMENT '角色描述',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
2
2.1.4 用户角色关联表(sys_user_role)
CREATE TABLE sys_user_role (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
role_id BIGINT NOT NULL COMMENT '角色ID',
UNIQUE KEY uk_user_role (user_id, role_id)
);
2.1.5 权限表(sys_permission)
CREATE TABLE sys_permission (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
parent_id BIGINT COMMENT '父权限ID',
name VARCHAR(50) NOT NULL COMMENT '权限名称',
permission_code VARCHAR(50) NOT NULL COMMENT '权限编码',
type TINYINT COMMENT '类型:1-菜单,2-按钮',
path VARCHAR(200) COMMENT '路径',
component VARCHAR(200) COMMENT '组件',
icon VARCHAR(50) COMMENT '图标',
sort INT DEFAULT 0 COMMENT '排序',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
2
2.1.6 角色权限关联表(sys_role_permission)
CREATE TABLE sys_role_permission (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
role_id BIGINT NOT NULL COMMENT '角色ID',
permission_id BIGINT NOT NULL COMMENT '权限ID',
UNIQUE KEY uk_role_permission (role_id, permission_id)
);
2.2 客户管理模块
2.2.1 客户表(crm_customer)
CREATE TABLE crm_customer (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
customer_no VARCHAR(50) NOT NULL COMMENT '客户编号',
customer_name VARCHAR(100) NOT NULL COMMENT '客户名称',
industry_id BIGINT COMMENT '所属行业ID',
level_id BIGINT COMMENT '客户等级ID',
source_id BIGINT COMMENT '客户来源ID',
region_id BIGINT COMMENT '所在地区ID',
address VARCHAR(200) COMMENT '详细地址',
website VARCHAR(100) COMMENT '网址',
telephone VARCHAR(50) COMMENT '电话',
fax VARCHAR(50) COMMENT '传真',
email VARCHAR(100) COMMENT '邮箱',
postal_code VARCHAR(20) COMMENT '邮政编码',
legal_person VARCHAR(50) COMMENT '法人代表',
registered_capital DECIMAL(18,2) COMMENT '注册资金(万元)',
annual_turnover DECIMAL(18,2) COMMENT '年营业额(万元)',
license_no VARCHAR(50) COMMENT '营业执照编号',
tax_no VARCHAR(50) COMMENT '税务登记号',
bank_account VARCHAR(100) COMMENT '银行账户',
bank_name VARCHAR(100) COMMENT '开户银行',
status TINYINT DEFAULT 1 COMMENT '状态:1-正常,2-流失,3-注销',
owner_id BIGINT NOT NULL COMMENT '负责人ID',
create_by BIGINT NOT NULL COMMENT '创建人ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_customer_no (customer_no)
);
5
2.2.2 联系人表(crm_contact)
CREATE TABLE crm_contact (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
customer_id BIGINT NOT NULL COMMENT '客户ID',
contact_name VARCHAR(50) NOT NULL COMMENT '联系人姓名',
position VARCHAR(50) COMMENT '职位',
sex TINYINT COMMENT '性别:0-男,1-女',
mobile VARCHAR(20) COMMENT '手机号',
telephone VARCHAR(50) COMMENT '电话',
email VARCHAR(100) COMMENT '邮箱',
wechat VARCHAR(50) COMMENT '微信',
qq VARCHAR(20) COMMENT 'QQ',
birthday DATE COMMENT '生日',
is_primary TINYINT DEFAULT 0 COMMENT '是否主联系人:0-否,1-是',
remark VARCHAR(200) COMMENT '备注',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
5
2.3 销售管理模块
2.3.1 线索表(crm_lead)
CREATE TABLE crm_lead (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
lead_no VARCHAR(50) NOT NULL COMMENT '线索编号',
lead_name VARCHAR(100) NOT NULL COMMENT '线索名称',
source_id BIGINT COMMENT '线索来源ID',
industry_id BIGINT COMMENT '所属行业ID',
contact_name VARCHAR(50) COMMENT '联系人姓名',
contact_phone VARCHAR(20) COMMENT '联系电话',
contact_email VARCHAR(100) COMMENT '联系邮箱',
budget DECIMAL(18,2) COMMENT '预算',
status TINYINT DEFAULT 1 COMMENT '状态:1-新建,2-跟进中,3-已转化,4-已放弃',
next_follow_time DATETIME COMMENT '下次跟进时间',
owner_id BIGINT NOT NULL COMMENT '负责人ID',
create_by BIGINT NOT NULL COMMENT '创建人ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_lead_no (lead_no)
);
1
2.3.2 商机表(crm_opportunity)
CREATE TABLE crm_opportunity (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
oppo_no VARCHAR(50) NOT NULL COMMENT '商机编号',
customer_id BIGINT NOT NULL COMMENT '客户ID',
contact_id BIGINT COMMENT '联系人ID',
oppo_name VARCHAR(100) NOT NULL COMMENT '商机名称',
stage_id BIGINT COMMENT '销售阶段ID',
expected_amount DECIMAL(18,2) COMMENT '预计金额',
expected_close_date DATE COMMENT '预计成交日期',
win_rate INT DEFAULT 0 COMMENT '赢单率(%)',
source_id BIGINT COMMENT '商机来源ID',
status TINYINT DEFAULT 1 COMMENT '状态:1-进行中,2-已赢单,3-已输单',
next_follow_time DATETIME COMMENT '下次跟进时间',
owner_id BIGINT NOT NULL COMMENT '负责人ID',
create_by BIGINT NOT NULL COMMENT '创建人ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_oppo_no (oppo_no)
);
2.3.3 订单表(crm_order)
CREATE TABLE crm_order (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_no VARCHAR(50) NOT NULL COMMENT '订单编号',
customer_id BIGINT NOT NULL COMMENT '客户ID',
contact_id BIGINT COMMENT '联系人ID',
oppo_id BIGINT COMMENT '关联商机ID',
contract_id BIGINT COMMENT '关联合同ID',
total_amount DECIMAL(18,2) NOT NULL COMMENT '订单总金额',
actual_amount DECIMAL(18,2) DEFAULT 0 COMMENT '实际回款金额',
order_date DATE COMMENT '订单日期',
delivery_date DATE COMMENT '预计交付日期',
order_status TINYINT DEFAULT 1 COMMENT '订单状态:1-待审核,2-已审核,3-已取消,4-已完成',
payment_status TINYINT DEFAULT 1 COMMENT '支付状态:1-待付款,2-部分付款,3-已付款',
owner_id BIGINT NOT NULL COMMENT '负责人ID',
create_by BIGINT NOT NULL COMMENT '创建人ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_order_no (order_no)
);
2.3.4 订单明细表(crm_order_item)
CREATE TABLE crm_order_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_id BIGINT NOT NULL COMMENT '订单ID',
product_id BIGINT NOT NULL COMMENT '产品ID',
product_name VARCHAR(100) NOT NULL COMMENT '产品名称',
unit_price DECIMAL(18,2) NOT NULL COMMENT '单价',
quantity INT NOT NULL COMMENT '数量',
amount DECIMAL(18,2) NOT NULL COMMENT '金额',
remark VARCHAR(200) COMMENT '备注'
);
2.3.5 合同表(crm_contract)
CREATE TABLE crm_contract (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
contract_no VARCHAR(50) NOT NULL COMMENT '合同编号',
customer_id BIGINT NOT NULL COMMENT '客户ID',
oppo_id BIGINT COMMENT '关联商机ID',
contract_name VARCHAR(100) NOT NULL COMMENT '合同名称',
contract_amount DECIMAL(18,2) NOT NULL COMMENT '合同金额',
signed_date DATE COMMENT '签约日期',
start_date DATE COMMENT '合同开始日期',
end_date DATE COMMENT '合同结束日期',
contract_status TINYINT DEFAULT 1 COMMENT '合同状态:1-草稿,2-已审核,3-已生效,4-已过期,5-已终止',
payment_terms VARCHAR(200) COMMENT '付款条件',
contract_file VARCHAR(200) COMMENT '合同文件路径',
owner_id BIGINT NOT NULL COMMENT '负责人ID',
create_by BIGINT NOT NULL COMMENT '创建人ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_contract_no (contract_no)
);
2.3.6 回款计划表(crm_payment_plan)
CREATE TABLE crm_payment_plan (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
contract_id BIGINT NOT NULL COMMENT '合同ID',
plan_amount DECIMAL(18,2) NOT NULL COMMENT '计划回款金额',
actual_amount DECIMAL(18,2) DEFAULT 0 COMMENT '实际回款金额',
plan_date DATE NOT NULL COMMENT '计划回款日期',
actual_date DATE COMMENT '实际回款日期',
payment_stage VARCHAR(50) COMMENT '回款阶段',
status TINYINT DEFAULT 1 COMMENT '状态:1-未回款,2-部分回款,3-已回款',
remark VARCHAR(200) COMMENT '备注'
);
2.4 跟进管理模块
2.4.1 跟进记录表(crm_follow_up)
CREATE TABLE crm_follow_up (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
type TINYINT NOT NULL COMMENT '跟进对象类型:1-线索,2-客户,3-商机',
object_id BIGINT NOT NULL COMMENT '跟进对象ID',
content TEXT NOT NULL COMMENT '跟进内容',
follow_type TINYINT COMMENT '跟进方式:1-电话,2-邮件,3-拜访,4-会议,5-其他',
next_follow_time DATETIME COMMENT '下次跟进时间',
creator_id BIGINT NOT NULL COMMENT '创建人ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
3
2.4.2 待办活动表(crm_activity)
CREATE TABLE crm_activity (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100) NOT NULL COMMENT '活动标题',
type TINYINT COMMENT '活动类型:1-待办任务,2-会议,3-提醒',
related_type TINYINT COMMENT '关联对象类型:1-线索,2-客户,3-商机',
related_id BIGINT COMMENT '关联对象ID',
start_time DATETIME NOT NULL COMMENT '开始时间',
end_time DATETIME COMMENT '结束时间',
assign_to BIGINT COMMENT '负责人ID',
status TINYINT DEFAULT 1 COMMENT '状态:1-未开始,2-进行中,3-已完成,4-已取消',
description TEXT COMMENT '活动描述',
create_by BIGINT NOT NULL COMMENT '创建人ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
2.5 产品管理模块
2.5.1 产品分类表(crm_product_category)
CREATE TABLE crm_product_category (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
category_name VARCHAR(50) NOT NULL COMMENT '分类名称',
parent_id BIGINT DEFAULT 0 COMMENT '父分类ID',
sort INT DEFAULT 0 COMMENT '排序',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
2.5.2 产品表(crm_product)
CREATE TABLE crm_product (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
product_code VARCHAR(50) NOT NULL COMMENT '产品编码',
product_name VARCHAR(100) NOT NULL COMMENT '产品名称',
category_id BIGINT COMMENT '分类ID',
unit VARCHAR(20) COMMENT '单位',
price DECIMAL(18,2) COMMENT '销售价格',
cost_price DECIMAL(18,2) COMMENT '成本价格',
stock INT DEFAULT 0 COMMENT '库存数量',
description TEXT COMMENT '产品描述',
image VARCHAR(200) COMMENT '产品图片',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_product_code (product_code)
);
1
2.6 系统设置模块
2.6.1 数据字典表(sys_dict)
CREATE TABLE sys_dict (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
dict_name VARCHAR(50) NOT NULL COMMENT '字典名称',
dict_code VARCHAR(50) NOT NULL COMMENT '字典编码',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
description VARCHAR(200) COMMENT '描述',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
2.6.2 数据字典明细表(sys_dict_item)
CREATE TABLE sys_dict_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
dict_id BIGINT NOT NULL COMMENT '字典ID',
item_name VARCHAR(50) NOT NULL COMMENT '选项名称',
item_value VARCHAR(50) NOT NULL COMMENT '选项值',
sort INT DEFAULT 0 COMMENT '排序',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
3. 表关系图
基础管理模块
├─ sys_user ── sys_user_role ── sys_role ── sys_role_permission ── sys_permission
└─ sys_department ── sys_user
客户管理模块
├─ crm_customer ── crm_contact
└─ crm_customer ── sys_user (负责人)
销售管理模块
├─ crm_lead ── sys_user (负责人)
├─ crm_opportunity ── crm_customer
├─ crm_opportunity ── crm_contact
├─ crm_order ── crm_customer
├─ crm_order ── crm_contract
├─ crm_order ── crm_order_item ── crm_product
├─ crm_contract ── crm_customer
└─ crm_payment_plan ── crm_contract
跟进管理模块
├─ crm_follow_up ── sys_user
└─ crm_activity ── sys_user
产品管理模块
└─ crm_product ── crm_product_category
系统设置模块
└─ sys_dict ── sys_dict_item
4. 核心业务SQL示例
4.1 查询客户及其联系人
SELECT
c.customer_name, c.customer_no, c.industry_id, c.level_id, c.owner_id,
ct.contact_name, ct.position, ct.mobile, ct.email, ct.is_primary
FROM crm_customer c
LEFT JOIN crm_contact ct ON c.id = ct.customer_id
WHERE c.id = #{customerId};
4.2 查询销售漏斗数据
SELECT
sd.item_name as stage_name,
COUNT(o.id) as oppo_count,
SUM(o.expected_amount) as total_amount,
AVG(o.win_rate) as avg_win_rate
FROM crm_opportunity o
LEFT JOIN sys_dict_item sd ON o.stage_id = sd.id
WHERE o.status = 1
GROUP BY o.stage_id, sd.item_name
ORDER BY sd.sort;
4.3 查询客户跟进记录
SELECT
f.id, f.type, f.content, f.follow_type,
f.next_follow_time, f.created_at,
su.real_name as creator_name
FROM crm_follow_up f
LEFT JOIN sys_user su ON f.creator_id = su.id
WHERE f.type = 2 AND f.object_id = #{customerId}
ORDER BY f.created_at DESC;
4.4 查询订单完成情况及回款状态
SELECT
o.order_no, o.customer_id, o.total_amount, o.actual_amount,
o.order_status, o.payment_status,
c.customer_name,
(o.actual_amount / o.total_amount * 100) as payment_rate
FROM crm_order o
LEFT JOIN crm_customer c ON o.customer_id = c.id
WHERE o.order_status = 4;
5. 设计亮点
- 完整的客户生命周期管理:从线索到客户、商机、订单、合同的全流程管理
- 灵活的权限控制系统:基于RBAC模型的权限管理,支持细粒度权限控制
- 完善的数据字典:支持自定义业务数据类型,提高系统扩展性
- 丰富的跟进记录:支持多对象类型的跟进记录,保证客户信息完整
- 全面的销售管理:包含商机、订单、合同、回款等完整销售流程
- 标准化的编码规范:表名和字段命名遵循统一规范,便于维护
6. 扩展建议
- 数据备份与恢复:定期对CRM系统数据进行备份,确保数据安全
- 报表与数据分析:增加销售报表、客户分析等功能模块
- API接口扩展:提供标准化API接口,支持与其他系统集成
- 移动端适配:开发移动端应用,支持销售人员随时随地管理客户
- 定时任务:实现定时提醒、数据同步等自动化功能
- 数据导入导出:支持Excel格式的数据导入导出,方便数据迁移
此CRM系统表结构设计涵盖了企业客户关系管理的核心业务需求,可根据实际业务情况进行调整和扩展。