42 lines
1.4 KiB
SQL
42 lines
1.4 KiB
SQL
-- 通知系统主表 + 统计表
|
||
-- 创建时间: 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;
|