CRM系统数据库表结构设计方案

65 阅读11分钟

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. 设计亮点

  1. 完整的客户生命周期管理:从线索到客户、商机、订单、合同的全流程管理
  2. 灵活的权限控制系统:基于RBAC模型的权限管理,支持细粒度权限控制
  3. 完善的数据字典:支持自定义业务数据类型,提高系统扩展性
  4. 丰富的跟进记录:支持多对象类型的跟进记录,保证客户信息完整
  5. 全面的销售管理:包含商机、订单、合同、回款等完整销售流程
  6. 标准化的编码规范:表名和字段命名遵循统一规范,便于维护

6. 扩展建议

  1. 数据备份与恢复:定期对CRM系统数据进行备份,确保数据安全
  2. 报表与数据分析:增加销售报表、客户分析等功能模块
  3. API接口扩展:提供标准化API接口,支持与其他系统集成
  4. 移动端适配:开发移动端应用,支持销售人员随时随地管理客户
  5. 定时任务:实现定时提醒、数据同步等自动化功能
  6. 数据导入导出:支持Excel格式的数据导入导出,方便数据迁移

此CRM系统表结构设计涵盖了企业客户关系管理的核心业务需求,可根据实际业务情况进行调整和扩展。