alter_series_info_add_instance_fields.sql 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. -- =============================================
  2. -- 修改 series_info 表,添加实例相关字段
  3. -- 每个 series_info 记录代表一张 DICOM 片子
  4. -- 日期:2025-12-30
  5. -- =============================================
  6. USE qconline;
  7. -- =============================================
  8. -- 第一步:删除旧的唯一约束(如果存在)
  9. -- =============================================
  10. SELECT '=== 删除旧的 uk_series_uid 约束 ===' AS '';
  11. ALTER TABLE series_info DROP INDEX IF EXISTS uk_series_uid;
  12. -- =============================================
  13. -- 第二步:添加新字段
  14. -- =============================================
  15. SELECT '=== 添加实例相关字段 ===' AS '';
  16. -- 添加 SOP 实例 UID
  17. ALTER TABLE series_info ADD COLUMN IF NOT EXISTS sop_instance_uid VARCHAR(128) COMMENT 'SOP实例UID' AFTER exam_item_name;
  18. -- 添加实例号(图像序号)
  19. ALTER TABLE series_info ADD COLUMN IF NOT EXISTS instance_number INT COMMENT '实例号(图像序号)' AFTER sop_instance_uid;
  20. -- 添加 DICOM 文件路径
  21. ALTER TABLE series_info ADD COLUMN IF NOT EXISTS file_path VARCHAR(512) COMMENT 'DICOM文件路径' AFTER instance_number;
  22. -- 添加文件大小(字节)
  23. ALTER TABLE series_info ADD COLUMN IF NOT EXISTS file_size BIGINT COMMENT '文件大小(字节)' AFTER file_path;
  24. -- 添加扫描方式
  25. ALTER TABLE series_info ADD COLUMN IF NOT EXISTS scan_method VARCHAR(64) COMMENT '扫描方式(如:增强、平扫、PA位等)' AFTER file_size;
  26. -- 添加可调阅URL地址
  27. ALTER TABLE series_info ADD COLUMN IF NOT EXISTS access_url VARCHAR(512) COMMENT '可调阅URL地址' AFTER scan_method;
  28. -- =============================================
  29. -- 第三步:添加索引和约束
  30. -- =============================================
  31. SELECT '=== 添加索引和约束 ===' AS '';
  32. -- 为 sop_instance_uid 添加普通索引,提高查询性能
  33. ALTER TABLE series_info ADD INDEX IF NOT EXISTS idx_sop_instance_uid (sop_instance_uid);
  34. -- 为 study_id 和 sop_instance_uid 添加联合索引
  35. ALTER TABLE series_info ADD INDEX IF NOT EXISTS idx_study_sop (study_id, sop_instance_uid);
  36. -- 添加组合唯一约束(series_instance_uid + sop_instance_uid)
  37. -- 这样同一个序列可以有多张片子,但同一张片子不会重复
  38. ALTER TABLE series_info ADD UNIQUE KEY uk_series_sop (series_instance_uid, sop_instance_uid);
  39. -- =============================================
  40. -- 第四步:验证表结构
  41. -- =============================================
  42. SELECT '=== 表结构 ===' AS '';
  43. DESCRIBE series_info;
  44. SELECT '=== 索引列表 ===' AS '';
  45. SHOW INDEX FROM series_info;
  46. -- =============================================
  47. -- 说明
  48. -- =============================================
  49. /*
  50. 1. 数据结构变更:
  51. 原:一个 series_info 代表一个序列,包含多张片子
  52. 新:一个 series_info 代表一张片子
  53. 2. 字段说明:
  54. - sop_instance_uid: 唯一标识一张 DICOM 片子
  55. - instance_number: 片子在序列中的序号
  56. - file_path: DICOM 文件在服务器上的存储路径
  57. - file_size: 文件大小,用于统计总大小
  58. - scan_method: 扫描方式(如增强、平扫、PA位等)
  59. - access_url: 可调阅的URL地址,用于阅片器访问
  60. 3. 索引说明:
  61. - idx_sop_instance_uid: 通过 sop_instance_uid 快速定位片子
  62. - idx_study_sop: 通过 study_id + sop_instance_uid 组合查询
  63. - uk_series_sop: 组合唯一约束,允许同一序列有多张片子,但同一张片子不重复
  64. 4. 查询逻辑:
  65. - 按 series_instance_uid 分组,得到序列下的所有片子
  66. - 通过 sop_instance_uid 快速定位特定片子
  67. 5. 兼容性:
  68. - 原有字段保持不变
  69. - series_instance_uid 仍用于标识序列
  70. - 可通过 series_instance_uid 分组,得到序列的完整信息
  71. */