R-004_用户主档全量时点版本_lq_user_profile_version.sql 2.02 KB
-- =============================================================================
-- R-004:用户主档全量时点版本(与门店 lq_store_profile_version 时点语义一致)
-- 说明:
--   1. 主键 F_Id 由应用层 YitIdHelper.NextId().ToString() 生成。
--   2. 同一用户 F_VersionNo 单调递增;新版本写入前将上一版本 F_ValidTo 置为本版本 F_ValidFrom。
--   3. F_FullSnapshotJson 存脱敏后的完整 BASE_USER 业务字段 JSON(不含密码/密钥),供算薪时点与还原。
--   4. 查询「某日当时主档」:F_TargetUserId + F_ValidFrom <= @asOf AND (F_ValidTo IS NULL OR F_ValidTo > @asOf)。
-- =============================================================================

CREATE TABLE IF NOT EXISTS `lq_user_profile_version` (
  `F_Id` varchar(50) NOT NULL COMMENT '主键',
  `F_TargetUserId` varchar(50) NOT NULL COMMENT '目标用户 BASE_USER.F_Id',
  `F_VersionNo` int NOT NULL COMMENT '用户内版本号,从1递增',
  `F_ValidFrom` datetime NOT NULL COMMENT '本版本生效时间(含)',
  `F_ValidTo` datetime DEFAULT NULL COMMENT '失效时间(不含);NULL 表示当前仍有效',
  `F_OperatorUserId` varchar(64) DEFAULT NULL COMMENT '提交变更的操作人',
  `F_OperatorUserName` varchar(128) DEFAULT NULL COMMENT '操作人姓名冗余',
  `F_ChangeTrigger` varchar(64) DEFAULT NULL COMMENT 'PROFILE_UPDATE/SELF_PROFILE_UPDATE/USER_RELATION_BATCH 等',
  `F_Mdid` varchar(50) DEFAULT NULL COMMENT '门店快照',
  `F_Gw` varchar(64) DEFAULT NULL COMMENT '岗位 Gw 快照',
  `F_OrganizeId` varchar(50) DEFAULT NULL COMMENT '组织快照',
  `F_FullSnapshotJson` longtext COMMENT '脱敏全量主档 JSON(schemaVersion + user)',
  PRIMARY KEY (`F_Id`),
  UNIQUE KEY `UK_user_profile_version` (`F_TargetUserId`,`F_VersionNo`),
  KEY `IX_user_valid_from` (`F_TargetUserId`,`F_ValidFrom`),
  KEY `IX_user_valid_range` (`F_TargetUserId`,`F_ValidTo`,`F_ValidFrom`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户主档时点全量版本(算薪/统计按月末解析)';