CRM系统的数据库结构详细设计
- 基础管理模块表设计
-- 用户表
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)
);-- 角色表
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
);-- 权限表
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,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);-- 部门表
CREATE TABLE sys_department (id BIGINT PRIMARY KEY AUTO_INCREMENT,parent_id BIGINT COMMENT '父部门ID',dept_name VARCHAR(50) NOT NULL COMMENT '部门名称',dept_code VARCHAR(50) NOT NULL COMMENT '部门编码',leader VARCHAR(50) COMMENT '负责人',phone VARCHAR(20) COMMENT '联系电话',email VARCHAR(100) COMMENT '邮箱',status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
- 客户管理模块表设计
-- 客户表
CREATE TABLE crm_customer (id BIGINT PRIMARY KEY AUTO_INCREMENT,customer_name VARCHAR(100) NOT NULL COMMENT '客户名称',customer_code VARCHAR(50) COMMENT '客户编码',customer_type TINYINT COMMENT '客户类型:1-个人,2-企业',industry VARCHAR(50) COMMENT '所属行业',source VARCHAR(50) COMMENT '客户来源',level TINYINT COMMENT '客户等级:1-普通,2-重要,3-VIP',status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',address VARCHAR(200) COMMENT '地址',website VARCHAR(200) COMMENT '网站',description TEXT COMMENT '描述',owner_id BIGINT COMMENT '负责人ID',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);-- 联系人表
CREATE TABLE crm_contact (id BIGINT PRIMARY KEY AUTO_INCREMENT,customer_id BIGINT NOT NULL COMMENT '客户ID',name VARCHAR(50) NOT NULL COMMENT '联系人姓名',position VARCHAR(50) COMMENT '职位',mobile VARCHAR(20) COMMENT '手机号',email VARCHAR(100) COMMENT '邮箱',is_primary TINYINT DEFAULT 0 COMMENT '是否主要联系人:0-否,1-是',status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);-- 客户标签表
CREATE TABLE crm_customer_tag (id BIGINT PRIMARY KEY AUTO_INCREMENT,customer_id BIGINT NOT NULL COMMENT '客户ID',tag_name VARCHAR(50) NOT NULL COMMENT '标签名称',created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
- 销售管理模块表设计
-- 商机表
CREATE TABLE crm_opportunity (id BIGINT PRIMARY KEY AUTO_INCREMENT,customer_id BIGINT NOT NULL COMMENT '客户ID',opportunity_name VARCHAR(100) NOT NULL COMMENT '商机名称',amount DECIMAL(15,2) COMMENT '商机金额',expected_date DATE COMMENT '预计成交日期',stage TINYINT COMMENT '商机阶段:1-初步接触,2-需求确认,3-方案报价,4-商务谈判,5-赢单,6-输单',probability INT COMMENT '成交概率',owner_id BIGINT COMMENT '负责人ID',description TEXT COMMENT '描述',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);-- 报价表
CREATE TABLE crm_quotation (id BIGINT PRIMARY KEY AUTO_INCREMENT,opportunity_id BIGINT NOT NULL COMMENT '商机ID',quotation_no VARCHAR(50) NOT NULL COMMENT '报价单号',amount DECIMAL(15,2) NOT NULL COMMENT '报价金额',valid_date DATE COMMENT '有效期',status TINYINT COMMENT '状态:1-草稿,2-已提交,3-已审核,4-已拒绝',created_by BIGINT COMMENT '创建人ID',approved_by BIGINT COMMENT '审核人ID',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);-- 合同表
CREATE TABLE crm_contract (id BIGINT PRIMARY KEY AUTO_INCREMENT,customer_id BIGINT NOT NULL COMMENT '客户ID',contract_no VARCHAR(50) NOT NULL COMMENT '合同编号',contract_name VARCHAR(100) NOT NULL COMMENT '合同名称',amount DECIMAL(15,2) NOT NULL COMMENT '合同金额',start_date DATE COMMENT '开始日期',end_date DATE COMMENT '结束日期',status TINYINT COMMENT '状态:1-草稿,2-已提交,3-已审核,4-已生效,5-已完成,6-已终止',created_by BIGINT COMMENT '创建人ID',approved_by BIGINT COMMENT '审核人ID',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
- 客户服务模块表设计
-- 工单表
CREATE TABLE crm_ticket (id BIGINT PRIMARY KEY AUTO_INCREMENT,customer_id BIGINT NOT NULL COMMENT '客户ID',ticket_no VARCHAR(50) NOT NULL COMMENT '工单编号',title VARCHAR(200) NOT NULL COMMENT '工单标题',type TINYINT COMMENT '工单类型:1-咨询,2-投诉,3-建议,4-其他',priority TINYINT COMMENT '优先级:1-低,2-中,3-高,4-紧急',status TINYINT COMMENT '状态:1-待处理,2-处理中,3-已完成,4-已关闭',content TEXT COMMENT '工单内容',created_by BIGINT COMMENT '创建人ID',assigned_to BIGINT COMMENT '处理人ID',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);-- 知识库表
CREATE TABLE crm_knowledge (id BIGINT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(200) NOT NULL COMMENT '标题',category VARCHAR(50) COMMENT '分类',content TEXT COMMENT '内容',tags VARCHAR(200) COMMENT '标签',view_count INT DEFAULT 0 COMMENT '浏览次数',created_by BIGINT COMMENT '创建人ID',status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
- 市场营销模块表设计
-- 营销活动表
CREATE TABLE crm_campaign (id BIGINT PRIMARY KEY AUTO_INCREMENT,campaign_name VARCHAR(100) NOT NULL COMMENT '活动名称',type TINYINT COMMENT '活动类型:1-线上,2-线下',start_date DATE COMMENT '开始日期',end_date DATE COMMENT '结束日期',budget DECIMAL(15,2) COMMENT '预算',status TINYINT COMMENT '状态:1-计划中,2-进行中,3-已完成,4-已取消',description TEXT COMMENT '描述',created_by BIGINT COMMENT '创建人ID',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);-- 营销目标客户表
CREATE TABLE crm_campaign_target (id BIGINT PRIMARY KEY AUTO_INCREMENT,campaign_id BIGINT NOT NULL COMMENT '活动ID',customer_id BIGINT NOT NULL COMMENT '客户ID',status TINYINT COMMENT '状态:1-待联系,2-已联系,3-已转化,4-已放弃',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
- 数据分析模块表设计
-- 销售统计表
CREATE TABLE crm_sales_statistics (id BIGINT PRIMARY KEY AUTO_INCREMENT,stat_date DATE NOT NULL COMMENT '统计日期',user_id BIGINT NOT NULL COMMENT '用户ID',new_customers INT DEFAULT 0 COMMENT '新增客户数',new_opportunities INT DEFAULT 0 COMMENT '新增商机数',won_opportunities INT DEFAULT 0 COMMENT '赢单数',sales_amount DECIMAL(15,2) DEFAULT 0 COMMENT '销售金额',created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);-- 客户分析表
CREATE TABLE crm_customer_analysis (id BIGINT PRIMARY KEY AUTO_INCREMENT,customer_id BIGINT NOT NULL COMMENT '客户ID',total_orders INT DEFAULT 0 COMMENT '总订单数',total_amount DECIMAL(15,2) DEFAULT 0 COMMENT '总消费金额',last_order_date DATE COMMENT '最后订单日期',customer_value TINYINT COMMENT '客户价值:1-低,2-中,3-高',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
- 工作流模块表设计
-- 工作流定义表
CREATE TABLE crm_workflow (id BIGINT PRIMARY KEY AUTO_INCREMENT,workflow_name VARCHAR(100) NOT NULL COMMENT '工作流名称',workflow_type VARCHAR(50) NOT NULL COMMENT '工作流类型',status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',created_by BIGINT COMMENT '创建人ID',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);-- 工作流节点表
CREATE TABLE crm_workflow_node (id BIGINT PRIMARY KEY AUTO_INCREMENT,workflow_id BIGINT NOT NULL COMMENT '工作流ID',node_name VARCHAR(100) NOT NULL COMMENT '节点名称',node_type VARCHAR(50) NOT NULL COMMENT '节点类型',approver_type TINYINT COMMENT '审批人类型:1-指定人,2-角色,3-部门',approver_id BIGINT COMMENT '审批人ID',created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
- 系统日志表设计
-- 操作日志表
CREATE TABLE sys_operation_log (id BIGINT PRIMARY KEY AUTO_INCREMENT,user_id BIGINT COMMENT '用户ID',module VARCHAR(50) COMMENT '模块',operation VARCHAR(50) COMMENT '操作',method VARCHAR(100) COMMENT '方法',params TEXT COMMENT '参数',ip VARCHAR(50) COMMENT 'IP地址',status TINYINT COMMENT '状态:0-失败,1-成功',error_msg TEXT COMMENT '错误信息',created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);-- 登录日志表
CREATE TABLE sys_login_log (id BIGINT PRIMARY KEY AUTO_INCREMENT,user_id BIGINT COMMENT '用户ID',username VARCHAR(50) COMMENT '用户名',ip VARCHAR(50) COMMENT 'IP地址',location VARCHAR(100) COMMENT '登录地点',browser VARCHAR(50) COMMENT '浏览器',os VARCHAR(50) COMMENT '操作系统',status TINYINT COMMENT '状态:0-失败,1-成功',msg VARCHAR(200) COMMENT '提示信息',created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
数据库设计建议:
- 索引优化
- 为常用查询字段创建索引
- 避免过多索引影响写入性能
- 定期维护索引
- 字段设计
- 使用合适的字段类型
- 设置适当的字段长度
- 添加必要的约束
- 表关系
- 合理设计外键关系
- 注意级联操作
- 考虑数据完整性
- 性能优化
- 分表策略
- 读写分离
- 缓存策略
- 安全考虑
- 敏感数据加密
- 访问权限控制
- 数据备份策略
这个数据库设计涵盖了CRM系统的主要功能模块,可以根据实际需求进行调整和扩展。建议在实施过程中:
- 先创建核心表
- 逐步添加功能表
- 注意数据迁移
- 做好版本控制
- 定期优化维护