Procházet zdrojové kódy

📝 docs(database): add database design documentation

- create new database design document with optimized table structures
- define 8 core tables including area_data, client, expense, file, hetong, hetong_renew, linkmans and logfile
- specify table structures with snake_case naming convention, indexes, constraints and detailed comments
- include design principles and explanations for naming, primary keys, time fields, data types and indexing strategy
yourname před 8 měsíci
rodič
revize
f9fb6a42b6
1 změnil soubory, kde provedl 255 přidání a 0 odebrání
  1. 255 0
      docs/new_db.md

+ 255 - 0
docs/new_db.md

@@ -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字段支持逻辑删除