-- 将 tb_iot_card.virtual_no 改为 NOT NULL，并重建唯一索引
-- 背景：虚拟号是资产核心业务标识符，不允许为空
-- 步骤：1. 清理空值记录（测试环境），2. 加约束，3. 重建索引

-- 清理空值记录（适用于测试环境）
DELETE FROM tb_iot_card WHERE virtual_no IS NULL OR virtual_no = '';

-- 将 virtual_no 列改为 NOT NULL
ALTER TABLE tb_iot_card ALTER COLUMN virtual_no SET NOT NULL;

-- 删除旧的条件唯一索引（含 IS NOT NULL AND <> '' 条件）
DROP INDEX IF EXISTS idx_iot_card_virtual_no;

-- 重建无条件唯一索引（仅排除软删除记录）
CREATE UNIQUE INDEX idx_iot_card_virtual_no ON tb_iot_card(virtual_no) WHERE deleted_at IS NULL;
