-- 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();