68 lines
3.6 KiB
SQL
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='事件追踪表';
|