前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >嵌套评论的数据库表设计

嵌套评论的数据库表设计

作者头像
全栈程序员站长
发布2022-06-29 19:50:08
8440
发布2022-06-29 19:50:08
举报
文章被收录于专栏:全栈程序员必看

设计嵌套评论数据库表可仿效无限级分类,在表中加一个ParentId字段。嵌套评论页面大致这样:

评论1 回复评论1 恢复评论1 评论2 回复评论2 评论3 ……

但是, 在显示评论的时候,如果使用ParentId会涉及到多表的联结,嵌套层级越多意味着表之间的联结增多,这样会影响查询效率。

于是,我们想到在表中增加一个字段,用来显示所有的层级:/1/2/5/

设计数据库和表:

代码语言:javascript
复制
create database NestedCommnets
代码语言:javascript
复制
use NestedCommnets
代码语言:javascript
复制
Create table UserComments(
代码语言:javascript
复制
    Id int not null identity(1, 1),
代码语言:javascript
复制
    ParentId int not null,
代码语言:javascript
复制
    Content nvarchar(100) not null,
代码语言:javascript
复制
    Depth smallint not null,
代码语言:javascript
复制
    Thread nvarchar(max) not null
代码语言:javascript
复制
)

往数据库表中添加如下数据:

以上,Thread字段以”/”分隔,罗列了所有的父级Id,Depth字段显示的是层级。

查询所有的评论:

select SPACE(u.Depth*6) + u.Content as 评论 from UserComments as u

如果希望结合Thread和Depth字段进行排序:

代码语言:javascript
复制
--STR(nExpression [, nLength [, nDecimalPlaces]])返回与指定表达式对应的字符串
代码语言:javascript
复制
--nLength,返回的字符串长度;nDecimalPlaces,返回字符串的小数位数
代码语言:javascript
复制
select 
代码语言:javascript
复制
SPACE(u.Depth*6) + u.Content as 评论,
代码语言:javascript
复制
u.Thread + LTRIM(STR(u.Depth,100,0)) as 排序 
代码语言:javascript
复制
from UserComments as u
代码语言:javascript
复制
order by u.Thread + LTRIM(STR(u.Depth,100,0))

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/101200.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年6月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档