Files
erp-next/sql/20260601/001_client_quote_optimize.sql

59 lines
3.0 KiB
MySQL
Raw Normal View History

-- ============================================================================
-- 甲方报价系统优化 - 数据库迁移脚本
-- 日期: 2026-06-01
-- 说明:
-- 1. biz_client_quote_item 表添加 material_id 字段,建立与物料表的正式关联
-- 2. 添加必要的索引优化查询性能
-- 3. 添加统计数据辅助字段
-- 4. 修复历史数据中的 material_id 关联
-- ============================================================================
-- ============================================================================
-- PART 1: 甲方报价明细表 - 添加 material_id 字段
-- ============================================================================
ALTER TABLE biz_client_quote_item
ADD COLUMN material_id BIGINT DEFAULT NULL COMMENT '关联物料IDbiz_material.material_id' AFTER quote_id;
-- 创建索引以加速按物料查询
CREATE INDEX idx_cqi_quote_id ON biz_client_quote_item (quote_id);
CREATE INDEX idx_cqi_material_id ON biz_client_quote_item (material_id);
-- ============================================================================
-- PART 2: 甲方报价主表 - 添加统计优化索引
-- ============================================================================
CREATE INDEX idx_cq_create_time ON biz_client_quote (create_time);
CREATE INDEX idx_cq_client_name ON biz_client_quote (client_name);
CREATE INDEX idx_cq_status ON biz_client_quote (status);
-- ============================================================================
-- PART 3: 修复历史数据 - 通过物料名称匹配回填 material_id
-- ============================================================================
-- 注意: 此操作为一次性数据修复,基于 material_name 精确匹配。
-- 如果存在同名的多个物料只会关联第一个匹配到的物料ID。
-- 请在执行前确认数据准确性。
UPDATE biz_client_quote_item cqi
JOIN biz_material m ON cqi.material_name = m.material_name
SET cqi.material_id = m.material_id
WHERE cqi.material_id IS NULL
AND cqi.material_name IS NOT NULL
AND cqi.material_name != '';
-- ============================================================================
-- PART 4: 验证数据修复结果
-- ============================================================================
-- 检查仍有未关联的记录数(如果 > 0说明有些物料名称在 biz_material 表中不存在)
-- SELECT COUNT(*) AS unlinked_count
-- FROM biz_client_quote_item
-- WHERE material_id IS NULL AND material_name IS NOT NULL AND material_name != '';
-- 查看关联情况统计
-- SELECT
-- CASE WHEN cqi.material_id IS NOT NULL THEN '已关联' ELSE '未关联' END AS status,
-- COUNT(*) AS count
-- FROM biz_client_quote_item cqi
-- GROUP BY CASE WHEN cqi.material_id IS NOT NULL THEN '已关联' ELSE '未关联' END;
-- ============================================================================
-- 完成
-- ============================================================================