数据库部分
数据库设计
本项目采用 MySQL 作为关系型数据库,数据库名称为 nottinghamwall
。数据库的设计旨在满足平台的核心功能需求,包括用户管理、帖子发布、评论、点赞、收藏和举报等功能。以下是数据库的详细结构说明。
数据库表概览
admin
:管理员信息表student
:学生用户信息表topic
:帖子表comment
:评论表like
:帖子点赞表comment_like
:评论点赞表collection
:收藏表report
:举报表
表结构详细说明
1. admin
表(管理员信息表)
描述:存储管理员的基本信息和状态。
字段:
字段名 数据类型 描述 id
int
主键,自增 name
varchar(32)
管理员姓名 username
varchar(32)
登录用户名 password
varchar(64)
登录密码 phone
varchar(11)
手机号码 sex
varchar(2)
性别 id_number
int
身份证号码 status
int
账号状态 create_time
datetime
创建时间 update_time
datetime
更新时间 create_user
int
创建者 ID update_user
int
更新者 ID
2. student
表(学生用户信息表)
描述:存储学生用户的基本信息。
字段:
字段名 数据类型 描述 id
int
主键,自增 openid
varchar(255)
微信 OpenID studentid
int
学号 username
varchar(32)
用户名 email
varchar(45)
邮箱地址 phone
varchar(11)
手机号码 sex
varchar(1)
性别 id_number
varchar(18)
身份证号码 avatar
varchar(500)
头像 URL create_time
datetime
创建时间 update_time
datetime
更新时间
3. topic
表(帖子表)
描述:存储用户发布的帖子信息。
字段:
字段名 数据类型 描述 id
int
主键,自增 content
text
帖子内容 authorID
int
作者(用户)ID createdAt
datetime
创建时间 updatedAt
datetime
更新时间 imgURLs
json
图片 URL 列表 isDraft
int
是否为草稿(0:否,1:是)
4. comment
表(评论表)
描述:存储用户对帖子或评论的评论(支持多级评论)。
字段:
字段名 数据类型 描述 id
int
主键,自增 topic_id
int
所属帖子 ID user_id
int
评论者用户 ID content
text
评论内容 parent_id
int
父评论 ID(可为空) created_at
datetime
创建时间 updated_at
datetime
更新时间 外键约束:
topic_id
引用topic(id)
user_id
引用student(id)
5. like
表(帖子点赞表)
描述:记录用户对帖子的点赞行为。
字段:
字段名 数据类型 描述 id
int
主键,自增 topic_id
int
被点赞的帖子 ID user_id
int
点赞者用户 ID created_at
datetime
点赞时间 外键约束:
topic_id
引用topic(id)
user_id
引用student(id)
唯一索引:
topic_id
和user_id
的组合,防止重复点赞。
6. comment_like
表(评论点赞表)
描述:记录用户对评论的点赞行为。
字段:
字段名 数据类型 描述 comment_id
int
被点赞的评论 ID user_id
int
点赞者用户 ID 主键:联合主键,由
comment_id
和user_id
组成。
7. collection
表(收藏表)
描述:记录用户对帖子的收藏行为。
字段:
字段名 数据类型 描述 id
int
主键,自增 topic_id
int
被收藏的帖子 ID user_id
int
收藏者用户 ID created_at
datetime
收藏时间 外键约束:
topic_id
引用topic(id)
user_id
引用student(id)
唯一索引:
topic_id
和user_id
的组合,防止重复收藏。
8. report
表(举报表)
描述:记录用户对帖子或评论的举报信息。
字段:
字段名 数据类型 描述 id
int
主键,自增 topic_id
int
被举报的帖子 ID comment_id
int
被举报的评论 ID(可为空) author_id
int
被举报内容的作者 ID user_id
int
举报者用户 ID report_time
datetime
举报时间 tags
varchar(255)
举报标签或原因 detailed_description
text
举报详细描述
表间关系
用户与帖子:
- 关系:一对多
- 描述:一个用户可以发布多篇帖子,
topic
表的authorID
字段引用student
表的id
字段。
帖子与评论:
- 关系:一对多
- 描述:一篇帖子可以有多个评论,
comment
表的topic_id
字段引用topic
表的id
字段。
用户与评论:
- 关系:一对多
- 描述:一个用户可以发表多条评论,
comment
表的user_id
字段引用student
表的id
字段。
帖子与点赞:
- 关系:多对多(通过
like
表实现) - 描述:用户可以对帖子进行点赞,
like
表记录用户与帖子之间的点赞关系。
- 关系:多对多(通过
评论与点赞:
- 关系:多对多(通过
comment_like
表实现) - 描述:用户可以对评论进行点赞,
comment_like
表记录用户与评论之间的点赞关系。
- 关系:多对多(通过
用户与收藏:
- 关系:多对多(通过
collection
表实现) - 描述:用户可以收藏帖子,
collection
表记录用户与帖子之间的收藏关系。
- 关系:多对多(通过
举报关系:
- 描述:用户可以对帖子或评论进行举报,
report
表记录举报的详细信息。
- 描述:用户可以对帖子或评论进行举报,
索引与约束
主键(PRIMARY KEY):每个表的主键通常是
id
字段,采用自增策略。外键(FOREIGN KEY):用于保持数据的一致性和完整性,例如:
comment.topic_id
外键引用topic.id
comment.user_id
外键引用student.id
like.topic_id
外键引用topic.id
like.user_id
外键引用student.id
唯一索引(UNIQUE INDEX):
like
表的topic_id
和user_id
组合,防止重复点赞。collection
表的topic_id
和user_id
组合,防止重复收藏。
联合主键:
comment_like
表以comment_id
和user_id
作为联合主键。
数据库特点
引擎:所有表均使用 InnoDB 引擎,支持事务和外键约束。
字符集:使用
utf8mb4
字符集,支持更多字符(如表情符号)。时间字段默认值:
created_at
、create_time
等字段默认值为当前时间。updated_at
字段在记录更新时自动更新为当前时间。
设计考虑
- 数据一致性:通过外键约束,确保引用的数据在源表中存在,避免出现孤立或无效的数据引用。
- 性能优化:通过建立索引(如主键、唯一索引、外键索引)提高查询性能。
- 扩展性:表结构设计灵活,支持后续功能的扩展,如增加新的举报类型或互动方式。
- 安全性:对敏感信息(如用户密码)采用合适的加密和存储方式。
注意事项
- 外键约束的删除和更新规则:当前设置为
ON DELETE RESTRICT ON UPDATE RESTRICT
,表示在删除或更新主表记录时,若有子表引用则会阻止操作。这需要在应用层面处理关联数据的删除和更新。 - 事务处理:在涉及多表操作时,建议使用事务来确保操作的原子性和一致性。
- 数据备份与恢复:定期备份数据库,确保数据的安全和可恢复性。
通过以上设计,数据库能够有效支持平台的各项功能需求,确保数据的完整性和一致性。同时,合理的索引和约束设计也有助于提升数据库的查询性能和维护效率。