USE zhiyuantong; SET NAMES utf8mb4; CREATE TABLE IF NOT EXISTS dataset_publications ( publication_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '公开数据发布版本自增主键', province_name VARCHAR(64) NOT NULL DEFAULT '' COMMENT '数据适用省份,空字符串表示全国数据', admission_year SMALLINT UNSIGNED NOT NULL COMMENT '数据所属招生年度', dataset_name VARCHAR(128) NOT NULL COMMENT '发布的数据集业务名称', version_no VARCHAR(64) NOT NULL COMMENT '同一省份年度数据集下的发布版本号', publication_status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT '发布状态:draft、validating、published或withdrawn', source_record_count INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '本次发布校验时读取的源记录数', published_record_count INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '最终进入公开快照的记录数', quality_grade VARCHAR(16) NOT NULL DEFAULT 'unrated' COMMENT '质量等级,如A、B、C或unrated', validation_summary JSON NULL COMMENT '质量门禁结果与缺口统计', published_by VARCHAR(128) NULL COMMENT '执行发布的人员姓名或账号标识', published_at DATETIME NULL COMMENT '版本正式发布的时间', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录最近更新时间', PRIMARY KEY (publication_id), UNIQUE KEY uk_dataset_publication_version ( province_name, admission_year, dataset_name, version_no ), KEY idx_dataset_publication_current ( province_name, admission_year, dataset_name, publication_status, published_at ) ) ENGINE=InnoDB COMMENT='面向考生端的可回滚数据发布版本'; CREATE TABLE IF NOT EXISTS data_quality_issues ( issue_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '数据质量问题自增主键', publication_id BIGINT UNSIGNED NULL COMMENT '问题所属发布版本,自动扫描阶段可为空', entity_type VARCHAR(64) NOT NULL COMMENT '问题实体类型,如admission_group或score_rank', entity_key VARCHAR(128) NOT NULL COMMENT '问题实体业务主键字符串', issue_code VARCHAR(64) NOT NULL COMMENT '稳定的问题代码,如MISSING_SCHOOL_ID', severity VARCHAR(16) NOT NULL COMMENT '严重程度:info、warning、error或fatal', field_name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '涉及字段,空字符串表示整条记录', issue_message VARCHAR(1000) NOT NULL COMMENT '可读的问题说明', issue_fingerprint CHAR(64) NOT NULL COMMENT '实体、问题代码与关键内容的SHA-256指纹', resolution_status VARCHAR(32) NOT NULL DEFAULT 'open' COMMENT '处理状态:open、ignored、resolved或false_positive', detected_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '首次发现时间', resolved_at DATETIME NULL COMMENT '问题解决时间', resolved_by VARCHAR(128) NULL COMMENT '处理人员姓名或账号标识', resolution_note TEXT NULL COMMENT '处理说明', PRIMARY KEY (issue_id), UNIQUE KEY uk_data_quality_fingerprint (issue_fingerprint), KEY idx_data_quality_entity (entity_type, entity_key), KEY idx_data_quality_status (resolution_status, severity, issue_code), KEY idx_data_quality_publication (publication_id), CONSTRAINT fk_data_quality_publication FOREIGN KEY (publication_id) REFERENCES dataset_publications(publication_id) ) ENGINE=InnoDB COMMENT='标准化、审核和发布过程发现的数据质量问题'; CREATE TABLE IF NOT EXISTS admission_dimension_mappings ( mapping_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '招录维度映射自增主键', dimension_type VARCHAR(64) NOT NULL COMMENT '维度类型,如subject_category、education_level或batch', province_name VARCHAR(64) NOT NULL DEFAULT '' COMMENT '映射适用省份,空字符串表示全国默认', admission_year SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '映射适用年份,0表示全部年份', source_value VARCHAR(255) NOT NULL COMMENT '来源数据中的原始值', canonical_code VARCHAR(64) NOT NULL COMMENT '系统稳定代码', canonical_name VARCHAR(128) NOT NULL COMMENT '系统标准显示名称', verification_status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '核验状态:pending、verified或rejected', source_id BIGINT UNSIGNED NULL COMMENT '映射依据的数据来源ID', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录最近更新时间', PRIMARY KEY (mapping_id), UNIQUE KEY uk_admission_dimension_mapping ( dimension_type, province_name, admission_year, source_value ), KEY idx_admission_dimension_canonical ( dimension_type, canonical_code, province_name, admission_year ), CONSTRAINT fk_admission_dimension_source FOREIGN KEY (source_id) REFERENCES data_sources(source_id) ) ENGINE=InnoDB COMMENT='按省份和年份维护的招录来源维度标准化映射'; CREATE TABLE IF NOT EXISTS province_exam_configs ( exam_config_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '省级考试模式配置自增主键', province_name VARCHAR(64) NOT NULL COMMENT '省级行政区名称', exam_year SMALLINT UNSIGNED NOT NULL COMMENT '高考年份', exam_mode VARCHAR(32) NOT NULL COMMENT '考试模式:traditional、three_plus_one_plus_two或three_plus_three', total_score DECIMAL(7,2) NULL COMMENT '该省该年普通类高考总分', rank_basis VARCHAR(128) NULL COMMENT '一分一段的位次计算口径', verification_status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '核验状态:pending、verified或rejected', source_id BIGINT UNSIGNED NULL COMMENT '考试模式配置的数据来源ID', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录最近更新时间', PRIMARY KEY (exam_config_id), UNIQUE KEY uk_province_exam_config (province_name, exam_year), CONSTRAINT fk_province_exam_config_source FOREIGN KEY (source_id) REFERENCES data_sources(source_id) ) ENGINE=InnoDB COMMENT='各省各年度考试模式和位次口径配置'; INSERT INTO admission_dimension_mappings ( dimension_type, province_name, admission_year, source_value, canonical_code, canonical_name, verification_status ) VALUES ('subject_category', '', 0, '物理类', 'PHYSICS', '物理类', 'verified'), ('subject_category', '', 0, '物理科目组合', 'PHYSICS', '物理类', 'verified'), ('subject_category', '', 0, '历史类', 'HISTORY', '历史类', 'verified'), ('subject_category', '', 0, '历史科目组合', 'HISTORY', '历史类', 'verified'), ('subject_category', '', 0, '理科', 'SCIENCE', '理科', 'verified'), ('subject_category', '', 0, '理工类', 'SCIENCE', '理科', 'verified'), ('subject_category', '', 0, '文科', 'ARTS', '文科', 'verified'), ('subject_category', '', 0, '文史类', 'ARTS', '文科', 'verified'), ('subject_category', '', 0, '综合', 'COMPREHENSIVE', '综合', 'verified'), ('subject_category', '', 0, '不分科类', 'COMPREHENSIVE', '综合', 'verified'), ('subject_category', '', 0, '中职升学', 'VOCATIONAL', '中职升学', 'verified'), ('education_level', '', 0, '本科', 'UNDERGRADUATE', '本科', 'verified'), ('education_level', '', 0, '专科', 'VOCATIONAL_COLLEGE', '专科', 'verified'), ('education_level', '', 0, '高职专科', 'VOCATIONAL_COLLEGE', '专科', 'verified') AS incoming ON DUPLICATE KEY UPDATE canonical_code=incoming.canonical_code, canonical_name=incoming.canonical_name, verification_status=incoming.verification_status;