-- ============================================================ -- pbl_domain_ext —— M8 基础域薄扩展 DDL(world/scene/entity 关联表) -- 铁律:不修改 world / scene / entity 三张基表(Q-OPEN-3 决议) -- 关联表不建外键(避免锁基表 / 跨库),只存 id 引用 -- 方言:MariaDB / MySQL(BIGINT AUTO_INCREMENT) -- ============================================================ CREATE TABLE IF NOT EXISTS pbl_world_ref ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', tenant_id VARCHAR(64) NOT NULL COMMENT 'PBL 租户ID(强制打头)', world_id BIGINT NOT NULL COMMENT '基表 world.id(只读引用)', class_id BIGINT NOT NULL DEFAULT 0 COMMENT '归属班级 pbl_class.id', team_id BIGINT NOT NULL DEFAULT 0 COMMENT '归属团队 pbl_team.id', visibility VARCHAR(16) NOT NULL DEFAULT 'team' COMMENT '可见性 team/class/tenant', role_code VARCHAR(64) NOT NULL DEFAULT '' COMMENT '角色绑定,空=通用', source VARCHAR(32) NOT NULL DEFAULT 'manual' COMMENT '来源 manual/compiler/import', ext_json TEXT NULL COMMENT 'PBL 侧扩展属性 JSON', created_by VARCHAR(64) NULL COMMENT '创建人', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NULL COMMENT '更新时间', PRIMARY KEY (id), UNIQUE KEY uk_pbl_world_ref (tenant_id, world_id, team_id, role_code), KEY idx_pbl_world_ref_class (tenant_id, class_id), KEY idx_pbl_world_ref_team (tenant_id, team_id), KEY idx_pbl_world_ref_world (world_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PBL 世界关联表(薄扩展,不改 world 基表)'; CREATE TABLE IF NOT EXISTS pbl_scene_ref ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', tenant_id VARCHAR(64) NOT NULL COMMENT 'PBL 租户ID(强制打头)', scene_id BIGINT NOT NULL COMMENT '基表 scene.id(只读引用)', world_id BIGINT NOT NULL DEFAULT 0 COMMENT '父级归属 world.id', class_id BIGINT NOT NULL DEFAULT 0 COMMENT '归属班级 pbl_class.id', team_id BIGINT NOT NULL DEFAULT 0 COMMENT '归属团队 pbl_team.id', visibility VARCHAR(16) NOT NULL DEFAULT 'team' COMMENT '可见性 team/class/tenant', role_code VARCHAR(64) NOT NULL DEFAULT '' COMMENT '角色绑定,空=通用', source VARCHAR(32) NOT NULL DEFAULT 'manual' COMMENT '来源 manual/compiler/import', ext_json TEXT NULL COMMENT 'PBL 侧扩展属性 JSON', created_by VARCHAR(64) NULL COMMENT '创建人', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NULL COMMENT '更新时间', PRIMARY KEY (id), UNIQUE KEY uk_pbl_scene_ref (tenant_id, scene_id, team_id, role_code), KEY idx_pbl_scene_ref_world (tenant_id, world_id), KEY idx_pbl_scene_ref_class (tenant_id, class_id), KEY idx_pbl_scene_ref_team (tenant_id, team_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PBL 场景关联表(薄扩展,不改 scene 基表)'; CREATE TABLE IF NOT EXISTS pbl_entity_ref ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', tenant_id VARCHAR(64) NOT NULL COMMENT 'PBL 租户ID(强制打头)', entity_id BIGINT NOT NULL COMMENT '基表 entity.id(只读引用)', scene_id BIGINT NOT NULL DEFAULT 0 COMMENT '父级归属 scene.id', world_id BIGINT NOT NULL DEFAULT 0 COMMENT '父级归属 world.id', class_id BIGINT NOT NULL DEFAULT 0 COMMENT '归属班级 pbl_class.id', team_id BIGINT NOT NULL DEFAULT 0 COMMENT '归属团队 pbl_team.id', visibility VARCHAR(16) NOT NULL DEFAULT 'team' COMMENT '可见性 team/class/tenant', role_code VARCHAR(64) NOT NULL DEFAULT '' COMMENT '角色绑定,空=通用', source VARCHAR(32) NOT NULL DEFAULT 'manual' COMMENT '来源 manual/compiler/import', ext_json TEXT NULL COMMENT 'PBL 侧扩展属性 JSON', created_by VARCHAR(64) NULL COMMENT '创建人', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NULL COMMENT '更新时间', PRIMARY KEY (id), UNIQUE KEY uk_pbl_entity_ref (tenant_id, entity_id, team_id, role_code), KEY idx_pbl_entity_ref_scene (tenant_id, scene_id), KEY idx_pbl_entity_ref_world (tenant_id, world_id), KEY idx_pbl_entity_ref_team (tenant_id, team_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PBL 实体关联表(薄扩展,不改 entity 基表)';