new_db.md 15 KB

数据库设计文档

概述

本文档包含按照项目规范优化后的数据库表结构定义,遵循以下设计原则:

  • 表名和字段名使用snake_case命名法
  • 每个表包含自增主键id
  • 统一添加创建时间(created_at)和更新时间(updated_at)字段
  • 状态字段使用tinyint类型并明确取值含义
  • 添加必要的索引和外键约束
  • 完善字段注释说明

表结构定义

1. 区域数据表 (area_data)

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)

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)

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)

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)

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)

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)

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)

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

订单记录表 (order_record)

CREATE TABLE `order_record` (
  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  `company_name` varchar(255) NOT NULL COMMENT '公司名称',
  `order_number` varchar(50) NOT NULL COMMENT '订单编号',
  `contact_person` varchar(50) NOT NULL COMMENT '联系人',
  `order_date` date NOT NULL COMMENT '下单日期',
  `delivery_date` date DEFAULT NULL COMMENT '交单日期',
  `advance_payment` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '预付款',
  `order_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单金额',
  `order_status` tinyint NOT NULL DEFAULT '0' COMMENT '订单状态(0-未处理,1-已完成)',
  `salesperson` varchar(50) NOT NULL COMMENT '业务员',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '录入时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除状态(0-未删除,1-已删除)',
  PRIMARY KEY (`id`),
  KEY `idx_order_number` (`order_number`),
  KEY `idx_company_name` (`company_name`),
  KEY `idx_order_date` (`order_date`),
  KEY `idx_order_status` (`order_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单记录表';

字段说明

  • id: 自增主键ID
  • company_name: 客户公司名称
  • order_number: 订单编号,业务系统生成的唯一编号
  • contact_person: 客户联系人姓名
  • order_date: 下单日期
  • delivery_date: 交单日期,可为空
  • advance_payment: 预付款金额,默认0.00
  • order_amount: 订单总金额,默认0.00
  • order_status: 订单状态,0表示未处理,1表示已完成
  • salesperson: 负责的业务员姓名
  • created_at: 记录创建时间(录入时间)
  • updated_at: 记录更新时间
  • is_deleted: 软删除标志,0表示未删除,1表示已删除

索引说明

  • 主键索引: id
  • 普通索引: order_number(订单编号), company_name(公司名称), order_date(下单日期), order_status(订单状态)

9. 跟单记录表 (follow_up_record)

CREATE TABLE follow_up_record (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    serial_number VARCHAR(50) NOT NULL COMMENT '编号',
    resource_name VARCHAR(255) NOT NULL COMMENT '收录资源',
    next_contact_time DATETIME NULL COMMENT '下次联系时间',
    details TEXT NULL COMMENT '详细备注',
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '录入时间',
    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    is_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0-未删除,1-已删除)',
    INDEX idx_serial_number (serial_number),
    INDEX idx_next_contact_time (next_contact_time),
    INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='跟单记录表';

字段说明

  • id: 自增主键ID
  • serial_number: 业务系统生成的唯一编号
  • resource_name: 收录资源信息,描述客户或项目
  • next_contact_time: 下次联系时间,可为空
  • details: 详细备注信息
  • created_at: 记录创建时间(录入时间)
  • updated_at: 记录更新时间
  • is_deleted: 软删除标志,0表示未删除,1表示已删除

索引说明

  • 主键索引: id
  • 普通索引: serial_number(编号), next_contact_time(下次联系时间), created_at(录入时间)