CREATE DATABASE IF NOT EXISTS zhiyuantong CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; USE zhiyuantong; CREATE TABLE IF NOT EXISTS data_sources ( source_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '数据来源记录自增主键', source_type VARCHAR(32) NOT NULL COMMENT '来源类型,如官方XLS、官方网页、官方PDF或人工核验', publisher VARCHAR(128) NOT NULL COMMENT '数据发布机构名称', title VARCHAR(255) NOT NULL COMMENT '来源文件或网页标题', landing_page_url VARCHAR(1024) NULL COMMENT '来源发布页网址', file_url VARCHAR(1024) NULL COMMENT '原始附件或数据文件下载网址', published_on DATE NULL COMMENT '来源资料发布日期或数据截止日期', retrieved_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '本系统获取来源资料的时间', sha256 CHAR(64) NOT NULL COMMENT '原始文件SHA-256摘要,用于去重和完整性校验', raw_file_path VARCHAR(1024) NULL COMMENT '原始文件在本地数据目录中的保存路径', notes TEXT NULL COMMENT '来源范围、授权限制或其他补充说明', PRIMARY KEY (source_id), UNIQUE KEY uk_data_sources_sha256 (sha256) ) ENGINE=InnoDB COMMENT='数据来源与原始资料存档信息'; CREATE TABLE IF NOT EXISTS ingestion_runs ( ingestion_run_id CHAR(36) NOT NULL COMMENT '本次导入任务UUID', source_id BIGINT UNSIGNED NOT NULL COMMENT '本次导入使用的数据来源ID', dataset_name VARCHAR(128) NOT NULL COMMENT '导入的数据集名称', dataset_year SMALLINT UNSIGNED NOT NULL COMMENT '数据所属年度', started_at DATETIME NOT NULL COMMENT '导入开始时间', finished_at DATETIME NULL COMMENT '导入完成或失败时间', status VARCHAR(20) NOT NULL COMMENT '导入状态,如running、success或failed', rows_read INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '从来源读取的总行数', rows_inserted INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '本次新增的记录数', rows_updated INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '本次更新的记录数', rows_rejected INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '因校验失败被拒绝的记录数', message TEXT NULL COMMENT '导入结果、错误信息或校验摘要', PRIMARY KEY (ingestion_run_id), KEY idx_ingestion_runs_source (source_id), CONSTRAINT fk_ingestion_runs_source FOREIGN KEY (source_id) REFERENCES data_sources(source_id) ) ENGINE=InnoDB COMMENT='数据采集和导入任务审计记录'; CREATE TABLE IF NOT EXISTS schools ( school_id CHAR(36) NOT NULL COMMENT '系统内部稳定学校UUID,不随名称和招生代码变化', moe_school_code CHAR(10) NULL COMMENT '教育部学校标识码;未纳入教育部公开普通高校名单的军队或港澳院校为空', official_name VARCHAR(255) NOT NULL COMMENT '教育部当前公布的学校正式名称', province_name VARCHAR(64) NOT NULL COMMENT '学校所属省级行政区名称', city_name VARCHAR(128) NOT NULL COMMENT '教育部名单公布的学校所在地城市', authority_name VARCHAR(255) NOT NULL COMMENT '学校主管部门', education_level VARCHAR(32) NOT NULL COMMENT '办学或招生培养层次,如本科、专科或成人高等教育', source_remark VARCHAR(255) NULL COMMENT '教育部原始名单中的备注内容', ownership_type VARCHAR(32) NOT NULL DEFAULT '待核验' COMMENT '办学性质,如公办、民办、合作办学或境外办学', school_status VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT '学校当前状态,如active或inactive', official_website VARCHAR(1024) NULL COMMENT '经核验的学校官方网站', admission_website VARCHAR(1024) NULL COMMENT '经核验的学校招生官方网站', first_seen_year SMALLINT UNSIGNED NOT NULL COMMENT '该学校首次进入本系统年度名单的年份', last_seen_year SMALLINT UNSIGNED NOT NULL COMMENT '该学校最近一次出现在教育部年度名单中的年份', source_id BIGINT UNSIGNED NOT 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 (school_id), UNIQUE KEY uk_schools_moe_code (moe_school_code), KEY idx_schools_name (official_name), KEY idx_schools_province_level (province_name, education_level), CONSTRAINT fk_schools_source FOREIGN KEY (source_id) REFERENCES data_sources(source_id) ) ENGINE=InnoDB COMMENT='全国招生院校主体当前基础信息表(含普通高校、军队院校、港澳院校及招生引用成人高校)'; CREATE TABLE IF NOT EXISTS school_names ( school_name_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '学校名称记录自增主键', school_id CHAR(36) NOT NULL COMMENT '关联schools表的学校UUID', school_name VARCHAR(255) NOT NULL COMMENT '学校正式名称、曾用名、简称或英文名', name_type VARCHAR(32) NOT NULL COMMENT '名称类型,如official、former、alias或english', valid_from_year SMALLINT UNSIGNED NULL COMMENT '该名称开始适用的年份', valid_to_year SMALLINT UNSIGNED NULL COMMENT '该名称停止适用的年份,空值表示当前仍适用', source_id BIGINT UNSIGNED NOT NULL COMMENT '证明该名称及有效期的数据来源ID', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '名称记录创建时间', PRIMARY KEY (school_name_id), UNIQUE KEY uk_school_names (school_id, school_name, name_type), KEY idx_school_names_lookup (school_name), CONSTRAINT fk_school_names_school FOREIGN KEY (school_id) REFERENCES schools(school_id), CONSTRAINT fk_school_names_source FOREIGN KEY (source_id) REFERENCES data_sources(source_id) ) ENGINE=InnoDB COMMENT='学校正式名称、曾用名和别名历史'; CREATE TABLE IF NOT EXISTS school_external_codes ( external_code_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '外部代码映射记录自增主键', school_id CHAR(36) NOT NULL COMMENT '关联schools表的学校UUID', code_system VARCHAR(64) NOT NULL COMMENT '代码所属体系,如甘肃招生院校代码或阳光高考内部代码', external_code VARCHAR(64) NOT NULL COMMENT '外部系统使用的院校代码', province_name VARCHAR(64) NOT NULL DEFAULT '' COMMENT '该代码适用的招生省份,空字符串表示全国通用', admission_year SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '该代码适用的招生年度,0表示不限定年度', admission_batch VARCHAR(64) NOT NULL DEFAULT '' COMMENT '该代码适用的录取批次,空字符串表示不限定批次', admission_type VARCHAR(128) NOT NULL DEFAULT '' COMMENT '该代码适用的招生类型,如普通类、中外合作或专项计划', campus_name VARCHAR(255) NULL COMMENT '代码对应的特定校区或办学地点', source_id BIGINT UNSIGNED NOT 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 (external_code_id), UNIQUE KEY uk_school_external_code ( code_system, external_code, province_name, admission_year, admission_batch, admission_type ), KEY idx_school_external_codes_school (school_id), CONSTRAINT fk_school_external_codes_school FOREIGN KEY (school_id) REFERENCES schools(school_id), CONSTRAINT fk_school_external_codes_source FOREIGN KEY (source_id) REFERENCES data_sources(source_id) ) ENGINE=InnoDB COMMENT='学校在省级招生等外部系统中的年度代码映射'; CREATE TABLE IF NOT EXISTS school_campuses ( campus_id CHAR(36) NOT NULL COMMENT '系统内部稳定校区UUID', school_id CHAR(36) NOT NULL COMMENT '关联schools表的学校UUID', campus_name VARCHAR(255) NOT NULL COMMENT '校区正式名称或常用名称', province_name VARCHAR(64) NULL COMMENT '校区所在省级行政区名称', city_name VARCHAR(128) NULL COMMENT '校区所在城市名称', district_name VARCHAR(128) NULL COMMENT '校区所在区县名称', address_text VARCHAR(512) NULL COMMENT '经官方来源核验的校区详细地址', longitude DECIMAL(10, 7) NULL COMMENT '校区经度,采用WGS84或约定坐标系并在来源中说明', latitude DECIMAL(10, 7) NULL COMMENT '校区纬度,采用WGS84或约定坐标系并在来源中说明', is_main_campus BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否为学校主校区,1是、0否', verification_status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '校区信息核验状态,如pending、verified或rejected', source_id BIGINT UNSIGNED NOT 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 (campus_id), UNIQUE KEY uk_school_campus_name (school_id, campus_name), CONSTRAINT fk_school_campuses_school FOREIGN KEY (school_id) REFERENCES schools(school_id), CONSTRAINT fk_school_campuses_source FOREIGN KEY (source_id) REFERENCES data_sources(source_id) ) ENGINE=InnoDB COMMENT='学校校区、地址及地理位置基础信息'; CREATE TABLE IF NOT EXISTS stg_moe_schools ( ingestion_run_id CHAR(36) NOT NULL COMMENT '关联本次导入任务UUID', source_row_number INT UNSIGNED NOT NULL COMMENT '记录在教育部原始文件中的行号', moe_school_code CHAR(10) NOT NULL COMMENT '原始文件中的教育部十位学校标识码', official_name VARCHAR(255) NOT NULL COMMENT '原始文件中的学校正式名称', province_name VARCHAR(64) NOT NULL COMMENT '从原始文件省份分组标题解析出的省级行政区', city_name VARCHAR(128) NOT NULL COMMENT '原始文件中的学校所在地', authority_name VARCHAR(255) NOT NULL COMMENT '原始文件中的学校主管部门', education_level VARCHAR(32) NOT NULL COMMENT '原始文件中的办学层次', source_remark VARCHAR(255) NULL COMMENT '原始文件中的备注内容', PRIMARY KEY (ingestion_run_id, source_row_number), UNIQUE KEY uk_stg_moe_run_code (ingestion_run_id, moe_school_code) ) ENGINE=InnoDB COMMENT='教育部全国高校名单导入暂存表'; CREATE OR REPLACE VIEW v_school_basic AS SELECT s.school_id, s.moe_school_code, s.official_name, s.province_name, s.city_name, s.authority_name, s.education_level, s.ownership_type, s.source_remark, s.school_status, s.first_seen_year, s.last_seen_year, ds.publisher AS source_publisher, ds.title AS source_title, ds.landing_page_url AS source_url, ds.published_on AS source_published_on, s.updated_at FROM schools s JOIN data_sources ds ON ds.source_id=s.source_id; -- 从项目根目录通过 MySQL 客户端执行本文件时,继续创建甘肃招录业务表。 SOURCE database/migrations/003_create_gansu_admission_tables.sql; SOURCE database/migrations/005_create_review_tables.sql; SOURCE database/migrations/006_create_collection_scopes.sql; SOURCE database/migrations/007_add_gaokao_compass_2025_tables.sql; SOURCE database/migrations/008_create_publication_and_dimension_tables.sql; SOURCE database/migrations/011_create_versioned_public_read_models.sql; SOURCE database/migrations/012_create_automated_review_runs.sql;