CREATE TABLE subscriptions (
                               id SERIAL PRIMARY KEY,
                               follower_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,  -- Кто подписывается
                               following_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, -- На кого подписываются
                               created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
                               UNIQUE(follower_id, following_id),  -- Уникальная подписка
                               CHECK (follower_id <> following_id)  -- Запрет подписки на самого себя
);

-- Уведомления о подписках
CREATE TABLE subscription_notifications (
                                            id SERIAL PRIMARY KEY,
                                            subscription_id INTEGER NOT NULL REFERENCES subscriptions(id) ON DELETE CASCADE,
                                            is_read BOOLEAN NOT NULL DEFAULT FALSE,
                                            created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);

-- Индексы для улучшения производительности
CREATE INDEX idx_subscriptions_follower_id ON subscriptions(follower_id);
CREATE INDEX idx_subscriptions_following_id ON subscriptions(following_id);
CREATE INDEX idx_subscription_notifications_subscription_id ON subscription_notifications(subscription_id);