59 lines
4.2 KiB
SQL
59 lines
4.2 KiB
SQL
-- ============================================================
|
||
-- pbl_domain_ext (M8 基础域薄扩展 world/scene/entity)
|
||
-- 唯一新增表:pbl_domain_ref(关联表,三类关联共用,靠 ref_type 区分)
|
||
-- 基表 world / scene / entity 由各自基础模块负责,本文件零建表、零写入。
|
||
-- 列名与 models/pbl_domain_ref.json、pbl_domain_ext/base.py FIELD_MAXLEN
|
||
-- 三处同名同型(tests/test_models_contract.py 机械校验)。
|
||
-- 审计列采用设计 §J1 权威列名 creator_id / updater_id / bind_at / ext_json,
|
||
-- 历史版本曾使用 created_by / updated_by 旧名,已废弃(禁用列名由契约测试将守)。
|
||
-- ============================================================
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_domain_ref` (
|
||
`id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '主键ID',
|
||
`tenant_id` VARCHAR(32) NOT NULL DEFAULT '0' COMMENT '租户ID',
|
||
`ref_type` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '关联类型(world/scene/entity)',
|
||
`ref_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '基础域对象ID',
|
||
`ref_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '基础域对象编码',
|
||
`ref_name` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '基础域对象名称',
|
||
`blueprint_id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'PBL蓝图ID',
|
||
`team_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '团队ID',
|
||
`class_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '班级ID',
|
||
`bind_state` VARCHAR(32) NOT NULL DEFAULT 'bound' COMMENT '绑定状态(bound/unbound)',
|
||
`bind_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '绑定时间',
|
||
`remark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注',
|
||
`ext_json` TEXT NULL COMMENT '扩展属性JSON(设计§J1权威列名)',
|
||
`creator_id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '创建人ID',
|
||
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`updater_id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '更新人ID',
|
||
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`is_deleted` VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记(0正常/1已删)',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_domain_ref_bind` (`tenant_id`, `ref_type`, `ref_id`),
|
||
KEY `idx_pbl_domain_ref_tenant_type` (`tenant_id`, `ref_type`, `is_deleted`),
|
||
KEY `idx_pbl_domain_ref_blueprint` (`tenant_id`, `blueprint_id`),
|
||
KEY `idx_pbl_domain_ref_team` (`tenant_id`, `class_id`, `team_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL基础域关联表(world/scene/entity)';
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 存量库幂等迁移(仅在已建过旧版本表的库上手工执行;新库跑上面的 CREATE 即可)
|
||
-- 策略:RENAME 保数据,不 DROP 重建;重复执行安全(先查 information_schema)。
|
||
--
|
||
-- SET @c = (SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
-- WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='pbl_domain_ref'
|
||
-- AND COLUMN_NAME='created_by');
|
||
-- SET @s = IF(@c>0, 'ALTER TABLE `pbl_domain_ref` CHANGE COLUMN `created_by` `creator_id` VARCHAR(32) NOT NULL DEFAULT "" COMMENT "创建人ID"', 'SELECT "creator_id ok"');
|
||
-- PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
|
||
--
|
||
-- SET @c = (SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
-- WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='pbl_domain_ref'
|
||
-- AND COLUMN_NAME='updated_by');
|
||
-- SET @s = IF(@c>0, 'ALTER TABLE `pbl_domain_ref` CHANGE COLUMN `updated_by` `updater_id` VARCHAR(32) NOT NULL DEFAULT "" COMMENT "更新人ID"', 'SELECT "updater_id ok"');
|
||
-- PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
|
||
--
|
||
-- SET @c = (SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
-- WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='pbl_domain_ref'
|
||
-- AND COLUMN_NAME='bind_at');
|
||
-- SET @s = IF(@c=0, 'ALTER TABLE `pbl_domain_ref` ADD COLUMN `bind_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "绑定时间" AFTER `bind_state`', 'SELECT "bind_at ok"');
|
||
-- PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
|
||
-- ------------------------------------------------------------
|