-- 1. 创建文档模板表主键序列(自增ID) CREATE SEQUENCE doc_template_id_seq START WITH 1 -- 起始值为1 INCREMENT BY 1 -- 每次递增1 NO MINVALUE -- 无最小值限制 NO MAXVALUE -- 无最大值限制 CACHE 1; -- 缓存1个序列值,提升性能 -- 2. 创建文档模板表(doc_template) CREATE TABLE "doc_template" ( -- 主键字段 "id" int8 NOT NULL DEFAULT nextval('doc_template_id_seq'::regclass), -- 主键ID,关联序列自增 -- 业务核心字段(与实体类DocTemplate对应) "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, -- 模板名称(非空,建议100字符内) "display_order" int4 DEFAULT 0, -- 排序号(默认0,值越小越靠前) "context_json" text COLLATE "pg_catalog"."default" NOT NULL, -- 模板内容(JSON格式,非空,存储模板结构) "definition_id" int8 NOT NULL, -- 文书定义ID(非空,关联doc_definition表主键) "use_range" int4 NOT NULL DEFAULT 0, -- 使用范围(非空,0-暂不使用/1-全院/2-指定科室/3-个人) "organization_id" int8, -- 指定科室ID(use_range=2时有效,关联科室表) "user_id" int8, -- 指定用户ID(use_range=3时有效,关联用户表) "remark" varchar(500) COLLATE "pg_catalog"."default", -- 备注(500字符内,存储使用说明) -- 继承HisBaseEntity的审计字段(通用字段,无需实体类显式定义) "tenant_id" int8 NOT NULL, -- 租户ID(非空,多租户隔离) "delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '0', -- 删除标志(非空,0-未删除/1-已删除) "create_by" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '', -- 创建人(非空,存储用户名) "create_time" timestamptz(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间(非空,默认当前时间,带时区) "update_by" varchar(32) COLLATE "pg_catalog"."default", -- 更新人(存储用户名) "update_time" timestamptz(6), -- 更新时间(带时区) -- 主键约束 CONSTRAINT "doc_template_pkey" PRIMARY KEY ("id") -- 外键约束(关联文书定义表,确保数据一致性) -- CONSTRAINT "fk_doc_template_definition" FOREIGN KEY ("definition_id") -- REFERENCES "doc_definition" ("id") ON DELETE RESTRICT, -- 文书定义删除时,限制删除(避免模板关联失效) -- -- -- 外键约束(关联科室表,use_range=2时生效) -- CONSTRAINT "fk_doc_template_organization" FOREIGN KEY ("organization_id") -- REFERENCES "sys_organization" ("id") ON DELETE SET NULL, -- 科室删除时,置空该字段 -- -- -- 外键约束(关联用户表,use_range=3时生效) -- CONSTRAINT "fk_doc_template_user" FOREIGN KEY ("user_id") -- REFERENCES "sys_user" ("id") ON DELETE SET NULL, -- 用户删除时,置空该字段 -- -- -- 唯一约束(模板名称+文书定义ID唯一,避免同文书下重复模板) -- CONSTRAINT "uk_doc_template_name_defid" UNIQUE ("name", "definition_id") ); -- 3. 设置表所有者(与项目数据库用户一致,通常为postgres) ALTER TABLE "doc_template" OWNER TO "postgres"; -- 4. 表及字段注释(便于维护,与实体类注释对应) COMMENT ON TABLE "doc_template" IS '文档模板表:存储各类文书的模板信息,支持全院、科室、个人等不同使用范围'; COMMENT ON COLUMN "doc_template"."id" IS '主键ID'; COMMENT ON COLUMN "doc_template"."name" IS '模板名称:唯一标识模板,同文书定义下不可重复'; COMMENT ON COLUMN "doc_template"."display_order" IS '排序号:模板列表展示顺序,值越小越靠前,默认0'; COMMENT ON COLUMN "doc_template"."context_json" IS '模板内容:JSON格式存储模板结构、字段配置等信息,前端据此渲染模板'; COMMENT ON COLUMN "doc_template"."definition_id" IS '文书定义ID:关联doc_definition表,标识模板所属的文书类型'; COMMENT ON COLUMN "doc_template"."use_range" IS '使用范围:0-暂不使用,1-全院使用,2-指定科室使用,3-个人使用'; COMMENT ON COLUMN "doc_template"."organization_id" IS '指定科室ID:use_range=2时有效,关联sys_organization表'; COMMENT ON COLUMN "doc_template"."user_id" IS '指定用户ID:use_range=3时有效,关联sys_user表'; COMMENT ON COLUMN "doc_template"."remark" IS '备注:存储模板使用场景、注意事项等额外说明'; COMMENT ON COLUMN "doc_template"."tenant_id" IS '租户ID:多租户系统隔离字段,非空'; COMMENT ON COLUMN "doc_template"."delete_flag" IS '删除标志:0-未删除,1-已删除,默认0'; COMMENT ON COLUMN "doc_template"."create_by" IS '创建人:存储创建者用户名,非空'; COMMENT ON COLUMN "doc_template"."create_time" IS '创建时间:默认当前时间,带时区,非空'; COMMENT ON COLUMN "doc_template"."update_by" IS '更新人:存储更新者用户名'; COMMENT ON COLUMN "doc_template"."update_time" IS '更新时间:带时区'; -- -- 5. 索引设计(优化高频查询场景,提升性能) -- -- (1)按文书定义ID查询(高频:查询某类文书的所有模板) -- CREATE INDEX "idx_doc_template_definition" -- ON "doc_template" ("definition_id") -- WHERE "delete_flag" = '0'; -- 只索引未删除数据,减少索引体积 -- -- -- (2)按使用范围+科室ID查询(高频:科室用户查询本科室模板) -- CREATE INDEX "idx_doc_template_userange_org" -- ON "doc_template" ("use_range", "organization_id") -- WHERE "delete_flag" = '0'; -- -- -- (3)按使用范围+用户ID查询(高频:个人用户查询自己的模板) -- CREATE INDEX "idx_doc_template_userange_user" -- ON "doc_template" ("use_range", "user_id") -- WHERE "delete_flag" = '0'; -- -- -- (4)按模板名称模糊查询(高频:搜索模板) -- CREATE INDEX "idx_doc_template_name" -- ON "doc_template" ("name") -- WHERE "delete_flag" = '0'; -- -- -- (5)按租户ID+创建时间查询(高频:多租户下按时间筛选模板) -- CREATE INDEX "idx_doc_template_tenant_createtime" -- ON "doc_template" ("tenant_id", "create_time") -- WHERE "delete_flag" = '0'; -- 向迁移历史表插入记录 INSERT INTO __MigrationsHistory (MigrationId, ProductVersion) VALUES ('202509011722 doc_template', '1.0.0');