admin_backend/sdk/abtest/sql/init.sql
2026-04-16 10:20:16 +08:00

68 lines
3.6 KiB
SQL

CREATE DATABASE IF NOT EXISTS abtest DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE abtest;
-- 实验表
CREATE TABLE IF NOT EXISTS experiments (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(128) NOT NULL COMMENT '实验名称',
description VARCHAR(512) NOT NULL DEFAULT '' COMMENT '实验描述',
status TINYINT NOT NULL DEFAULT 0 COMMENT '状态: 0-草稿 1-运行中 2-已暂停 3-已结束',
start_time DATETIME NULL COMMENT '开始时间',
end_time DATETIME NULL COMMENT '结束时间',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AB测试实验表';
-- 实验变体表
CREATE TABLE IF NOT EXISTS variants (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
experiment_id BIGINT UNSIGNED NOT NULL COMMENT '所属实验ID',
name VARCHAR(128) NOT NULL COMMENT '变体名称 (如 control / treatment)',
description VARCHAR(512) NOT NULL DEFAULT '' COMMENT '变体描述',
weight INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '流量权重',
params JSON NULL COMMENT '变体参数(JSON)',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
KEY idx_experiment_id (experiment_id),
UNIQUE KEY uk_exp_name (experiment_id, name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='实验变体表';
-- 用户分组分配表
CREATE TABLE IF NOT EXISTS user_assignments (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
experiment_id BIGINT UNSIGNED NOT NULL COMMENT '实验ID',
user_id VARCHAR(128) NOT NULL COMMENT '用户标识',
variant_id BIGINT UNSIGNED NOT NULL COMMENT '分配到的变体ID',
assigned_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_exp_user (experiment_id, user_id),
KEY idx_variant_id (variant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户分组分配表';
-- 白名单表(指定用户强制进入某变体)
CREATE TABLE IF NOT EXISTS whitelist (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
experiment_id BIGINT UNSIGNED NOT NULL COMMENT '实验ID',
user_id VARCHAR(128) NOT NULL COMMENT '用户标识',
variant_id BIGINT UNSIGNED NOT NULL COMMENT '强制分配的变体ID',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_exp_user (experiment_id, user_id),
KEY idx_variant_id (variant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='白名单表';
-- 事件追踪表
CREATE TABLE IF NOT EXISTS events (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
experiment_id BIGINT UNSIGNED NOT NULL COMMENT '实验ID',
variant_id BIGINT UNSIGNED NOT NULL COMMENT '变体ID',
user_id VARCHAR(128) NOT NULL COMMENT '用户标识',
event_type VARCHAR(64) NOT NULL COMMENT '事件类型 (如 exposure / conversion)',
event_value DOUBLE NOT NULL DEFAULT 0 COMMENT '事件数值',
metadata JSON NULL COMMENT '附加数据',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_exp_variant (experiment_id, variant_id),
KEY idx_user (user_id),
KEY idx_event_type (event_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='事件追踪表';