add_user_segment_org_and_user_events.sql 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. 用户分群与事件表改造 SQL(MySQL 5.7)
  3. - 为 users 表增加分群与组织等字段
  4. - 新增 organizations 组织表
  5. - 新增 user_events 用户事件表
  6. */
  7. SET NAMES utf8mb4;
  8. SET FOREIGN_KEY_CHECKS = 0;
  9. -- 1. users 表新增字段(用户分群 / 组织 / 测试账号 / 地区)
  10. ALTER TABLE `users`
  11. ADD COLUMN `user_segment` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'individual' COMMENT '用户/场景分群:individual/school/internal等' AFTER `user_type`,
  12. ADD COLUMN `org_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '组织ID(关联 organizations.org_id)' AFTER `user_segment`,
  13. ADD COLUMN `is_test_user` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否测试账号' AFTER `org_id`,
  14. ADD COLUMN `region` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国家/地区(如 CN、US)' AFTER `is_test_user`,
  15. ADD KEY `idx_user_segment` (`user_segment`),
  16. ADD KEY `idx_org_id` (`org_id`),
  17. ADD KEY `idx_is_test_user` (`is_test_user`),
  18. ADD KEY `idx_region` (`region`);
  19. -- 2. 新增组织表 organizations
  20. DROP TABLE IF EXISTS `organizations`;
  21. CREATE TABLE `organizations` (
  22. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  23. `org_id` varchar(64) NOT NULL COMMENT '组织唯一标识',
  24. `org_name` varchar(200) NOT NULL COMMENT '组织名称',
  25. `org_type` varchar(32) DEFAULT NULL COMMENT '组织类型:school/institution/internal等',
  26. `region` varchar(32) DEFAULT NULL COMMENT '组织所在地区',
  27. `metadata` json DEFAULT NULL COMMENT '扩展信息',
  28. `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  29. `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  30. PRIMARY KEY (`id`),
  31. UNIQUE KEY `uk_org_id` (`org_id`),
  32. KEY `idx_org_id` (`org_id`),
  33. KEY `idx_org_type` (`org_type`),
  34. KEY `idx_org_region` (`region`)
  35. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组织表';
  36. -- 3. 新增用户事件表 user_events
  37. DROP TABLE IF EXISTS `user_events`;
  38. CREATE TABLE `user_events` (
  39. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  40. `event_id` varchar(64) NOT NULL COMMENT '事件ID(客户端或服务端生成,唯一)',
  41. `user_id` varchar(64) NOT NULL COMMENT '用户ID(关联 users.user_id)',
  42. `event_name` varchar(64) NOT NULL COMMENT '事件代码,如 page.chatbot__enter(遵循埋点命名规范)',
  43. `event_label` varchar(128) DEFAULT NULL COMMENT '事件中文名称/描述(如“进入聊天页”、“欢迎页开始按钮点击”)',
  44. `event_time` timestamp NOT NULL COMMENT '事件发生时间(UTC)',
  45. `session_id` varchar(64) DEFAULT NULL COMMENT '会话ID,同一次前台停留共享',
  46. `platform` varchar(16) NOT NULL COMMENT '平台:ios/android/web',
  47. `app_version` varchar(32) DEFAULT NULL COMMENT '应用版本号,如 v0.1.x',
  48. `timezone_offset_minutes` int(11) DEFAULT NULL COMMENT '用户本地相对UTC的分钟偏移量(分钟)',
  49. `properties` json DEFAULT NULL COMMENT '扩展属性(page、entry、button_id、duration_seconds 等)',
  50. `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
  51. PRIMARY KEY (`id`),
  52. UNIQUE KEY `uk_event_id` (`event_id`),
  53. KEY `idx_user_id` (`user_id`),
  54. KEY `idx_event_time` (`event_time`),
  55. KEY `idx_event_name` (`event_name`),
  56. KEY `idx_user_event_time` (`user_id`,`event_time`),
  57. KEY `idx_session_id` (`session_id`),
  58. KEY `idx_event_time_name` (`event_time`,`event_name`)
  59. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户事件表';
  60. SET FOREIGN_KEY_CHECKS = 1;