跳到主要内容

多人评论,互动回复—数据库设计方案

· 阅读需 5 分钟
阿狸先森
全栈开发

Sql 设计

方案一《设计多个关联表》

  1. 创建用户表
    • 创建一个名为“users”的表,其中包含以下字段:id(用户的唯一标识符)、name(用户的用户名)、email(用户的电子邮件地址)和created_at(用户的创建时间)。
  2. 创建评论表
    • 创建一个名为“comments”的表,其中包含以下字段:id(评论的唯一标识符)、content(评论的内容)、created_at(评论的创建时间)和updated_at(评论的更新时间)。
  3. 创建评论用户关联表
    • 创建一个名为“comment_user”的表,其中包含以下字段:id(关联的唯一标识符)、comment_id(评论的ID)、user_id(用户的ID)和created_at(关联的创建时间)。
  4. 创建回复表
    • 创建一个名为“replies”的表,其中包含以下字段:id(回复的唯一标识符)、content(回复的内容)、created_at(回复的创建时间)和updated_at(回复的更新时间)。
  5. 创建回复用户关联表
    • 创建一个名为“reply_user”的表,其中包含以下字段:id(关联的唯一标识符)、reply_id(回复的ID)、user_id(用户的ID)和created_at(关联的创建时间)。
  6. 创建评论回复关联表
    • 创建一个名为“comment_reply”的表,其中包含以下字段:id(关联的唯一标识符)、comment_id(评论的ID)、reply_id(回复的ID)和created_at(关联的创建时间)。

在以上表结构中,每个评论和回复都是一个独立的记录,每个记录都可以与一个或多个用户关联。通过评论回复关联表,每个评论可以与多个回复进行关联,每个回复可以与一个评论进行关联。这样,您就可以设计出一个支持多人评论和互动回复的数据库结构。

需要注意的是,此数据库结构可能只是一个基本结构,可以根据自己的实际需求来添加其他字段,如文章ID、点赞数、举报数等。

--创建用户表:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at DATETIME
);

--创建评论表:
CREATE TABLE comments (
id INT PRIMARY KEY,
content TEXT,
created_at DATETIME,
updated_at DATETIME
);

--创建评论用户关联表:
CREATE TABLE comment_user (
id INT PRIMARY KEY,
comment_id INT NOT NULL,
user_id INT NOT NULL,
created_at DATETIME,
FOREIGN KEY (comment_id) REFERENCES comments(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);

--创建回复表:
CREATE TABLE replies (
id INT PRIMARY KEY,
content TEXT,
created_at DATETIME,
updated_at DATETIME
);

--创建回复用户关联表:
CREATE TABLE reply_user (
id INT PRIMARY KEY,
reply_id INT NOT NULL,
user_id INT NOT NULL,
created_at DATETIME,
FOREIGN KEY (reply_id) REFERENCES replies(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);

--创建评论回复关联表:
CREATE TABLE comment_reply (
id INT PRIMARY KEY,
comment_id INT NOT NULL,
reply_id INT NOT NULL,
created_at DATETIME,
FOREIGN KEY (comment_id) REFERENCES comments(id),
FOREIGN KEY (reply_id) REFERENCES replies(id)
);

方案二 《无限极》

  1. 创建评论表
    • 创建一个名为“comments”的表,其中包含以下字段:id(评论的唯一标识符)、content(评论的内容)、created_at(评论的创建时间)和updated_at(评论的更新时间)、parent_id(父评论的ID,如果是顶级评论,则为NULL)。
  2. 创建用户表
    • 创建一个名为“users”的表,其中包含以下字段:id(用户的唯一标识符)、name(用户的用户名)、email(用户的电子邮件地址)和created_at(用户的创建时间)。
  3. 创建评论用户关联表
    • 创建一个名为“comment_user”的表,其中包含以下字段:id(关联的唯一标识符)、comment_id(评论的ID)、user_id(用户的ID)和created_at(关联的创建时间)。
  4. 创建评论回复表
    • 创建一个名为“replies”的表,其中包含以下字段:id(回复的唯一标识符)、content(回复的内容)、created_at(回复的创建时间)和updated_at(回复的更新时间)、parent_id(父回复的ID,如果是顶级回复,则为NULL)、comment_id(评论的ID)。
  5. 创建回复用户关联表
    • 创建一个名为“reply_user”的表,其中包含以下字段:id(关联的唯一标识符)、reply_id(回复的ID)、user_id(用户的ID)和created_at(关联的创建时间)。
  6. 创建回复回复表
    • 创建一个名为“reply_reply”的表,其中包含以下字段:id(关联的唯一标识符)、reply_id(回复的ID)、parent_id(父回复的ID)、comment_id(评论的ID)和created_at(关联的创建时间)。

在以上表结构中,每个评论和回复都是一个独立的记录,并且可以与一个或多个用户关联。通过在评论表和回复表中添加parent_id字段,可以实现无限极评论和回复的功能。每个回复可以与一个或多个回复进行关联,通过在回复回复表中添加parent_id字段,可以实现无限极回复的功能。

-- 创建用户表
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);

-- 创建评论表
CREATE TABLE comments (
id INT NOT NULL AUTO_INCREMENT,
content TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
parent_id INT,
PRIMARY KEY (id),
FOREIGN KEY (parent_id) REFERENCES comments(id),
);

-- 创建评论用户关联表
CREATE TABLE comment_user (
id INT NOT NULL AUTO_INCREMENT,
comment_id INT NOT NULL,
user_id INT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (comment_id) REFERENCES comments(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);

-- 创建回复表
CREATE TABLE replies (
id INT NOT NULL AUTO_INCREMENT,
content TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
parent_id INT,
comment_id INT NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (parent_id) REFERENCES replies(id),
FOREIGN KEY (comment_id) REFERENCES comments(id)
);

-- 创建回复用户关联表
CREATE TABLE reply_user (
id INT NOT NULL AUTO_INCREMENT,
reply_id INT NOT NULL,
user_id INT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (reply_id) REFERENCES replies(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);

-- 创建回复回复表
CREATE TABLE reply_reply (
id INT NOT NULL AUTO_INCREMENT,
reply_id INT NOT NULL,
parent_id INT NOT NULL,
comment_id INT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (reply_id) REFERENCES replies(id),
FOREIGN KEY (parent_id) REFERENCES replies(id),
FOREIGN KEY (comment_id) REFERENCES comments(id)
);