-- 已有库完成 004/005 后执行;最新空库基线已经包含此结构,不执行本文件。 -- 保留旧 worksheets.grade,不自动回填;经审核的年级映射由导入/管理业务显式写入。 BEGIN; SET LOCAL TIME ZONE 'UTC'; SET LOCAL lock_timeout = '5s'; SET LOCAL search_path = public, pg_catalog; -- 年级与内容分类独立;同一 worksheet 可适用于多个(含不连续)年级。 -- 不从年龄或旧 grade 自动生成关系,避免把推算值当作已核实的适用范围。 CREATE TABLE public.worksheet_grades ( worksheet_id varchar(128) COLLATE "C" NOT NULL, grade smallint NOT NULL, CONSTRAINT worksheet_grades_pkey PRIMARY KEY (worksheet_id, grade), CONSTRAINT worksheet_grades_worksheet_id_fkey FOREIGN KEY (worksheet_id) REFERENCES public.worksheets (id) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT worksheet_grades_grade_check CHECK (grade BETWEEN -4 AND 6) ); -- 联合主键支持查询功能的适用年级;反向索引用于年级菜单及筛选。 CREATE INDEX worksheet_grades_grade_worksheet_idx ON public.worksheet_grades (grade, worksheet_id); COMMENT ON TABLE public.worksheet_grades IS '功能适用年级的唯一权威关系;与内容分类独立,不从年龄自动推算'; COMMENT ON COLUMN public.worksheet_grades.grade IS '-4 托班、-3 小班、-2 中班、-1 大班、0 幼小衔接、1至6 小学年级;无关系表示未配置,不表示全年级'; COMMENT ON COLUMN public.worksheets.grade IS '旧版单年级兼容值;可能由年龄推算;保留原值,新年级筛选使用 worksheet_grades'; COMMENT ON TABLE public.categories IS '内容分类树,与适用年级独立;多层循环需由服务端事务检查'; COMMIT;