pbl_domain_ext/sql/pbl_domain_ext.sql
2026-09-18 19:12:47 +08:00

72 lines
4.8 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_domain_ext —— [M8] 基础域薄扩展 world/scene/entity
-- 由 models/pbl_domain_ref.json 生成json2ddl mysql .),列名/类型与
-- models fields、pbl_domain_ext/base.py LIST_FIELDS 严格同名同型QC#1/#2
--
-- 薄扩展铁律Q-OPEN-3本文件**只建 1 张关联表 pbl_domain_ref**
-- 不创建、不修改 world / scene / entity 三张基础域基表结构。
-- =====================================================================
-- ---------------------------------------------------------------------
-- 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` VARCHAR(64) NOT NULL COMMENT '基表记录ID(world.id/scene.id/entity.id,基表主键为str32)',
`ref_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '基表记录编码快照(只读冗余,不回写基表)',
`ref_name` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '基表记录名称快照(只读冗余,不回写基表)',
`blueprint_id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '关联蓝图ID(pbl_blueprint主键,str32)',
`class_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '班级ID',
`team_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '团队ID',
`bind_state` VARCHAR(16) NOT NULL DEFAULT 'bound' COMMENT '绑定状态(bound/unbound)',
`bind_at` TIMESTAMP NULL COMMENT '绑定时间',
`ext_json` LONGTEXT NULL COMMENT '扩展JSON(租户/班级/团队关联属性,设计§J1权威名)',
`is_deleted` SMALLINT NOT NULL DEFAULT 0 COMMENT '逻辑删除标记(0正常/1已解绑)',
`creator_id` VARCHAR(64) NULL COMMENT '创建人',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`updater_id` VARCHAR(64) NULL COMMENT '更新人',
`updated_at` TIMESTAMP NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_pbl_domain_ref` (`tenant_id`, `ref_type`, `ref_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`),
KEY `idx_pbl_domain_ref_state` (`tenant_id`, `bind_state`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='PBL基础域薄扩展关联表(world/scene/entity)';
-- ---------------------------------------------------------------------
-- 2. 字典: pbl_domain_ref_type / pbl_bind_state
-- models.codes 引用 appcodes_kv, cond 必须 parentid=(禁 id=
-- appcodes 与 appcodes_kv 必须成对写入
-- ---------------------------------------------------------------------
INSERT INTO `appcodes` (`id`, `name`, `hierarchy_flg`) VALUES
('pbl_domain_ref_type', 'PBL关联对象类型', '0'),
('pbl_bind_state', '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', '实体'),
('pbl_bs_bound', 'pbl_bind_state', 'bound', '已绑定'),
('pbl_bs_unbound', 'pbl_bind_state', 'unbound', '已解绑')
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;