数据库设计

CertFlow-PySide6 数据库 Schema 设计文档。

概述

  • 数据库: SQLite

  • ORM: SQLAlchemy

  • 字符编码: UTF-8

  • 时区: 本地时间(通过 datetime.now())

ER 图

┌─────────────────────┐     ┌─────────────────────┐
│    sale_plans       │     │   certificates      │
├─────────────────────┤     ├─────────────────────┤
│ id (PK)             │────<│ sale_plan_id (FK)   │
│ unique_key (UK)     │     │ id (PK)             │
│ product_model       │     │ certificate_no (UK) │
│ sales_order_no      │     │ product_model       │
│ customer            │     │ status              │
│ quantity            │     │ print_time          │
│ ...                 │     │ is_engraved         │
└─────────────────────┘     └─────────────────────┘
           │                           │
           │                           │
           ▼                           ▼
┌─────────────────────┐     ┌─────────────────────┐
│   print_logs        │     │   auto_number_rules │
├─────────────────────┤     ├─────────────────────┤
│ id (PK)             │     │ id (PK)             │
│ certificate_id (FK) │     │ code (UK)           │
│ certificate_no      │     │ name                │
│ print_type          │     │ prefix              │
│ status              │     │ date_format         │
│ print_time          │     │ serial_length       │
└─────────────────────┘     └─────────────────────┘
                                      │
                                      │
                                      ▼
                            ┌─────────────────────┐
                            │ auto_number_counters│
                            ├─────────────────────┤
                            │ id (PK)             │
                            │ rule_code (FK)      │
                            │ group_key           │
                            │ current_serial      │
                            │ reset_date          │
                            └─────────────────────┘

表结构详细说明

1. sale_plans - 销售计划表

存储从Excel导入的销售计划原始数据,是系统核心数据表。

字段

类型

约束

说明

id

INTEGER

PK, AUTOINCREMENT

主键ID

unique_key

VARCHAR(36)

NOT NULL, UNIQUE

唯一键(UUID格式)

original_order

INTEGER

DEFAULT 0

原始顺序(保持Excel行顺序)

sort_group

VARCHAR(200)

排序分组

created_at

DATETIME

DEFAULT NOW

创建时间

updated_at

DATETIME

ON UPDATE

更新时间

source_file

VARCHAR(200)

源文件路径

source_sheet

VARCHAR(50)

来源工作表名称

import_batch_id

VARCHAR(50)

导入批次ID

import_date

DATETIME

DEFAULT NOW

导入时间

contract_no

VARCHAR(100)

合同号

sales_order_no

VARCHAR(100)

销售订单号

production_order_no

VARCHAR(100)

生产令号

plan_no

VARCHAR(100)

计划单号

plan_date

VARCHAR(50)

计划日期

planned_delivery_date

VARCHAR(50)

计划交货期

contract_delivery_date

VARCHAR(50)

合同交货期

customer

VARCHAR(200)

订货单位

project_name

VARCHAR(200)

项目名称

project_unit

VARCHAR(200)

项目单位

product_name

VARCHAR(200)

产品名称

product_model

VARCHAR(200)

NOT NULL

产品型号

product_spec

VARCHAR(200)

产品规格

quantity

INTEGER

DEFAULT 1

数量

weight

FLOAT

DEFAULT 0.0

重量

category

VARCHAR(100)

种类

unit_price

FLOAT

DEFAULT 0.0

单价

total_price

FLOAT

DEFAULT 0.0

总价

business_dept

VARCHAR(100)

业务归口

affiliated_dept

VARCHAR(100)

隶属部门

payment_method

VARCHAR(100)

付款方式

supply_type

VARCHAR(50)

供货类型

tech_requirements

TEXT

技术要求

equipment_code

VARCHAR(200)

设备位号

product_code

VARCHAR(100)

产品编号

production_status

VARCHAR(50)

DEFAULT '待生产'

生产进度

execution_status

VARCHAR(50)

DEFAULT ''

执行情况

certificate_remarks

TEXT

合格证备注

sales_plan_remarks

TEXT

销售计划备注

order_no

VARCHAR(50)

订单号(兼容旧代码)

specification

VARCHAR(100)

规格(兼容旧代码)

material

VARCHAR(100)

材质(兼容旧代码)

certificate_number

VARCHAR(50)

合格证编号

format_status

VARCHAR(50)

DEFAULT ''

根据格式识别的状态

font_colors

TEXT

DEFAULT '{}'

字体颜色JSON

background_colors

TEXT

DEFAULT '{}'

背景色JSON

comments

TEXT

DEFAULT '[]'

批注JSON

2. certificates - 合格证表

存储合格证的核心信息。

字段

类型

约束

说明

id

INTEGER

PK, AUTOINCREMENT

主键ID

certificate_no

VARCHAR(50)

NOT NULL, UNIQUE

合格证编号

sale_plan_id

INTEGER

NOT NULL

关联销售计划ID

unique_key

VARCHAR(36)

NOT NULL

关联唯一键

product_model

VARCHAR(100)

产品型号(冗余)

order_no

VARCHAR(50)

订单号(冗余)

customer

VARCHAR(100)

客户名称(冗余)

print_time

DATETIME

打印时间

print_log

TEXT

打印日志JSON

printer_name

VARCHAR(100)

打印机名称

is_engraved

BOOLEAN

DEFAULT FALSE

是否已刻印

engraved_time

DATETIME

刻印时间

electronic_image_path

VARCHAR(200)

电子版图片路径

electronic_generated_time

DATETIME

电子版生成时间

status

VARCHAR(20)

DEFAULT '待打印'

状态

created_at

DATETIME

DEFAULT NOW

创建时间

状态枚举:

  • 待打印: 已生成编号,尚未打印

  • 已打印: 已打印合格证

  • 已刻印: 铭牌已刻印完成

4. report_templates - 报告模板表

存储报告模板的配置信息。

字段

类型

约束

说明

id

INTEGER

PK, AUTOINCREMENT

主键ID

name

VARCHAR(100)

NOT NULL

模板名称

language

VARCHAR(10)

DEFAULT 'zh'

语言(zh/en)

record_per_page

INTEGER

DEFAULT 5

每页记录数

template_file

VARCHAR(200)

模板文件路径

merge_cells_config

TEXT

合并单元格配置JSON

is_active

BOOLEAN

DEFAULT TRUE

是否启用

style_config

TEXT

样式配置JSON

5. auto_number_rules - 自动编号规则表

存储自动编号的规则定义。

字段

类型

约束

说明

id

INTEGER

PK, AUTOINCREMENT

主键ID

name

VARCHAR(100)

NOT NULL

规则名称

code

VARCHAR(50)

NOT NULL, UNIQUE

规则编码

prefix

VARCHAR(50)

前缀

suffix

VARCHAR(50)

后缀

date_format

VARCHAR(20)

DEFAULT '%Y%m%d'

日期格式

serial_length

INTEGER

DEFAULT 4

流水号长度

separator

VARCHAR(10)

DEFAULT '-'

分隔符

include_date

BOOLEAN

DEFAULT TRUE

是否包含日期

include_serial

BOOLEAN

DEFAULT TRUE

是否包含流水号

include_prefix

BOOLEAN

DEFAULT TRUE

是否包含前缀

include_suffix

BOOLEAN

DEFAULT FALSE

是否包含后缀

group_fields

VARCHAR(200)

分组字段

reset_type

VARCHAR(20)

DEFAULT 'never'

重置类型

is_active

BOOLEAN

DEFAULT TRUE

是否启用

description

TEXT

规则描述

created_at

DATETIME

DEFAULT NOW

创建时间

updated_at

DATETIME

ON UPDATE

更新时间

重置类型枚举:

  • never: 永不重置

  • daily: 每日重置

  • monthly: 每月重置

  • yearly: 每年重置

6. auto_number_counters - 自动编号计数器表

存储自动编号的计数器值。

字段

类型

约束

说明

id

INTEGER

PK, AUTOINCREMENT

主键ID

rule_code

VARCHAR(50)

NOT NULL

规则编码

group_key

VARCHAR(200)

分组键

current_serial

INTEGER

DEFAULT 0

当前流水号

reset_date

VARCHAR(20)

重置日期

created_at

DATETIME

DEFAULT NOW

创建时间

updated_at

DATETIME

ON UPDATE

更新时间

索引设计

sale_plans 表索引

索引名

字段

用途

idx_sale_plan_sales_order_no

sales_order_no

订单号查询

idx_sale_plan_production_order_no

production_order_no

生产令号查询

idx_sale_plan_product_model

product_model

产品型号查询

idx_sale_plan_customer

customer

客户查询

idx_sale_plan_production_status

production_status

生产状态筛选

idx_sale_plan_plan_date

plan_date

日期范围查询

idx_sale_plan_unique_key

unique_key

唯一键查询

idx_sale_plan_plan_no

plan_no

计划单号查询

idx_sale_plan_project_name

project_name

项目名称查询

idx_sale_plan_supply_type

supply_type

供货方式筛选

idx_sale_plan_execution_status

execution_status

执行状态筛选

idx_sale_plan_business_dept

business_dept

业务部门筛选

idx_sale_plan_certificate_number

certificate_number

合格证编号查询

idx_sale_plan_model_status

product_model, production_status

复合条件查询

idx_sale_plan_order_model

sales_order_no, product_model

复合条件查询

idx_sale_plan_customer_date

customer, plan_date

复合条件查询

idx_sale_plan_model_customer

product_model, customer

复合条件查询

certificates 表索引

索引名

字段

用途

idx_certificate_no

certificate_no

编号查询

idx_certificate_sale_plan_id

sale_plan_id

关联查询

idx_certificate_status

status

状态筛选

print_logs 表索引

索引名

字段

用途

idx_print_log_certificate_id

certificate_id

关联查询

idx_print_log_time

print_time

时间范围查询

auto_number 相关索引

索引名

字段

用途

auto_number_rules

idx_auto_number_rule_code

code

编码查询

auto_number_rules

idx_auto_number_rule_active

is_active

启用状态筛选

auto_number_rules

idx_auto_number_rule_code_active

code, is_active

复合条件查询

auto_number_counters

idx_counter_rule_group

rule_code, group_key

计数器查询

auto_number_counters

idx_counter_rule_code

rule_code

规则查询

数据迁移策略

自动补齐缺失列

DatabaseManager._migrate_missing_columns() 方法会自动检测并补齐:

  1. 对比模型定义与实际数据库列

  2. 对缺失列执行 ALTER TABLE ADD COLUMN

  3. 支持默认值和可空约束

迁移注意事项

  • 仅添加列,不删除或修改现有列

  • 不支持设置外键约束和唯一约束

  • 新增列后需手动更新应用代码

查询优化建议

  1. 使用索引字段进行筛选: 优先使用有索引的字段作为查询条件

  2. **避免SELECT ***: 只查询需要的字段

  3. 分页查询: 使用 offsetlimit 进行分页

  4. 批量操作: 使用 bulk_insertbulk_update 提高性能

  5. 连接池: 生产环境配置合适的连接池大小

待补充

  • 完整 ER 图(可视化)

  • 数据字典导出工具

  • 数据库备份策略

  • 性能测试报告