### 合同分类 ``` CREATE TABLE "public"."contract_categories" ( "id" int4 NOT NULL DEFAULT nextval('contract_categories_id_seq'::regclass), "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, "icon" varchar(100) COLLATE "pg_catalog"."default", "description" text COLLATE "pg_catalog"."default", "sort_order" int4 DEFAULT 0, "created_at" timestamptz(6) DEFAULT now(), "updated_at" timestamptz(6) DEFAULT now(), CONSTRAINT "contract_categories_pkey" PRIMARY KEY ("id") ) ; ALTER TABLE "public"."contract_categories" OWNER TO "root"; CREATE TRIGGER "update_contract_categories_updated_at" BEFORE UPDATE ON "public"."contract_categories" FOR EACH ROW EXECUTE PROCEDURE "public"."update_updated_at_column"(); COMMENT ON COLUMN "public"."contract_categories"."id" IS '分类ID(主键)'; COMMENT ON COLUMN "public"."contract_categories"."name" IS '分类名称'; COMMENT ON COLUMN "public"."contract_categories"."icon" IS '图标类名(如 font-awesome 类名)'; COMMENT ON COLUMN "public"."contract_categories"."description" IS '分类描述'; COMMENT ON COLUMN "public"."contract_categories"."sort_order" IS '排序顺序'; COMMENT ON COLUMN "public"."contract_categories"."created_at" IS '创建时间(带时区)'; COMMENT ON COLUMN "public"."contract_categories"."updated_at" IS '最后更新时间(带时区)'; COMMENT ON TABLE "public"."contract_categories" IS '合同分类表'; ``` ### 合同模板表 ``` CREATE TABLE "public"."contract_templates" ( "id" int8 NOT NULL DEFAULT nextval('contract_templates_id_seq'::regclass), "template_code" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, "title" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, "category_id" int4 NOT NULL, "description" text COLLATE "pg_catalog"."default", "file_path" varchar(500) COLLATE "pg_catalog"."default", "file_format" varchar(10) COLLATE "pg_catalog"."default" DEFAULT 'docx'::character varying, "is_featured" bool DEFAULT false, "created_at" timestamptz(6) DEFAULT now(), "updated_at" timestamptz(6) DEFAULT now(), "pdf_file_path" varchar(500) COLLATE "pg_catalog"."default", CONSTRAINT "contract_templates_pkey" PRIMARY KEY ("id"), CONSTRAINT "fk_category_id" FOREIGN KEY ("category_id") REFERENCES "public"."contract_categories" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "contract_templates_template_code_key" UNIQUE ("template_code"), CONSTRAINT "valid_file_format" CHECK (file_format::text = ANY (ARRAY['docx'::character varying, 'pdf'::character varying, 'txt'::character varying]::text[])) ) ; ALTER TABLE "public"."contract_templates" OWNER TO "root"; CREATE INDEX "idx_contract_templates_category_id" ON "public"."contract_templates" USING btree ( "category_id" "pg_catalog"."int4_ops" ASC NULLS LAST ); CREATE TRIGGER "update_contract_templates_updated_at" BEFORE UPDATE ON "public"."contract_templates" FOR EACH ROW EXECUTE PROCEDURE "public"."update_updated_at_column"(); COMMENT ON COLUMN "public"."contract_templates"."id" IS '模板ID(主键)'; COMMENT ON COLUMN "public"."contract_templates"."template_code" IS '模板编号(唯一标识)'; COMMENT ON COLUMN "public"."contract_templates"."title" IS '模板标题'; COMMENT ON COLUMN "public"."contract_templates"."category_id" IS '所属分类ID(外键)'; COMMENT ON COLUMN "public"."contract_templates"."description" IS '模板描述'; COMMENT ON COLUMN "public"."contract_templates"."file_path" IS '文件存储路径'; COMMENT ON COLUMN "public"."contract_templates"."file_format" IS '文件格式(docx/pdf/txt)'; COMMENT ON COLUMN "public"."contract_templates"."is_featured" IS '是否推荐模板'; COMMENT ON COLUMN "public"."contract_templates"."created_at" IS '创建时间(带时区)'; COMMENT ON COLUMN "public"."contract_templates"."updated_at" IS '最后更新时间(带时区)'; COMMENT ON COLUMN "public"."contract_templates"."pdf_file_path" IS 'pdf文件存储路径'; COMMENT ON TABLE "public"."contract_templates" IS '合同模板表'; ```