pbl_blueprint/pbl_blueprint/sql/pbl_blueprint.core.sql

521 lines
26 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- pbl_blueprint 核心表 DDL
-- 本文件由 scripts/derive_artifacts.py 从 pbl_blueprint/models/*.json 机械派生,禁止手工编辑
-- engine: postgresql与 projects/pbls/env/*.json 的 db.engine 一致)
-- 主键 id 为应用层生成的 str(32):不使用 SERIAL / BIGSERIAL / nextval / AUTO_INCREMENT
-- pbl_blueprint: PBL蓝图聚合根
CREATE TABLE IF NOT EXISTS pbl_blueprint (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
blueprint_code varchar(64) NOT NULL,
blueprint_name varchar(128) NOT NULL,
domain_code varchar(64),
grade_code varchar(32),
subject_code varchar(64),
project_duration integer,
student_count integer,
group_count integer,
complexity_level varchar(32),
status varchar(32),
current_version integer,
published_version_id varchar(32),
source_blueprint_id varchar(32),
source_template_id varchar(32),
owner_user_id varchar(64),
estimated_cost numeric(18,2),
tags_json text,
summary_text text,
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint.id IS '主键';
COMMENT ON COLUMN pbl_blueprint.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint.blueprint_code IS '蓝图编码';
COMMENT ON COLUMN pbl_blueprint.blueprint_name IS '蓝图名称';
COMMENT ON COLUMN pbl_blueprint.domain_code IS '领域';
COMMENT ON COLUMN pbl_blueprint.grade_code IS '学段';
COMMENT ON COLUMN pbl_blueprint.subject_code IS '学科';
COMMENT ON COLUMN pbl_blueprint.project_duration IS '项目时长(课时)';
COMMENT ON COLUMN pbl_blueprint.student_count IS '参与学生数';
COMMENT ON COLUMN pbl_blueprint.group_count IS '小组数';
COMMENT ON COLUMN pbl_blueprint.complexity_level IS '复杂度';
COMMENT ON COLUMN pbl_blueprint.status IS '蓝图状态';
COMMENT ON COLUMN pbl_blueprint.current_version IS '当前版本号';
COMMENT ON COLUMN pbl_blueprint.published_version_id IS '已发布版本ID';
COMMENT ON COLUMN pbl_blueprint.source_blueprint_id IS '派生来源蓝图ID(fork)';
COMMENT ON COLUMN pbl_blueprint.source_template_id IS '来源模板ID';
COMMENT ON COLUMN pbl_blueprint.owner_user_id IS '负责人';
COMMENT ON COLUMN pbl_blueprint.estimated_cost IS '预估成本(元)';
COMMENT ON COLUMN pbl_blueprint.tags_json IS '标签(JSON数组)';
COMMENT ON COLUMN pbl_blueprint.summary_text IS '蓝图摘要';
COMMENT ON COLUMN pbl_blueprint.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint.updated_at IS '更新时间';
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_uk_blueprint_tenant_code ON pbl_blueprint (tenant_id, blueprint_code);
CREATE INDEX IF NOT EXISTS pbl_blueprint_idx_blueprint_tenant_status ON pbl_blueprint (tenant_id, status, is_deleted);
CREATE INDEX IF NOT EXISTS pbl_blueprint_idx_blueprint_class ON pbl_blueprint (tenant_id, class_id, is_deleted);
-- pbl_blueprint_artifact_spec: 蓝图子对象-产出物规格(Artifact)
CREATE TABLE IF NOT EXISTS pbl_blueprint_artifact_spec (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
blueprint_id varchar(32) NOT NULL,
version_id varchar(32),
code varchar(64),
name varchar(128) NOT NULL,
description text,
seq_no integer,
status varchar(32),
content_json text,
artifact_type varchar(32),
required_flag integer,
quality_criteria text,
due_seq integer,
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint_artifact_spec.id IS '主键';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.blueprint_id IS '所属蓝图ID';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.version_id IS '所属版本ID';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.code IS '对象编码';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.name IS '对象名称';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.description IS '描述';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.seq_no IS '排序号';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.status IS '状态';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.content_json IS '扩展内容(JSON)';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.artifact_type IS '产出物类型';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.required_flag IS '是否必需(0/1)';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.quality_criteria IS '质量标准(JSON)';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.due_seq IS '交付次序';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint_artifact_spec.updated_at IS '更新时间';
CREATE INDEX IF NOT EXISTS pbl_blueprint_artifact_spec_idx_pbl_blueprint_artifact_spec_tenant_bp ON pbl_blueprint_artifact_spec (tenant_id, blueprint_id, is_deleted);
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_artifact_spec_uk_pbl_blueprint_artifact_spec_tenant_code ON pbl_blueprint_artifact_spec (tenant_id, code);
-- pbl_blueprint_evidence_spec: 蓝图子对象-证据规格(Evidence)
CREATE TABLE IF NOT EXISTS pbl_blueprint_evidence_spec (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
blueprint_id varchar(32) NOT NULL,
version_id varchar(32),
code varchar(64),
name varchar(128) NOT NULL,
description text,
seq_no integer,
status varchar(32),
content_json text,
evidence_type varchar(32),
artifact_id varchar(32),
min_count integer,
weight_value numeric(18,2),
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint_evidence_spec.id IS '主键';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.blueprint_id IS '所属蓝图ID';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.version_id IS '所属版本ID';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.code IS '对象编码';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.name IS '对象名称';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.description IS '描述';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.seq_no IS '排序号';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.status IS '状态';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.content_json IS '扩展内容(JSON)';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.evidence_type IS '证据类型';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.artifact_id IS '关联产出物ID';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.min_count IS '最少提交数';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.weight_value IS '证据权重';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint_evidence_spec.updated_at IS '更新时间';
CREATE INDEX IF NOT EXISTS pbl_blueprint_evidence_spec_idx_pbl_blueprint_evidence_spec_tenant_bp ON pbl_blueprint_evidence_spec (tenant_id, blueprint_id, is_deleted);
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_evidence_spec_uk_pbl_blueprint_evidence_spec_tenant_code ON pbl_blueprint_evidence_spec (tenant_id, code);
-- pbl_blueprint_learning_goal: 蓝图子对象-学习目标(Goal)
CREATE TABLE IF NOT EXISTS pbl_blueprint_learning_goal (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
blueprint_id varchar(32) NOT NULL,
version_id varchar(32),
code varchar(64),
name varchar(128) NOT NULL,
description text,
seq_no integer,
status varchar(32),
content_json text,
goal_type varchar(32),
competency_code varchar(64),
knowledge_points text,
measurable_flag integer,
weight_value numeric(18,2),
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint_learning_goal.id IS '主键';
COMMENT ON COLUMN pbl_blueprint_learning_goal.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint_learning_goal.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint_learning_goal.blueprint_id IS '所属蓝图ID';
COMMENT ON COLUMN pbl_blueprint_learning_goal.version_id IS '所属版本ID';
COMMENT ON COLUMN pbl_blueprint_learning_goal.code IS '对象编码';
COMMENT ON COLUMN pbl_blueprint_learning_goal.name IS '对象名称';
COMMENT ON COLUMN pbl_blueprint_learning_goal.description IS '描述';
COMMENT ON COLUMN pbl_blueprint_learning_goal.seq_no IS '排序号';
COMMENT ON COLUMN pbl_blueprint_learning_goal.status IS '状态';
COMMENT ON COLUMN pbl_blueprint_learning_goal.content_json IS '扩展内容(JSON)';
COMMENT ON COLUMN pbl_blueprint_learning_goal.goal_type IS '目标类型';
COMMENT ON COLUMN pbl_blueprint_learning_goal.competency_code IS '素养/课标编码';
COMMENT ON COLUMN pbl_blueprint_learning_goal.knowledge_points IS '知识点(JSON数组)';
COMMENT ON COLUMN pbl_blueprint_learning_goal.measurable_flag IS '是否可测(0/1)';
COMMENT ON COLUMN pbl_blueprint_learning_goal.weight_value IS '权重';
COMMENT ON COLUMN pbl_blueprint_learning_goal.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint_learning_goal.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint_learning_goal.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint_learning_goal.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint_learning_goal.updated_at IS '更新时间';
CREATE INDEX IF NOT EXISTS pbl_blueprint_learning_goal_idx_pbl_blueprint_learning_goal_tenant_bp ON pbl_blueprint_learning_goal (tenant_id, blueprint_id, is_deleted);
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_learning_goal_uk_pbl_blueprint_learning_goal_tenant_code ON pbl_blueprint_learning_goal (tenant_id, code);
-- pbl_blueprint_mission: 蓝图子对象-真实情境任务(Mission)
CREATE TABLE IF NOT EXISTS pbl_blueprint_mission (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
blueprint_id varchar(32) NOT NULL,
version_id varchar(32),
code varchar(64),
name varchar(128) NOT NULL,
description text,
seq_no integer,
status varchar(32),
content_json text,
mission_type varchar(32),
scenario_text text,
audience varchar(256),
duration_hours numeric(18,2),
authenticity_score numeric(18,2),
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint_mission.id IS '主键';
COMMENT ON COLUMN pbl_blueprint_mission.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint_mission.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint_mission.blueprint_id IS '所属蓝图ID';
COMMENT ON COLUMN pbl_blueprint_mission.version_id IS '所属版本ID';
COMMENT ON COLUMN pbl_blueprint_mission.code IS '对象编码';
COMMENT ON COLUMN pbl_blueprint_mission.name IS '对象名称';
COMMENT ON COLUMN pbl_blueprint_mission.description IS '描述';
COMMENT ON COLUMN pbl_blueprint_mission.seq_no IS '排序号';
COMMENT ON COLUMN pbl_blueprint_mission.status IS '状态';
COMMENT ON COLUMN pbl_blueprint_mission.content_json IS '扩展内容(JSON)';
COMMENT ON COLUMN pbl_blueprint_mission.mission_type IS '情境类型';
COMMENT ON COLUMN pbl_blueprint_mission.scenario_text IS '情境描述';
COMMENT ON COLUMN pbl_blueprint_mission.audience IS '受众/服务对象';
COMMENT ON COLUMN pbl_blueprint_mission.duration_hours IS '预计课时';
COMMENT ON COLUMN pbl_blueprint_mission.authenticity_score IS '真实性评分';
COMMENT ON COLUMN pbl_blueprint_mission.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint_mission.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint_mission.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint_mission.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint_mission.updated_at IS '更新时间';
CREATE INDEX IF NOT EXISTS pbl_blueprint_mission_idx_pbl_blueprint_mission_tenant_bp ON pbl_blueprint_mission (tenant_id, blueprint_id, is_deleted);
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_mission_uk_pbl_blueprint_mission_tenant_code ON pbl_blueprint_mission (tenant_id, code);
-- pbl_blueprint_reflection_spec: 蓝图子对象-反思规格(Reflection)
CREATE TABLE IF NOT EXISTS pbl_blueprint_reflection_spec (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
blueprint_id varchar(32) NOT NULL,
version_id varchar(32),
code varchar(64),
name varchar(128) NOT NULL,
description text,
seq_no integer,
status varchar(32),
content_json text,
reflect_type varchar(32),
frequency varchar(32),
prompt_text text,
duration_minutes integer,
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint_reflection_spec.id IS '主键';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.blueprint_id IS '所属蓝图ID';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.version_id IS '所属版本ID';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.code IS '对象编码';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.name IS '对象名称';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.description IS '描述';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.seq_no IS '排序号';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.status IS '状态';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.content_json IS '扩展内容(JSON)';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.reflect_type IS '反思类型';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.frequency IS '频次';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.prompt_text IS '反思引导语';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.duration_minutes IS '时长(分钟)';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint_reflection_spec.updated_at IS '更新时间';
CREATE INDEX IF NOT EXISTS pbl_blueprint_reflection_spec_idx_pbl_blueprint_reflection_spec_tenant_bp ON pbl_blueprint_reflection_spec (tenant_id, blueprint_id, is_deleted);
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_reflection_spec_uk_pbl_blueprint_reflection_spec_tenant_code ON pbl_blueprint_reflection_spec (tenant_id, code);
-- pbl_blueprint_role: 蓝图子对象-角色(Role)
CREATE TABLE IF NOT EXISTS pbl_blueprint_role (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
blueprint_id varchar(32) NOT NULL,
version_id varchar(32),
code varchar(64),
name varchar(128) NOT NULL,
description text,
seq_no integer,
status varchar(32),
content_json text,
role_category varchar(32),
member_count integer,
responsibility text,
competency_tags text,
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint_role.id IS '主键';
COMMENT ON COLUMN pbl_blueprint_role.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint_role.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint_role.blueprint_id IS '所属蓝图ID';
COMMENT ON COLUMN pbl_blueprint_role.version_id IS '所属版本ID';
COMMENT ON COLUMN pbl_blueprint_role.code IS '对象编码';
COMMENT ON COLUMN pbl_blueprint_role.name IS '对象名称';
COMMENT ON COLUMN pbl_blueprint_role.description IS '描述';
COMMENT ON COLUMN pbl_blueprint_role.seq_no IS '排序号';
COMMENT ON COLUMN pbl_blueprint_role.status IS '状态';
COMMENT ON COLUMN pbl_blueprint_role.content_json IS '扩展内容(JSON)';
COMMENT ON COLUMN pbl_blueprint_role.role_category IS '角色类别';
COMMENT ON COLUMN pbl_blueprint_role.member_count IS '角色人数';
COMMENT ON COLUMN pbl_blueprint_role.responsibility IS '职责说明';
COMMENT ON COLUMN pbl_blueprint_role.competency_tags IS '能力标签(JSON数组)';
COMMENT ON COLUMN pbl_blueprint_role.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint_role.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint_role.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint_role.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint_role.updated_at IS '更新时间';
CREATE INDEX IF NOT EXISTS pbl_blueprint_role_idx_pbl_blueprint_role_tenant_bp ON pbl_blueprint_role (tenant_id, blueprint_id, is_deleted);
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_role_uk_pbl_blueprint_role_tenant_code ON pbl_blueprint_role (tenant_id, code);
-- pbl_blueprint_task: 蓝图子对象-任务分解(Task)
CREATE TABLE IF NOT EXISTS pbl_blueprint_task (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
blueprint_id varchar(32) NOT NULL,
version_id varchar(32),
code varchar(64),
name varchar(128) NOT NULL,
description text,
seq_no integer,
status varchar(32),
content_json text,
parent_task_id varchar(32),
task_type varchar(32),
tool_resources text,
planned_hours numeric(18,2),
assessment_rule text,
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint_task.id IS '主键';
COMMENT ON COLUMN pbl_blueprint_task.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint_task.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint_task.blueprint_id IS '所属蓝图ID';
COMMENT ON COLUMN pbl_blueprint_task.version_id IS '所属版本ID';
COMMENT ON COLUMN pbl_blueprint_task.code IS '对象编码';
COMMENT ON COLUMN pbl_blueprint_task.name IS '对象名称';
COMMENT ON COLUMN pbl_blueprint_task.description IS '描述';
COMMENT ON COLUMN pbl_blueprint_task.seq_no IS '排序号';
COMMENT ON COLUMN pbl_blueprint_task.status IS '状态';
COMMENT ON COLUMN pbl_blueprint_task.content_json IS '扩展内容(JSON)';
COMMENT ON COLUMN pbl_blueprint_task.parent_task_id IS '父任务ID';
COMMENT ON COLUMN pbl_blueprint_task.task_type IS '任务类型';
COMMENT ON COLUMN pbl_blueprint_task.tool_resources IS '工具与资源(JSON数组)';
COMMENT ON COLUMN pbl_blueprint_task.planned_hours IS '计划课时';
COMMENT ON COLUMN pbl_blueprint_task.assessment_rule IS '评价规则(JSON)';
COMMENT ON COLUMN pbl_blueprint_task.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint_task.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint_task.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint_task.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint_task.updated_at IS '更新时间';
CREATE INDEX IF NOT EXISTS pbl_blueprint_task_idx_pbl_blueprint_task_tenant_bp ON pbl_blueprint_task (tenant_id, blueprint_id, is_deleted);
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_task_uk_pbl_blueprint_task_tenant_code ON pbl_blueprint_task (tenant_id, code);
-- pbl_blueprint_template: PBL蓝图模板
CREATE TABLE IF NOT EXISTS pbl_blueprint_template (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
template_code varchar(64) NOT NULL,
template_name varchar(128) NOT NULL,
template_type varchar(32),
domain_code varchar(64),
grade_code varchar(32),
subject_code varchar(64),
complexity_level varchar(32),
scope varchar(32),
source_blueprint_id varchar(32),
usage_count integer,
status varchar(32),
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint_template.id IS '主键';
COMMENT ON COLUMN pbl_blueprint_template.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint_template.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint_template.template_code IS '模板编码';
COMMENT ON COLUMN pbl_blueprint_template.template_name IS '模板名称';
COMMENT ON COLUMN pbl_blueprint_template.template_type IS '模板类型';
COMMENT ON COLUMN pbl_blueprint_template.domain_code IS '领域';
COMMENT ON COLUMN pbl_blueprint_template.grade_code IS '学段';
COMMENT ON COLUMN pbl_blueprint_template.subject_code IS '学科';
COMMENT ON COLUMN pbl_blueprint_template.complexity_level IS '复杂度';
COMMENT ON COLUMN pbl_blueprint_template.scope IS '可见范围';
COMMENT ON COLUMN pbl_blueprint_template.source_blueprint_id IS '来源蓝图ID';
COMMENT ON COLUMN pbl_blueprint_template.usage_count IS '引用次数';
COMMENT ON COLUMN pbl_blueprint_template.status IS '状态';
COMMENT ON COLUMN pbl_blueprint_template.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint_template.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint_template.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint_template.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint_template.updated_at IS '更新时间';
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_template_uk_template_tenant_code ON pbl_blueprint_template (tenant_id, template_code);
CREATE INDEX IF NOT EXISTS pbl_blueprint_template_idx_template_tenant_status ON pbl_blueprint_template (tenant_id, status, is_deleted);
-- pbl_blueprint_template_item: PBL蓝图模板明细
CREATE TABLE IF NOT EXISTS pbl_blueprint_template_item (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
template_id varchar(32) NOT NULL,
subobject_type varchar(32) NOT NULL,
item_payload_json text,
seq_no integer,
required_flag integer,
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint_template_item.id IS '主键';
COMMENT ON COLUMN pbl_blueprint_template_item.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint_template_item.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint_template_item.template_id IS '所属模板ID';
COMMENT ON COLUMN pbl_blueprint_template_item.subobject_type IS '子对象类型';
COMMENT ON COLUMN pbl_blueprint_template_item.item_payload_json IS '模板内容(JSON)';
COMMENT ON COLUMN pbl_blueprint_template_item.seq_no IS '排序号';
COMMENT ON COLUMN pbl_blueprint_template_item.required_flag IS '是否必需(0/1)';
COMMENT ON COLUMN pbl_blueprint_template_item.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint_template_item.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint_template_item.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint_template_item.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint_template_item.updated_at IS '更新时间';
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_template_item_uk_tplitem_tenant_tpl_type_seq ON pbl_blueprint_template_item (tenant_id, template_id, subobject_type, seq_no);
CREATE INDEX IF NOT EXISTS pbl_blueprint_template_item_idx_tplitem_template ON pbl_blueprint_template_item (tenant_id, template_id, is_deleted);
-- pbl_blueprint_version: PBL蓝图版本
CREATE TABLE IF NOT EXISTS pbl_blueprint_version (
id varchar(32) NOT NULL,
tenant_id varchar(32) NOT NULL,
class_id varchar(32),
blueprint_id varchar(32) NOT NULL,
version_no integer NOT NULL,
version_name varchar(128),
version_status varchar(32),
snapshot_json text,
content_hash varchar(64),
published_by varchar(64),
published_at timestamp,
change_note text,
base_version_id varchar(32),
is_deleted integer,
created_by varchar(64),
created_at timestamp,
updated_by varchar(64),
updated_at timestamp
);
COMMENT ON COLUMN pbl_blueprint_version.id IS '主键';
COMMENT ON COLUMN pbl_blueprint_version.tenant_id IS '租户ID(强制打头)';
COMMENT ON COLUMN pbl_blueprint_version.class_id IS '班级ID';
COMMENT ON COLUMN pbl_blueprint_version.blueprint_id IS '所属蓝图ID';
COMMENT ON COLUMN pbl_blueprint_version.version_no IS '版本号';
COMMENT ON COLUMN pbl_blueprint_version.version_name IS '版本名称';
COMMENT ON COLUMN pbl_blueprint_version.version_status IS '版本状态';
COMMENT ON COLUMN pbl_blueprint_version.snapshot_json IS '蓝图快照(JSON)';
COMMENT ON COLUMN pbl_blueprint_version.content_hash IS '快照内容哈希';
COMMENT ON COLUMN pbl_blueprint_version.published_by IS '发布人';
COMMENT ON COLUMN pbl_blueprint_version.published_at IS '发布时间';
COMMENT ON COLUMN pbl_blueprint_version.change_note IS '变更说明';
COMMENT ON COLUMN pbl_blueprint_version.base_version_id IS '基线版本ID';
COMMENT ON COLUMN pbl_blueprint_version.is_deleted IS '删除标记(0未删/1已删)';
COMMENT ON COLUMN pbl_blueprint_version.created_by IS '创建人';
COMMENT ON COLUMN pbl_blueprint_version.created_at IS '创建时间';
COMMENT ON COLUMN pbl_blueprint_version.updated_by IS '更新人';
COMMENT ON COLUMN pbl_blueprint_version.updated_at IS '更新时间';
CREATE UNIQUE INDEX IF NOT EXISTS pbl_blueprint_version_uk_version_blueprint_no ON pbl_blueprint_version (tenant_id, blueprint_id, version_no);
CREATE INDEX IF NOT EXISTS pbl_blueprint_version_idx_version_blueprint ON pbl_blueprint_version (tenant_id, blueprint_id, is_deleted);