|
@@ -0,0 +1,255 @@
|
|
|
|
|
+# 数据库设计文档
|
|
|
|
|
+
|
|
|
|
|
+## 概述
|
|
|
|
|
+
|
|
|
|
|
+本文档包含按照项目规范优化后的数据库表结构定义,遵循以下设计原则:
|
|
|
|
|
+- 表名和字段名使用snake_case命名法
|
|
|
|
|
+- 每个表包含自增主键id
|
|
|
|
|
+- 统一添加创建时间(created_at)和更新时间(updated_at)字段
|
|
|
|
|
+- 状态字段使用tinyint类型并明确取值含义
|
|
|
|
|
+- 添加必要的索引和外键约束
|
|
|
|
|
+- 完善字段注释说明
|
|
|
|
|
+
|
|
|
|
|
+## 表结构定义
|
|
|
|
|
+
|
|
|
|
|
+### 1. 区域数据表 (area_data)
|
|
|
|
|
+
|
|
|
|
|
+```sql
|
|
|
|
|
+CREATE TABLE area_data (
|
|
|
|
|
+ id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '区域ID',
|
|
|
|
|
+ parent_id INT UNSIGNED COMMENT '父区域ID,自引用',
|
|
|
|
|
+ name VARCHAR(100) NOT NULL COMMENT '区域名称',
|
|
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
+ INDEX idx_parent_id (parent_id)
|
|
|
|
|
+) COMMENT = '区域数据,支持层级结构';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 2. 客户表 (client)
|
|
|
|
|
+
|
|
|
|
|
+```sql
|
|
|
|
|
+CREATE TABLE client (
|
|
|
|
|
+ id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '客户ID',
|
|
|
|
|
+ company_name VARCHAR(255) NOT NULL COMMENT '客户公司名称',
|
|
|
|
|
+ area_id INT UNSIGNED COMMENT '所在区域ID,关联area_data表',
|
|
|
|
|
+ square VARCHAR(50) COMMENT '场地面积信息',
|
|
|
|
|
+ address VARCHAR(255) COMMENT '客户地址',
|
|
|
|
|
+ contact_person VARCHAR(100) COMMENT '联系人姓名',
|
|
|
|
|
+ position VARCHAR(100) COMMENT '联系人职位',
|
|
|
|
|
+ mobile VARCHAR(20) COMMENT '联系人手机号码',
|
|
|
|
|
+ zip_code VARCHAR(20) COMMENT '邮政编码',
|
|
|
|
|
+ telephone VARCHAR(20) COMMENT '联系电话',
|
|
|
|
|
+ fax VARCHAR(20) COMMENT '传真号码',
|
|
|
|
|
+ homepage VARCHAR(255) COMMENT '公司主页网址',
|
|
|
|
|
+ email VARCHAR(100) COMMENT '电子邮箱',
|
|
|
|
|
+ industry VARCHAR(100) COMMENT '所属行业',
|
|
|
|
|
+ sub_industry VARCHAR(100) COMMENT '所属子行业',
|
|
|
|
|
+ customer_type VARCHAR(50) COMMENT '客户类型',
|
|
|
|
|
+ start_date DATE COMMENT '合作起始日期',
|
|
|
|
|
+ source VARCHAR(100) COMMENT '客户来源',
|
|
|
|
|
+ description TEXT COMMENT '客户详细信息',
|
|
|
|
|
+ responsible_user_id INT UNSIGNED COMMENT '负责人用户ID',
|
|
|
|
|
+ group_id INT UNSIGNED COMMENT '客户所属群组ID',
|
|
|
|
|
+ remarks TEXT COMMENT '客户备注信息',
|
|
|
|
|
+ old_user_id INT UNSIGNED COMMENT '旧负责人用户ID',
|
|
|
|
|
+ last_updated TIMESTAMP COMMENT '最后更新时间',
|
|
|
|
|
+ share_status TINYINT DEFAULT 0 COMMENT '分享状态:0-未分享,1-已分享',
|
|
|
|
|
+ share_range INT COMMENT '分享范围',
|
|
|
|
|
+ service_level INT COMMENT '服务等级',
|
|
|
|
|
+ next_contact_time DATETIME COMMENT '下次联系时间',
|
|
|
|
|
+ oe_date DATE COMMENT 'OE日期',
|
|
|
|
|
+ he_date DATE COMMENT 'HE日期',
|
|
|
|
|
+ zone_id INT COMMENT '区域标识',
|
|
|
|
|
+ is_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '删除状态:0-未删除,1-已删除',
|
|
|
|
|
+ status TINYINT NOT NULL DEFAULT 1 COMMENT '客户状态:0-无效,1-有效',
|
|
|
|
|
+ audit_status TINYINT NOT NULL DEFAULT 0 COMMENT '审核状态:0-待审核,1-已审核,2-已拒绝',
|
|
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
+ INDEX idx_area_id (area_id),
|
|
|
|
|
+ INDEX idx_responsible_user_id (responsible_user_id),
|
|
|
|
|
+ INDEX idx_status (status),
|
|
|
|
|
+ INDEX idx_audit_status (audit_status)
|
|
|
|
|
+) COMMENT = '客户基本信息表';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 3. 费用表 (expense)
|
|
|
|
|
+
|
|
|
|
|
+```sql
|
|
|
|
|
+CREATE TABLE expense (
|
|
|
|
|
+ id VARCHAR(50) PRIMARY KEY COMMENT '费用记录ID',
|
|
|
|
|
+ expense_date DATE NOT NULL COMMENT '费用发生日期',
|
|
|
|
|
+ user_id VARCHAR(50) NOT NULL COMMENT '产生费用的用户ID',
|
|
|
|
|
+ type VARCHAR(50) NOT NULL COMMENT '费用类型',
|
|
|
|
|
+ amount DECIMAL(10, 2) NOT NULL COMMENT '费用金额',
|
|
|
|
|
+ client_id VARCHAR(50) COMMENT '关联客户ID',
|
|
|
|
|
+ project_id VARCHAR(50) COMMENT '关联项目ID',
|
|
|
|
|
+ department VARCHAR(100) COMMENT '产生费用的部门',
|
|
|
|
|
+ description TEXT COMMENT '费用描述',
|
|
|
|
|
+ status VARCHAR(50) NOT NULL COMMENT '费用状态:如审批中、已报销等',
|
|
|
|
|
+ approver VARCHAR(50) COMMENT '费用审批人ID',
|
|
|
|
|
+ approve_date DATE COMMENT '费用审批日期',
|
|
|
|
|
+ reimbursement_date DATE COMMENT '费用报销日期',
|
|
|
|
|
+ payment_method VARCHAR(50) COMMENT '支付方式',
|
|
|
|
|
+ invoice_number VARCHAR(100) COMMENT '发票号码',
|
|
|
|
|
+ currency VARCHAR(20) DEFAULT 'CNY' COMMENT '货币类型',
|
|
|
|
|
+ exchange_rate DECIMAL(10, 4) DEFAULT 1 COMMENT '汇率',
|
|
|
|
|
+ foreign_amount DECIMAL(10, 2) COMMENT '外币金额',
|
|
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
+ INDEX idx_user_id (user_id),
|
|
|
|
|
+ INDEX idx_client_id (client_id),
|
|
|
|
|
+ INDEX idx_project_id (project_id),
|
|
|
|
|
+ INDEX idx_status (status),
|
|
|
|
|
+ INDEX idx_expense_date (expense_date)
|
|
|
|
|
+) COMMENT = '费用记录表,包含费用基本信息、审批流程及金额等';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 4. 文件表 (file)
|
|
|
|
|
+
|
|
|
|
|
+```sql
|
|
|
|
|
+CREATE TABLE file (
|
|
|
|
|
+ id VARCHAR(50) PRIMARY KEY COMMENT '文件ID',
|
|
|
|
|
+ name VARCHAR(255) NOT NULL COMMENT '文件名称',
|
|
|
|
|
+ type VARCHAR(50) COMMENT '文件类型',
|
|
|
|
|
+ size INT UNSIGNED COMMENT '文件大小,单位字节',
|
|
|
|
|
+ path VARCHAR(512) NOT NULL COMMENT '文件存储路径',
|
|
|
|
|
+ description TEXT COMMENT '文件描述',
|
|
|
|
|
+ upload_user_id VARCHAR(50) NOT NULL COMMENT '上传用户ID',
|
|
|
|
|
+ upload_time DATETIME NOT NULL COMMENT '上传时间',
|
|
|
|
|
+ last_updated DATETIME COMMENT '最后更新时间',
|
|
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
+ INDEX idx_upload_user_id (upload_user_id),
|
|
|
|
|
+ INDEX idx_file_type (type)
|
|
|
|
|
+) COMMENT = '文件信息表,存储上传文件的元数据';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 5. 合同表 (hetong)
|
|
|
|
|
+
|
|
|
|
|
+```sql
|
|
|
|
|
+CREATE TABLE hetong (
|
|
|
|
|
+ id VARCHAR(50) PRIMARY KEY COMMENT '合同ID',
|
|
|
|
|
+ contract_date DATE NOT NULL COMMENT '合同日期',
|
|
|
|
|
+ user_id VARCHAR(50) NOT NULL COMMENT '关联用户ID',
|
|
|
|
|
+ client_id VARCHAR(50) NOT NULL COMMENT '客户ID',
|
|
|
|
|
+ project_id VARCHAR(50) COMMENT '项目ID',
|
|
|
|
|
+ amount DECIMAL(15, 2) NOT NULL COMMENT '合同金额',
|
|
|
|
|
+ type VARCHAR(50) NOT NULL COMMENT '合同类型',
|
|
|
|
|
+ status VARCHAR(50) NOT NULL COMMENT '合同状态:如生效中、已结束等',
|
|
|
|
|
+ start_date DATE NOT NULL COMMENT '开始日期',
|
|
|
|
|
+ end_date DATE NOT NULL COMMENT '结束日期',
|
|
|
|
|
+ description TEXT COMMENT '合同描述',
|
|
|
|
|
+ contract_number VARCHAR(100) NOT NULL COMMENT '合同编号',
|
|
|
|
|
+ currency VARCHAR(20) DEFAULT 'CNY' COMMENT '货币类型',
|
|
|
|
|
+ exchange_rate DECIMAL(10, 4) DEFAULT 1 COMMENT '汇率',
|
|
|
|
|
+ foreign_amount DECIMAL(15, 2) COMMENT '外币金额',
|
|
|
|
|
+ file_path VARCHAR(512) COMMENT '合同文件路径',
|
|
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
+ INDEX idx_user_id (user_id),
|
|
|
|
|
+ INDEX idx_client_id (client_id),
|
|
|
|
|
+ INDEX idx_project_id (project_id),
|
|
|
|
|
+ INDEX idx_status (status),
|
|
|
|
|
+ INDEX idx_contract_date (contract_date),
|
|
|
|
|
+ INDEX idx_date_range (start_date, end_date)
|
|
|
|
|
+) COMMENT = '合同信息表,包含合同基本信息、金额、时间及关联文件等';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 6. 合同续签表 (hetong_renew)
|
|
|
|
|
+
|
|
|
|
|
+```sql
|
|
|
|
|
+CREATE TABLE hetong_renew (
|
|
|
|
|
+ id VARCHAR(50) PRIMARY KEY COMMENT '续签记录ID',
|
|
|
|
|
+ contract_id VARCHAR(50) NOT NULL COMMENT '原合同ID',
|
|
|
|
|
+ amount VARCHAR(50) COMMENT '续签金额',
|
|
|
|
|
+ revenue VARCHAR(50) COMMENT '续签收入',
|
|
|
|
|
+ end_date DATE COMMENT '续签结束日期',
|
|
|
|
|
+ state VARCHAR(50) COMMENT '续签状态:如待审批、已生效等',
|
|
|
|
|
+ content TEXT COMMENT '续签内容描述',
|
|
|
|
|
+ audit_status VARCHAR(50) COMMENT '审批情况',
|
|
|
|
|
+ audit_time DATETIME COMMENT '审批时间',
|
|
|
|
|
+ audit_reasons TEXT COMMENT '审批原因',
|
|
|
|
|
+ user_id VARCHAR(50) COMMENT '处理用户ID',
|
|
|
|
|
+ created_time DATETIME NOT NULL COMMENT '记录创建时间',
|
|
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
+ INDEX idx_contract_id (contract_id),
|
|
|
|
|
+ INDEX idx_user_id (user_id),
|
|
|
|
|
+ INDEX idx_state (state),
|
|
|
|
|
+ CONSTRAINT fk_hetong_renew_contract FOREIGN KEY (contract_id) REFERENCES hetong(id)
|
|
|
|
|
+) COMMENT = '合同续签记录表,关联原合同并记录续签详细信息';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 7. 联系人表 (linkmans)
|
|
|
|
|
+
|
|
|
|
|
+```sql
|
|
|
|
|
+CREATE TABLE linkmans (
|
|
|
|
|
+ id VARCHAR(50) PRIMARY KEY COMMENT '联系人ID',
|
|
|
|
|
+ client_id VARCHAR(50) NOT NULL COMMENT '客户ID',
|
|
|
|
|
+ name VARCHAR(100) NOT NULL COMMENT '姓名',
|
|
|
|
|
+ gender VARCHAR(10) COMMENT '性别',
|
|
|
|
|
+ position VARCHAR(100) COMMENT '职位',
|
|
|
|
|
+ mobile VARCHAR(20) COMMENT '手机号码',
|
|
|
|
|
+ qq VARCHAR(20) COMMENT 'QQ号码',
|
|
|
|
|
+ telephone VARCHAR(20) COMMENT '联系电话',
|
|
|
|
|
+ email VARCHAR(100) COMMENT '电子邮箱',
|
|
|
|
|
+ msn VARCHAR(100) COMMENT 'MSN账号',
|
|
|
|
|
+ alww VARCHAR(100) COMMENT '其他网络账号',
|
|
|
|
|
+ birthday DATE COMMENT '出生日期',
|
|
|
|
|
+ description TEXT COMMENT '详细信息',
|
|
|
|
|
+ created_user_id VARCHAR(50) COMMENT '创建用户ID',
|
|
|
|
|
+ created_time DATETIME NOT NULL COMMENT '创建时间',
|
|
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
+ INDEX idx_client_id (client_id),
|
|
|
|
|
+ INDEX idx_name (name),
|
|
|
|
|
+ CONSTRAINT fk_linkmans_client FOREIGN KEY (client_id) REFERENCES client(id)
|
|
|
|
|
+) COMMENT = '客户联系人表,记录客户的联系人信息';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 8. 日志表 (logfile)
|
|
|
|
|
+
|
|
|
|
|
+```sql
|
|
|
|
|
+CREATE TABLE logfile (
|
|
|
|
|
+ id VARCHAR(50) PRIMARY KEY COMMENT '日志记录ID',
|
|
|
|
|
+ related_id VARCHAR(50) COMMENT '关联记录ID',
|
|
|
|
|
+ class VARCHAR(50) NOT NULL COMMENT '日志类别',
|
|
|
|
|
+ action VARCHAR(50) NOT NULL COMMENT '操作动作:如创建、更新、删除等',
|
|
|
|
|
+ reason TEXT COMMENT '操作原因',
|
|
|
|
|
+ user_id VARCHAR(50) NOT NULL COMMENT '操作用户ID',
|
|
|
|
|
+ log_time DATETIME NOT NULL COMMENT '日志记录时间',
|
|
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
+ INDEX idx_related_id (related_id),
|
|
|
|
|
+ INDEX idx_user_id (user_id),
|
|
|
|
|
+ INDEX idx_class_action (class, action),
|
|
|
|
|
+ INDEX idx_log_time (log_time)
|
|
|
|
|
+) COMMENT = '系统操作日志表,记录系统中的各类操作行为';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 设计说明
|
|
|
|
|
+
|
|
|
|
|
+1. **命名规范**:所有表名和字段名均采用snake_case命名法,符合项目规范要求。
|
|
|
|
|
+
|
|
|
|
|
+2. **主键设计**:
|
|
|
|
|
+ - 大多数表使用INT UNSIGNED AUTO_INCREMENT作为自增主键
|
|
|
|
|
+ - 部分业务表(如合同、费用等)保留了字符串类型主键,以适应业务需求
|
|
|
|
|
+
|
|
|
|
|
+3. **时间字段**:
|
|
|
|
|
+ - 统一添加created_at和updated_at字段,采用TIMESTAMP类型
|
|
|
|
|
+ - 业务相关时间字段根据实际含义命名,如expense_date、start_date等
|
|
|
|
|
+
|
|
|
|
|
+4. **数据类型优化**:
|
|
|
|
|
+ - 将FLOAT类型的手机号、邮政编码等修改为VARCHAR
|
|
|
|
|
+ - 使用DECIMAL类型存储金额,避免浮点精度问题
|
|
|
|
|
+ - 根据字段实际长度限制VARCHAR长度
|
|
|
|
|
+
|
|
|
|
|
+5. **索引策略**:
|
|
|
|
|
+ - 为所有外键添加索引
|
|
|
|
|
+ - 为常用查询条件(如状态、日期等)添加索引
|
|
|
|
|
+ - 为联合查询场景添加复合索引
|
|
|
|
|
+
|
|
|
|
|
+6. **状态字段**:
|
|
|
|
|
+ - 使用TINYINT类型存储状态信息
|
|
|
|
|
+ - 在注释中明确说明状态取值含义
|
|
|
|
|
+ - 统一添加is_deleted字段支持逻辑删除
|