You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

32 lines
1.8 KiB

9 hours ago
-- =====================================================================
-- 数据字典 v3 迁移脚本(20260909,票 11 拍板 Q2/Q1)
-- 变更:字典键值字段(dict_item.value)删除;同组唯一由「名称」承接
-- 背景:ddl-auto:update 只加列不删列,以下 DDL 需手工执行(停服窗口执行)
-- =====================================================================
-- 0) 前置核实:存量同组重名行(唯一约束改挂名称,重名会导致加索引失败)。
-- 有结果则先人工改名/合并,再继续;无结果直接往下。
SELECT group_id, name, COUNT(*) AS dup_cnt
FROM dict_item
WHERE deleted = 0
GROUP BY group_id, name
HAVING COUNT(*) > 1;
-- 1) 删旧值唯一索引
ALTER TABLE dict_item DROP INDEX uk_dict_item_group_value;
-- 2) 删键值列(业务模块按 item_id 存储回显,对 value 零依赖——票 07 已核证)
ALTER TABLE dict_item DROP COLUMN `value`;
-- 3) 加名称组内唯一索引(软删行 delete_key=id 不参与,同口径编码唯一索引)
ALTER TABLE dict_item ADD UNIQUE INDEX uk_dict_item_group_name (group_id, name, delete_key);
-- 4) 存量默认值不迁移(票 11 拍板 Q4):两级组指向一级项的默认保留生效,
-- 管理员在分组列表「设置默认值」重设时自然换为二级项。
-- =====================================================================
-- 回滚预案(仅当迁移后需回退代码时使用;value 列数据无法找回,回滚前先评估):
-- ALTER TABLE dict_item ADD COLUMN `value` VARCHAR(100) COMMENT '字典值';
-- ALTER TABLE dict_item DROP INDEX uk_dict_item_group_name;
-- ALTER TABLE dict_item ADD UNIQUE INDEX uk_dict_item_group_value (group_id, `value`, delete_key);
-- =====================================================================