-- =============================================
-- 修改 series_info 表，添加实例相关字段
-- 每个 series_info 记录代表一张 DICOM 片子
-- 日期：2025-12-30
-- =============================================

USE qconline;

-- =============================================
-- 第一步：删除旧的唯一约束（如果存在）
-- =============================================
SELECT '=== 删除旧的 uk_series_uid 约束 ===' AS '';
ALTER TABLE series_info DROP INDEX IF EXISTS uk_series_uid;

-- =============================================
-- 第二步：添加新字段
-- =============================================
SELECT '=== 添加实例相关字段 ===' AS '';

-- 添加 SOP 实例 UID
ALTER TABLE series_info ADD COLUMN IF NOT EXISTS sop_instance_uid VARCHAR(128) COMMENT 'SOP实例UID' AFTER exam_item_name;

-- 添加实例号（图像序号）
ALTER TABLE series_info ADD COLUMN IF NOT EXISTS instance_number INT COMMENT '实例号（图像序号）' AFTER sop_instance_uid;

-- 添加 DICOM 文件路径
ALTER TABLE series_info ADD COLUMN IF NOT EXISTS file_path VARCHAR(512) COMMENT 'DICOM文件路径' AFTER instance_number;

-- 添加文件大小（字节）
ALTER TABLE series_info ADD COLUMN IF NOT EXISTS file_size BIGINT COMMENT '文件大小（字节）' AFTER file_path;

-- 添加扫描方式
ALTER TABLE series_info ADD COLUMN IF NOT EXISTS scan_method VARCHAR(64) COMMENT '扫描方式（如：增强、平扫、PA位等）' AFTER file_size;

-- 添加可调阅URL地址
ALTER TABLE series_info ADD COLUMN IF NOT EXISTS access_url VARCHAR(512) COMMENT '可调阅URL地址' AFTER scan_method;

-- =============================================
-- 第三步：添加索引和约束
-- =============================================
SELECT '=== 添加索引和约束 ===' AS '';

-- 为 sop_instance_uid 添加普通索引，提高查询性能
ALTER TABLE series_info ADD INDEX IF NOT EXISTS idx_sop_instance_uid (sop_instance_uid);

-- 为 study_id 和 sop_instance_uid 添加联合索引
ALTER TABLE series_info ADD INDEX IF NOT EXISTS idx_study_sop (study_id, sop_instance_uid);

-- 添加组合唯一约束（series_instance_uid + sop_instance_uid）
-- 这样同一个序列可以有多张片子，但同一张片子不会重复
ALTER TABLE series_info ADD UNIQUE KEY uk_series_sop (series_instance_uid, sop_instance_uid);

-- =============================================
-- 第四步：验证表结构
-- =============================================
SELECT '=== 表结构 ===' AS '';
DESCRIBE series_info;

SELECT '=== 索引列表 ===' AS '';
SHOW INDEX FROM series_info;

-- =============================================
-- 说明
-- =============================================
/*
1. 数据结构变更：
   原：一个 series_info 代表一个序列，包含多张片子
   新：一个 series_info 代表一张片子

2. 字段说明：
   - sop_instance_uid: 唯一标识一张 DICOM 片子
   - instance_number: 片子在序列中的序号
   - file_path: DICOM 文件在服务器上的存储路径
   - file_size: 文件大小，用于统计总大小
   - scan_method: 扫描方式（如增强、平扫、PA位等）
   - access_url: 可调阅的URL地址，用于阅片器访问

3. 索引说明：
   - idx_sop_instance_uid: 通过 sop_instance_uid 快速定位片子
   - idx_study_sop: 通过 study_id + sop_instance_uid 组合查询
   - uk_series_sop: 组合唯一约束，允许同一序列有多张片子，但同一张片子不重复

4. 查询逻辑：
   - 按 series_instance_uid 分组，得到序列下的所有片子
   - 通过 sop_instance_uid 快速定位特定片子

5. 兼容性：
   - 原有字段保持不变
   - series_instance_uid 仍用于标识序列
   - 可通过 series_instance_uid 分组，得到序列的完整信息
*/
