pbl_domain_ext/sql/pbl_domain_ext.sql
2026-09-19 08:44:00 +08:00

59 lines
4.2 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)
-- 唯一新增表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;
-- ------------------------------------------------------------