topfans/backend/scripts/migrations/migrate_create_activity_contributions_table.sql
2026-05-20 17:05:02 +08:00

40 lines
2.1 KiB
SQL

-- Migration: Create activity_contributions table
-- Description: 用户活动贡献记录表,用于实时显示最新贡献
-- 1. 创建 activity_contributions 表
CREATE TABLE IF NOT EXISTS activity_contributions (
id BIGSERIAL PRIMARY KEY,
activity_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
star_id BIGINT NOT NULL,
item_id BIGINT NOT NULL,
item_type VARCHAR(50) NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1,
crystal_spent BIGINT NOT NULL,
contribution_points BIGINT NOT NULL,
created_at BIGINT NOT NULL
);
-- 2. 创建索引
CREATE INDEX IF NOT EXISTS idx_activity_contributions_activity ON activity_contributions(activity_id);
CREATE INDEX IF NOT EXISTS idx_activity_contributions_user_star ON activity_contributions(user_id, star_id);
CREATE INDEX IF NOT EXISTS idx_activity_contributions_created ON activity_contributions(created_at DESC);
-- 3. 添加外键约束
ALTER TABLE activity_contributions
ADD CONSTRAINT fk_activity_contributions_activity FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE,
ADD CONSTRAINT fk_activity_contributions_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
ADD CONSTRAINT fk_activity_contributions_item FOREIGN KEY (item_id) REFERENCES activity_items(id) ON DELETE CASCADE,
ADD CONSTRAINT fk_activity_contributions_star FOREIGN KEY (star_id) REFERENCES stars(star_id) ON DELETE CASCADE;
-- 4. 添加注释
COMMENT ON TABLE activity_contributions IS '用户活动贡献记录表';
COMMENT ON COLUMN activity_contributions.activity_id IS '活动ID';
COMMENT ON COLUMN activity_contributions.user_id IS '用户ID';
COMMENT ON COLUMN activity_contributions.star_id IS '粉丝身份ID';
COMMENT ON COLUMN activity_contributions.item_id IS '道具ID';
COMMENT ON COLUMN activity_contributions.item_type IS '道具类型';
COMMENT ON COLUMN activity_contributions.quantity IS '购买数量';
COMMENT ON COLUMN activity_contributions.crystal_spent IS '消耗水晶数';
COMMENT ON COLUMN activity_contributions.contribution_points IS '贡献点数';
COMMENT ON COLUMN activity_contributions.created_at IS '创建时间(毫秒时间戳)';