pgsql-32 博客系统实战
目录
32 - 博客系统实战
1. 📖 概述
完整的博客系统数据库设计,包含文章、评论、标签等功能。
2. 🏗️ 数据库设计
-- 用户表
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
bio TEXT,
avatar_url TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 文章表
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
author_id INTEGER REFERENCES users(id),
title VARCHAR(300) NOT NULL,
slug VARCHAR(300) UNIQUE NOT NULL,
content TEXT NOT NULL,
summary TEXT,
cover_image TEXT,
status VARCHAR(20) DEFAULT 'draft',
view_count INTEGER DEFAULT 0,
published_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
search_vector tsvector, -- 全文搜索
CONSTRAINT chk_status CHECK (status IN ('draft', 'published', 'archived'))
);
-- 全文搜索索引
CREATE INDEX idx_posts_search ON posts USING GIN(search_vector);
-- 自动更新搜索向量
CREATE TRIGGER tsvector_update BEFORE INSERT OR UPDATE ON posts
FOR EACH ROW EXECUTE FUNCTION
tsvector_update_trigger(search_vector, 'pg_catalog.english', title, content);
-- 标签表
CREATE TABLE tags (
id SERIAL PRIMARY KEY,
name VARCHAR(50) UNIQUE NOT NULL,
slug VARCHAR(50) UNIQUE NOT NULL
);
-- 文章标签关联
CREATE TABLE post_tags (
post_id INTEGER REFERENCES posts(id) ON DELETE CASCADE,
tag_id INTEGER REFERENCES tags(id) ON DELETE CASCADE,
PRIMARY KEY (post_id, tag_id)
);
-- 评论表(支持嵌套)
CREATE TABLE comments (
id SERIAL PRIMARY KEY,
post_id INTEGER REFERENCES posts(id) ON DELETE CASCADE,
user_id INTEGER REFERENCES users(id),
parent_id INTEGER REFERENCES comments(id),
content TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 点赞表
CREATE TABLE likes (
user_id INTEGER REFERENCES users(id),
post_id INTEGER REFERENCES posts(id),
created_at TIMESTAMPTZ DEFAULT NOW(),
PRIMARY KEY (user_id, post_id)
);
3. 🔍 全文搜索
-- 搜索文章
SELECT
id,
title,
ts_rank(search_vector, query) AS rank
FROM posts, to_tsquery('english', 'postgresql & database') AS query
WHERE search_vector @@ query AND status = 'published'
ORDER BY rank DESC, published_at DESC
LIMIT 10;
4. 📚 下一步
学习实时数据分析系统
关键要点:
- 使用全文搜索提升搜索体验
- 递归CTE查询评论树
- 物化视图优化统计查询
xingliuhua