66 lines
4.3 KiB
SQL
66 lines
4.3 KiB
SQL
-- =====================================================================
|
|
-- pbl_domain_ext (M8) 基础域薄扩展 world/scene/entity
|
|
-- 权威表定义: models/pbl_domain_ref.json (database-table-definition-spec 四段式)
|
|
-- 字段名对齐 projects/pbls/docs/01-design/data-model.md §J1: ext_json LONGTEXT
|
|
-- 约束: 仅新增关联表, 不改 world / scene / entity 三张基表结构 (Q-OPEN-3)
|
|
-- 幂等: 全部 IF NOT EXISTS / ON DUPLICATE KEY UPDATE, 可重复执行
|
|
-- =====================================================================
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- 1. 关联表 pbl_domain_ref (唯一新增表)
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `pbl_domain_ref` (
|
|
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
|
`tenant_id` VARCHAR(64) NOT NULL COMMENT '租户ID(打头)',
|
|
`ref_type` VARCHAR(32) NOT NULL COMMENT '关联对象类型(world/scene/entity)',
|
|
`ref_id` BIGINT NOT NULL COMMENT '基表记录ID(world.id/scene.id/entity.id)',
|
|
`blueprint_id` BIGINT DEFAULT NULL COMMENT '关联蓝图ID',
|
|
`class_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '班级ID',
|
|
`team_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '团队ID',
|
|
`ext_json` LONGTEXT DEFAULT NULL COMMENT '扩展JSON(租户/班级/团队关联属性)',
|
|
`created_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人',
|
|
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
`updated_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人',
|
|
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_pbl_domain_ref` (`tenant_id`, `ref_type`, `ref_id`, `class_id`, `team_id`),
|
|
KEY `idx_pbl_domain_ref_tenant_type` (`tenant_id`, `ref_type`),
|
|
KEY `idx_pbl_domain_ref_blueprint` (`tenant_id`, `blueprint_id`),
|
|
KEY `idx_pbl_domain_ref_class` (`tenant_id`, `class_id`),
|
|
KEY `idx_pbl_domain_ref_team` (`tenant_id`, `team_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PBL基础域薄扩展关联表(world/scene/entity)';
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- 2. 字典: pbl_domain_ref_type (models.codes 引用 appcodes_kv, cond=parentid=)
|
|
-- appcodes 与 appcodes_kv 必须成对写入
|
|
-- ---------------------------------------------------------------------
|
|
INSERT INTO `appcodes` (`id`, `name`, `hierarchy_flg`) VALUES
|
|
('pbl_domain_ref_type', 'PBL关联对象类型', '0')
|
|
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
|
|
|
|
INSERT INTO `appcodes_kv` (`id`, `parentid`, `k`, `v`) VALUES
|
|
('pbl_drt_world', 'pbl_domain_ref_type', 'world', '世界'),
|
|
('pbl_drt_scene', 'pbl_domain_ref_type', 'scene', '场景'),
|
|
('pbl_drt_entity', 'pbl_domain_ref_type', 'entity', '实体')
|
|
ON DUPLICATE KEY UPDATE `v` = VALUES(`v`);
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- 3. 迁移兼容: 历史版本曾用列名 `ext`(json), 统一为设计权威名 ext_json(LONGTEXT)
|
|
-- 存在旧列时搬迁数据后删除, 保证 models / sql / api 三处同名同型
|
|
-- ---------------------------------------------------------------------
|
|
-- (由部署脚本按 information_schema 判定后执行, 此处保留语句备查)
|
|
-- SET @has_ext := (SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
-- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pbl_domain_ref' AND COLUMN_NAME = 'ext');
|
|
-- SET @sql := IF(@has_ext > 0,
|
|
-- 'UPDATE pbl_domain_ref SET ext_json = CAST(ext AS CHAR) WHERE ext_json IS NULL AND ext IS NOT NULL',
|
|
-- 'SELECT 1');
|
|
-- PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
|
|
-- SET @sql2 := IF(@has_ext > 0, 'ALTER TABLE pbl_domain_ref DROP COLUMN ext', 'SELECT 1');
|
|
-- PREPARE s2 FROM @sql2; EXECUTE s2; DEALLOCATE PREPARE s2;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- 4. 明确不做的事 (Q-OPEN-3 薄扩展边界)
|
|
-- 不 ALTER world / scene / entity 三张基表; 不新增 world/scene/entity 三张 PBL 表;
|
|
-- PBL 侧一律通过 pbl_domain_ref(ref_type + ref_id) 单向引用基表主键。
|
|
-- ---------------------------------------------------------------------
|