32 lines
1.4 KiB
MySQL
32 lines
1.4 KiB
MySQL
|
|
-- 045_user_follows.sql
|
||
|
|
-- User Follow Relationships (BE-DB-006: Create migration for user_follows table)
|
||
|
|
-- Add table for user follow relationships
|
||
|
|
|
||
|
|
-- === USER FOLLOWS ===
|
||
|
|
-- Table for tracking user-to-user follow relationships
|
||
|
|
CREATE TABLE IF NOT EXISTS public.follows (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
follower_id UUID NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
|
||
|
|
followed_id UUID NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
|
||
|
|
|
||
|
|
-- Timestamps
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
|
|
||
|
|
-- Constraints
|
||
|
|
CONSTRAINT uq_follows_follower_followed UNIQUE (follower_id, followed_id),
|
||
|
|
CONSTRAINT chk_follows_not_self CHECK (follower_id != followed_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_follows_follower_id ON public.follows(follower_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_follows_followed_id ON public.follows(followed_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_follows_created_at_desc ON public.follows(created_at DESC);
|
||
|
|
|
||
|
|
-- Comments
|
||
|
|
COMMENT ON TABLE public.follows IS 'User-to-user follow relationships';
|
||
|
|
COMMENT ON COLUMN public.follows.follower_id IS 'ID of the user who is following';
|
||
|
|
COMMENT ON COLUMN public.follows.followed_id IS 'ID of the user being followed';
|
||
|
|
COMMENT ON CONSTRAINT chk_follows_not_self ON public.follows IS 'Prevents users from following themselves';
|
||
|
|
|