### 1. 平台用户表(t_stack_user)
**作用**:扩展系统用户的社区属性(如个人简介、关注数等),关联系统用户表(`t_sys_user`)
```sql
CREATE TABLE "public"."t_stack_user" (
"id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
"creater" varchar(32) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"updater" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"is_delete" bool DEFAULT false,
"version" int4 DEFAULT 0,
"tenant_id" varchar(32) COLLATE "pg_catalog"."default",
"sys_user_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 关联系统用户表ID
"bio" varchar(500) COLLATE "pg_catalog"."default", -- 个人简介(技术领域、擅长方向等)
"personal_url" varchar(255) COLLATE "pg_catalog"."default", -- 个人主页/博客地址
"follow_count" int4 DEFAULT 0, -- 关注的用户数
"follower_count" int4 DEFAULT 0, -- 粉丝数
"article_count" int4 DEFAULT 0, -- 发布的文章数
"is_verified" bool DEFAULT false, -- 是否认证开发者(如"前端专家")
"verified_info" varchar(100) COLLATE "pg_catalog"."default", -- 认证信息(如"Java高级工程师")
CONSTRAINT "pk_t_stack_user" PRIMARY KEY ("id"),
CONSTRAINT "fk_t_stack_user_sys" FOREIGN KEY ("sys_user_id") REFERENCES "public"."t_sys_user" ("id") ON DELETE RESTRICT
);
COMMENT ON TABLE "public"."t_stack_user" IS '平台用户表(系统用户的社区属性扩展)';
COMMENT ON COLUMN "public"."t_stack_user"."id" IS '唯一标识';
COMMENT ON COLUMN "public"."t_stack_user"."creater" IS '创建人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_user"."create_time" IS '创建时间';
COMMENT ON COLUMN "public"."t_stack_user"."updater" IS '更新人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_user"."update_time" IS '更新时间';
COMMENT ON COLUMN "public"."t_stack_user"."is_delete" IS '是否删除(true-删除,false-正常)';
COMMENT ON COLUMN "public"."t_stack_user"."version" IS '版本号(乐观锁)';
COMMENT ON COLUMN "public"."t_stack_user"."tenant_id" IS '多租户标识(与系统用户一致)';
COMMENT ON COLUMN "public"."t_stack_user"."sys_user_id" IS '关联系统用户表的唯一ID(外键)';
COMMENT ON COLUMN "public"."t_stack_user"."bio" IS '个人简介(技术社区展示用)';
COMMENT ON COLUMN "public"."t_stack_user"."personal_url" IS '个人博客/外部主页链接';
COMMENT ON COLUMN "public"."t_stack_user"."follow_count" IS '关注的用户总数';
COMMENT ON COLUMN "public"."t_stack_user"."follower_count" IS '粉丝总数';
COMMENT ON COLUMN "public"."t_stack_user"."article_count" IS '发布的技术文章总数';
COMMENT ON COLUMN "public"."t_stack_user"."is_verified" IS '是否为认证开发者';
COMMENT ON COLUMN "public"."t_stack_user"."verified_info" IS '认证信息(如"云计算专家")';
-- 索引:通过系统用户ID快速查询平台用户信息
CREATE UNIQUE INDEX "uk_t_stack_user_sys_id" ON "public"."t_stack_user" USING btree ("sys_user_id") WHERE "is_delete" = false;
```
### 2. 技术文章表(t_stack_article)
**作用**:存储用户发布的技术文章核心内容,关联平台用户(作者)
```sql
CREATE TABLE "public"."t_stack_article" (
"id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
"creater" varchar(32) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"updater" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"is_delete" bool DEFAULT false,
"version" int4 DEFAULT 0,
"tenant_id" varchar(32) COLLATE "pg_catalog"."default",
"title" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, -- 文章标题
"content" text COLLATE "pg_catalog"."default" NOT NULL, -- 文章内容(富文本)
"summary" varchar(500) COLLATE "pg_catalog"."default", -- 摘要(列表页展示)
"cover_img" varchar(512) COLLATE "pg_catalog"."default", -- 封面图URL
"author_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 作者(平台用户ID)
"column_id" varchar(32) COLLATE "pg_catalog"."default", -- 所属专栏(可为空)
"status" varchar(20) COLLATE "pg_catalog"."default" NOT NULL, -- 状态:DRAFT(草稿)/PUBLISHED(发布)/OFFLINE(下架)
"view_count" int4 DEFAULT 0, -- 阅读量
"like_count" int4 DEFAULT 0, -- 点赞数
"comment_count" int4 DEFAULT 0, -- 评论数
"collect_count" int4 DEFAULT 0, -- 收藏数
"publish_time" timestamp(6), -- 发布时间(草稿转发布时更新)
CONSTRAINT "pk_t_stack_article" PRIMARY KEY ("id"),
CONSTRAINT "fk_t_stack_article_author" FOREIGN KEY ("author_id") REFERENCES "public"."t_stack_user" ("id") ON DELETE RESTRICT
);
COMMENT ON TABLE "public"."t_stack_article" IS '技术文章表(核心内容载体)';
COMMENT ON COLUMN "public"."t_stack_article"."id" IS '唯一标识';
COMMENT ON COLUMN "public"."t_stack_article"."creater" IS '创建人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_article"."create_time" IS '创建时间';
COMMENT ON COLUMN "public"."t_stack_article"."updater" IS '更新人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_article"."update_time" IS '更新时间';
COMMENT ON COLUMN "public"."t_stack_article"."is_delete" IS '是否删除(true-删除,false-正常)';
COMMENT ON COLUMN "public"."t_stack_article"."version" IS '版本号(乐观锁)';
COMMENT ON COLUMN "public"."t_stack_article"."tenant_id" IS '多租户标识';
COMMENT ON COLUMN "public"."t_stack_article"."title" IS '文章标题';
COMMENT ON COLUMN "public"."t_stack_article"."content" IS '文章内容(支持Markdown/HTML)';
COMMENT ON COLUMN "public"."t_stack_article"."summary" IS '文章摘要(500字以内)';
COMMENT ON COLUMN "public"."t_stack_article"."cover_img" IS '封面图片URL(可选)';
COMMENT ON COLUMN "public"."t_stack_article"."author_id" IS '作者ID(关联平台用户表)';
COMMENT ON COLUMN "public"."t_stack_article"."column_id" IS '所属专栏ID(关联专栏表,可为空)';
COMMENT ON COLUMN "public"."t_stack_article"."status" IS '文章状态';
COMMENT ON COLUMN "public"."t_stack_article"."view_count" IS '累计阅读次数';
COMMENT ON COLUMN "public"."t_stack_article"."like_count" IS '累计点赞次数';
COMMENT ON COLUMN "public"."t_stack_article"."comment_count" IS '累计评论次数';
COMMENT ON COLUMN "public"."t_stack_article"."collect_count" IS '累计收藏次数';
COMMENT ON COLUMN "public"."t_stack_article"."publish_time" IS '首次发布时间';
-- 索引:优化作者文章查询、状态筛选
CREATE INDEX "idx_t_stack_article_author" ON "public"."t_stack_article" USING btree ("author_id", "is_delete");
CREATE INDEX "idx_t_stack_article_status" ON "public"."t_stack_article" USING btree ("status", "is_delete", "publish_time");
```
### 3. 技术专栏表(t_stack_column)
**作用**:聚合同类文章的专栏(如“Java进阶系列”),关联专栏创建者
```sql
CREATE TABLE "public"."t_stack_column" (
"id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
"creater" varchar(32) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"updater" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"is_delete" bool DEFAULT false,
"version" int4 DEFAULT 0,
"tenant_id" varchar(32) COLLATE "pg_catalog"."default",
"name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, -- 专栏名称
"description" varchar(500) COLLATE "pg_catalog"."default", -- 专栏描述
"cover_img" varchar(512) COLLATE "pg_catalog"."default", -- 专栏封面图
"creator_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 创建者(平台用户ID)
"article_count" int4 DEFAULT 0, -- 专栏内文章数量
"status" varchar(20) COLLATE "pg_catalog"."default" NOT NULL, -- 状态:ENABLED(启用)/DISABLED(禁用)
CONSTRAINT "pk_t_stack_column" PRIMARY KEY ("id"),
CONSTRAINT "fk_t_stack_column_creator" FOREIGN KEY ("creator_id") REFERENCES "public"."t_stack_user" ("id") ON DELETE RESTRICT
);
COMMENT ON TABLE "public"."t_stack_column" IS '技术专栏表(文章聚合容器)';
COMMENT ON COLUMN "public"."t_stack_column"."id" IS '唯一标识';
COMMENT ON COLUMN "public"."t_stack_column"."creater" IS '创建人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_column"."create_time" IS '创建时间';
COMMENT ON COLUMN "public"."t_stack_column"."updater" IS '更新人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_column"."update_time" IS '更新时间';
COMMENT ON COLUMN "public"."t_stack_column"."is_delete" IS '是否删除(true-删除,false-正常)';
COMMENT ON COLUMN "public"."t_stack_column"."version" IS '版本号(乐观锁)';
COMMENT ON COLUMN "public"."t_stack_column"."tenant_id" IS '多租户标识';
COMMENT ON COLUMN "public"."t_stack_column"."name" IS '专栏名称(如"SpringCloud实战")';
COMMENT ON COLUMN "public"."t_stack_column"."description" IS '专栏简介(说明专栏主题)';
COMMENT ON COLUMN "public"."t_stack_column"."cover_img" IS '专栏封面图片URL';
COMMENT ON COLUMN "public"."t_stack_column"."creator_id" IS '创建者ID(关联平台用户表)';
COMMENT ON COLUMN "public"."t_stack_column"."article_count" IS '专栏包含的文章总数';
COMMENT ON COLUMN "public"."t_stack_column"."status" IS '专栏状态';
-- 索引:同一用户的专栏名称唯一
CREATE UNIQUE INDEX "uk_t_stack_column_name" ON "public"."t_stack_column" USING btree ("name", "creator_id") WHERE "is_delete" = false;
CREATE INDEX "idx_t_stack_column_creator" ON "public"."t_stack_column" USING btree ("creator_id", "is_delete");
```
### 4. 技术标签表(t_stack_tag)
**作用**:文章分类标签(如“Java”“分布式”),支持内容检索
```sql
CREATE TABLE "public"."t_stack_tag" (
"id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
"creater" varchar(32) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"updater" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"is_delete" bool DEFAULT false,
"version" int4 DEFAULT 0,
"tenant_id" varchar(32) COLLATE "pg_catalog"."default",
"name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, -- 标签名称(如"Python")
"description" varchar(200) COLLATE "pg_catalog"."default", -- 标签描述
"use_count" int4 DEFAULT 0, -- 被文章使用的次数
CONSTRAINT "pk_t_stack_tag" PRIMARY KEY ("id")
);
COMMENT ON TABLE "public"."t_stack_tag" IS '技术标签表(内容分类标识)';
COMMENT ON COLUMN "public"."t_stack_tag"."id" IS '唯一标识';
COMMENT ON COLUMN "public"."t_stack_tag"."creater" IS '创建人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_tag"."create_time" IS '创建时间';
COMMENT ON COLUMN "public"."t_stack_tag"."updater" IS '更新人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_tag"."update_time" IS '更新时间';
COMMENT ON COLUMN "public"."t_stack_tag"."is_delete" IS '是否删除(true-删除,false-正常)';
COMMENT ON COLUMN "public"."t_stack_tag"."version" IS '版本号(乐观锁)';
COMMENT ON COLUMN "public"."t_stack_tag"."tenant_id" IS '多租户标识';
COMMENT ON COLUMN "public"."t_stack_tag"."name" IS '标签名称(唯一)';
COMMENT ON COLUMN "public"."t_stack_tag"."description" IS '标签说明(如"Java编程语言相关内容")';
COMMENT ON COLUMN "public"."t_stack_tag"."use_count" IS '关联的文章总数';
-- 索引:标签名称唯一(同一租户内)
CREATE UNIQUE INDEX "uk_t_stack_tag_name" ON "public"."t_stack_tag" USING btree ("name", "tenant_id") WHERE "is_delete" = false;
```
### 5. 文章标签关联表(t_stack_article_tag)
**作用**:关联文章与标签(多对多关系)
```sql
CREATE TABLE "public"."t_stack_article_tag" (
"id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
"creater" varchar(32) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"updater" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"is_delete" bool DEFAULT false,
"version" int4 DEFAULT 0,
"tenant_id" varchar(32) COLLATE "pg_catalog"."default",
"article_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 文章ID
"tag_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 标签ID
CONSTRAINT "pk_t_stack_article_tag" PRIMARY KEY ("id"),
CONSTRAINT "fk_t_stack_article_tag_article" FOREIGN KEY ("article_id") REFERENCES "public"."t_stack_article" ("id") ON DELETE CASCADE,
CONSTRAINT "fk_t_stack_article_tag_tag" FOREIGN KEY ("tag_id") REFERENCES "public"."t_stack_tag" ("id") ON DELETE RESTRICT
);
COMMENT ON TABLE "public"."t_stack_article_tag" IS '文章标签关联表(多对多映射)';
COMMENT ON COLUMN "public"."t_stack_article_tag"."id" IS '唯一标识';
COMMENT ON COLUMN "public"."t_stack_article_tag"."creater" IS '创建人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_article_tag"."create_time" IS '创建时间';
COMMENT ON COLUMN "public"."t_stack_article_tag"."updater" IS '更新人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_article_tag"."update_time" IS '更新时间';
COMMENT ON COLUMN "public"."t_stack_article_tag"."is_delete" IS '是否删除(true-删除,false-正常)';
COMMENT ON COLUMN "public"."t_stack_article_tag"."version" IS '版本号(乐观锁)';
COMMENT ON COLUMN "public"."t_stack_article_tag"."tenant_id" IS '多租户标识';
COMMENT ON COLUMN "public"."t_stack_article_tag"."article_id" IS '文章ID(关联文章表)';
COMMENT ON COLUMN "public"."t_stack_article_tag"."tag_id" IS '标签ID(关联标签表)';
-- 索引:同一文章不能重复关联同一标签
CREATE UNIQUE INDEX "uk_t_stack_article_tag_relation" ON "public"."t_stack_article_tag" USING btree ("article_id", "tag_id") WHERE "is_delete" = false;
```
### 6. 文章评论表(t_stack_comment)
**作用**:存储用户对文章的评论及回复(支持多级回复)
```sql
CREATE TABLE "public"."t_stack_comment" (
"id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
"creater" varchar(32) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"updater" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"is_delete" bool DEFAULT false,
"version" int4 DEFAULT 0,
"tenant_id" varchar(32) COLLATE "pg_catalog"."default",
"article_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 所属文章ID
"parent_id" varchar(32) COLLATE "pg_catalog"."default", -- 父评论ID(回复时关联,null为一级评论)
"content" varchar(1000) COLLATE "pg_catalog"."default" NOT NULL, -- 评论内容
"commenter_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 评论人(平台用户ID)
"like_count" int4 DEFAULT 0, -- 评论点赞数
CONSTRAINT "pk_t_stack_comment" PRIMARY KEY ("id"),
CONSTRAINT "fk_t_stack_comment_article" FOREIGN KEY ("article_id") REFERENCES "public"."t_stack_article" ("id") ON DELETE CASCADE,
CONSTRAINT "fk_t_stack_comment_user" FOREIGN KEY ("commenter_id") REFERENCES "public"."t_stack_user" ("id") ON DELETE RESTRICT,
CONSTRAINT "fk_t_stack_comment_parent" FOREIGN KEY ("parent_id") REFERENCES "public"."t_stack_comment" ("id") ON DELETE CASCADE
);
COMMENT ON TABLE "public"."t_stack_comment" IS '文章评论表(支持多级回复)';
COMMENT ON COLUMN "public"."t_stack_comment"."id" IS '唯一标识';
COMMENT ON COLUMN "public"."t_stack_comment"."creater" IS '创建人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_comment"."create_time" IS '创建时间';
COMMENT ON COLUMN "public"."t_stack_comment"."updater" IS '更新人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_comment"."update_time" IS '更新时间';
COMMENT ON COLUMN "public"."t_stack_comment"."is_delete" IS '是否删除(true-删除,false-正常)';
COMMENT ON COLUMN "public"."t_stack_comment"."version" IS '版本号(乐观锁)';
COMMENT ON COLUMN "public"."t_stack_comment"."tenant_id" IS '多租户标识';
COMMENT ON COLUMN "public"."t_stack_comment"."article_id" IS '所属文章ID(关联文章表)';
COMMENT ON COLUMN "public"."t_stack_comment"."parent_id" IS '父评论ID(自关联,null为一级评论)';
COMMENT ON COLUMN "public"."t_stack_comment"."content" IS '评论内容(1000字以内)';
COMMENT ON COLUMN "public"."t_stack_comment"."commenter_id" IS '评论人ID(关联平台用户表)';
COMMENT ON COLUMN "public"."t_stack_comment"."like_count" IS '评论被点赞次数';
-- 索引:优化文章评论查询、评论回复查询
CREATE INDEX "idx_t_stack_comment_article" ON "public"."t_stack_comment" USING btree ("article_id", "is_delete", "create_time");
CREATE INDEX "idx_t_stack_comment_parent" ON "public"."t_stack_comment" USING btree ("parent_id", "is_delete");
```
### 7. 点赞记录表(t_stack_like)
**作用**:记录用户对文章/评论的点赞行为(防重复点赞)
```sql
CREATE TABLE "public"."t_stack_like" (
"id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
"creater" varchar(32) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"updater" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"is_delete" bool DEFAULT false,
"version" int4 DEFAULT 0,
"tenant_id" varchar(32) COLLATE "pg_catalog"."default",
"relate_type" varchar(20) COLLATE "pg_catalog"."default" NOT NULL, -- 关联类型:ARTICLE(文章)/COMMENT(评论)
"relate_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 关联ID(文章/评论ID)
"user_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 点赞用户(平台用户ID)
CONSTRAINT "pk_t_stack_like" PRIMARY KEY ("id"),
CONSTRAINT "fk_t_stack_like_user" FOREIGN KEY ("user_id") REFERENCES "public"."t_stack_user" ("id") ON DELETE RESTRICT
);
COMMENT ON TABLE "public"."t_stack_like" IS '点赞记录表(支持文章/评论点赞)';
COMMENT ON COLUMN "public"."t_stack_like"."id" IS '唯一标识';
COMMENT ON COLUMN "public"."t_stack_like"."creater" IS '创建人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_like"."create_time" IS '创建时间';
COMMENT ON COLUMN "public"."t_stack_like"."updater" IS '更新人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_like"."update_time" IS '更新时间';
COMMENT ON COLUMN "public"."t_stack_like"."is_delete" IS '是否取消点赞(true-取消,false-有效)';
COMMENT ON COLUMN "public"."t_stack_like"."version" IS '版本号(乐观锁)';
COMMENT ON COLUMN "public"."t_stack_like"."tenant_id" IS '多租户标识';
COMMENT ON COLUMN "public"."t_stack_like"."relate_type" IS '关联类型(ARTICLE/COMMENT)';
COMMENT ON COLUMN "public"."t_stack_like"."relate_id" IS '关联的文章ID或评论ID';
COMMENT ON COLUMN "public"."t_stack_like"."user_id" IS '点赞用户ID(关联平台用户表)';
-- 索引:同一用户对同一内容只能点赞一次
CREATE UNIQUE INDEX "uk_t_stack_like_unique" ON "public"."t_stack_like" USING btree ("user_id", "relate_type", "relate_id") WHERE "is_delete" = false;
```
### 8. 文章收藏表(t_stack_collection)
**作用**:记录用户收藏文章的行为(防重复收藏)
```sql
CREATE TABLE "public"."t_stack_collection" (
"id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
"creater" varchar(32) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"updater" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"is_delete" bool DEFAULT false,
"version" int4 DEFAULT 0,
"tenant_id" varchar(32) COLLATE "pg_catalog"."default",
"article_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 被收藏文章ID
"user_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 收藏用户(平台用户ID)
"collection_time" timestamp(6) NOT NULL, -- 收藏时间
CONSTRAINT "pk_t_stack_collection" PRIMARY KEY ("id"),
CONSTRAINT "fk_t_stack_collection_article" FOREIGN KEY ("article_id") REFERENCES "public"."t_stack_article" ("id") ON DELETE CASCADE,
CONSTRAINT "fk_t_stack_collection_user" FOREIGN KEY ("user_id") REFERENCES "public"."t_stack_user" ("id") ON DELETE RESTRICT
);
COMMENT ON TABLE "public"."t_stack_collection" IS '文章收藏表';
COMMENT ON COLUMN "public"."t_stack_collection"."id" IS '唯一标识';
COMMENT ON COLUMN "public"."t_stack_collection"."creater" IS '创建人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_collection"."create_time" IS '创建时间';
COMMENT ON COLUMN "public"."t_stack_collection"."updater" IS '更新人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_collection"."update_time" IS '更新时间';
COMMENT ON COLUMN "public"."t_stack_collection"."is_delete" IS '是否取消收藏(true-取消,false-有效)';
COMMENT ON COLUMN "public"."t_stack_collection"."version" IS '版本号(乐观锁)';
COMMENT ON COLUMN "public"."t_stack_collection"."tenant_id" IS '多租户标识';
COMMENT ON COLUMN "public"."t_stack_collection"."article_id" IS '被收藏的文章ID(关联文章表)';
COMMENT ON COLUMN "public"."t_stack_collection"."user_id" IS '收藏用户ID(关联平台用户表)';
COMMENT ON COLUMN "public"."t_stack_collection"."collection_time" IS '收藏的具体时间';
-- 索引:同一用户不能重复收藏同一文章
CREATE UNIQUE INDEX "uk_t_stack_collection_unique" ON "public"."t_stack_collection" USING btree ("user_id", "article_id") WHERE "is_delete" = false;
```
### 9. 用户关注表(t_stack_follow)
**作用**:记录用户之间的关注关系(如A关注B)
```sql
CREATE TABLE "public"."t_stack_follow" (
"id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
"creater" varchar(32) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"updater" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"is_delete" bool DEFAULT false,
"version" int4 DEFAULT 0,
"tenant_id" varchar(32) COLLATE "pg_catalog"."default",
"follower_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 关注者(主动关注的用户)
"followed_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, -- 被关注者(被关注的用户)
"follow_time" timestamp(6) NOT NULL, -- 关注时间
CONSTRAINT "pk_t_stack_follow" PRIMARY KEY ("id"),
CONSTRAINT "fk_t_stack_follow_follower" FOREIGN KEY ("follower_id") REFERENCES "public"."t_stack_user" ("id") ON DELETE RESTRICT,
CONSTRAINT "fk_t_stack_follow_followed" FOREIGN KEY ("followed_id") REFERENCES "public"."t_stack_user" ("id") ON DELETE RESTRICT
);
COMMENT ON TABLE "public"."t_stack_follow" IS '用户关注表(记录关注关系)';
COMMENT ON COLUMN "public"."t_stack_follow"."id" IS '唯一标识';
COMMENT ON COLUMN "public"."t_stack_follow"."creater" IS '创建人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_follow"."create_time" IS '创建时间';
COMMENT ON COLUMN "public"."t_stack_follow"."updater" IS '更新人(系统用户ID)';
COMMENT ON COLUMN "public"."t_stack_follow"."update_time" IS '更新时间';
COMMENT ON COLUMN "public"."t_stack_follow"."is_delete" IS '是否取消关注(true-取消,false-有效)';
COMMENT ON COLUMN "public"."t_stack_follow"."version" IS '版本号(乐观锁)';
COMMENT ON COLUMN "public"."t_stack_follow"."tenant_id" IS '多租户标识';
COMMENT ON COLUMN "public"."t_stack_follow"."follower_id" IS '关注者ID(关联平台用户表)';
COMMENT ON COLUMN "public"."t_stack_follow"."followed_id" IS '被关注者ID(关联平台用户表)';
COMMENT ON COLUMN "public"."t_stack_follow"."follow_time" IS '关注的具体时间';
-- 索引:同一用户不能重复关注同一对象
CREATE UNIQUE INDEX "uk_t_stack_follow_unique" ON "public"."t_stack_follow" USING btree ("follower_id", "followed_id") WHERE "is_delete" = false;
-- 索引:查询用户的关注列表/粉丝列表
CREATE INDEX "idx_t_stack_follow_follower" ON "public"."t_stack_follow" USING btree ("follower_id", "is_delete");
CREATE INDEX "idx_t_stack_follow_followed" ON "public"."t_stack_follow" USING btree ("followed_id", "is_delete");