52 lines
1.6 KiB
PL/PgSQL
52 lines
1.6 KiB
PL/PgSQL
-- Migration 047: Create referral_profiles table
|
|
-- 推荐关系表: 每个用户一条记录,记录推荐码、推荐人、推荐链
|
|
|
|
CREATE TABLE IF NOT EXISTS referral_profiles (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
-- 用户 ID (对应 users.id)
|
|
user_id UUID NOT NULL,
|
|
|
|
-- 此用户的推荐码 (用于邀请他人注册)
|
|
referral_code VARCHAR(20) NOT NULL,
|
|
|
|
-- 推荐人 userId (注册时使用了他人推荐码时才有值)
|
|
referrer_id UUID,
|
|
|
|
-- 注册时填写的推荐码 (即推荐人的推荐码)
|
|
used_code VARCHAR(20),
|
|
|
|
-- 推荐链: 从直接推荐人到顶层的 userId 数组 (PostgreSQL 原生 text[])
|
|
referral_chain TEXT[] NOT NULL DEFAULT '{}',
|
|
|
|
-- 直推下级人数
|
|
direct_referral_count INTEGER NOT NULL DEFAULT 0,
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- 唯一约束
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_referral_profiles_user
|
|
ON referral_profiles(user_id);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_referral_profiles_code
|
|
ON referral_profiles(referral_code);
|
|
|
|
-- 推荐人查询加速
|
|
CREATE INDEX IF NOT EXISTS idx_referral_profiles_referrer
|
|
ON referral_profiles(referrer_id);
|
|
|
|
-- updated_at 自动更新触发器
|
|
CREATE OR REPLACE FUNCTION update_referral_profiles_updated_at()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER trg_referral_profiles_updated_at
|
|
BEFORE UPDATE ON referral_profiles
|
|
FOR EACH ROW EXECUTE FUNCTION update_referral_profiles_updated_at();
|