-- 通知系统主表 + 统计表 -- 创建时间: 2026-06-16 -- 关联: spec §4.1 -- 1. 通知主表 CREATE TABLE IF NOT EXISTS public.notifications ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL, star_id BIGINT NOT NULL, type VARCHAR(20) NOT NULL, -- like / system / activity title VARCHAR(200) NOT NULL, content VARCHAR(500), data JSONB, is_read BOOLEAN NOT NULL DEFAULT FALSE, is_deleted BOOLEAN NOT NULL DEFAULT FALSE, created_at BIGINT NOT NULL, read_at BIGINT ); -- 2. 索引 CREATE INDEX IF NOT EXISTS idx_notifications_user_type_created ON public.notifications (user_id, star_id, type, created_at DESC); CREATE INDEX IF NOT EXISTS idx_notifications_user_unread ON public.notifications (user_id, star_id, is_read, created_at DESC) WHERE is_deleted = FALSE; -- 3. 通知统计表 CREATE TABLE IF NOT EXISTS public.notification_stats ( user_id BIGINT NOT NULL, star_id BIGINT NOT NULL, like_unread_count INT NOT NULL DEFAULT 0, system_unread_count INT NOT NULL DEFAULT 0, activity_unread_count INT NOT NULL DEFAULT 0, total_unread_count INT NOT NULL DEFAULT 0, updated_at BIGINT NOT NULL, PRIMARY KEY (user_id, star_id) ); -- 4. 序列起始值预留 10000(CLAUDE.md 数据库规范) ALTER SEQUENCE notifications_id_seq RESTART WITH 10000;