数据库部分
数据库设计
本项目采用 MySQL 作为关系型数据库,数据库名称为 nottinghamwall。数据库的设计旨在满足平台的核心功能需求,包括用户管理、帖子发布、评论、点赞、收藏和举报等功能。以下是数据库的详细结构说明。
数据库表概览
admin:管理员信息表student:学生用户信息表topic:帖子表comment:评论表like:帖子点赞表comment_like:评论点赞表collection:收藏表report:举报表
表结构详细说明
1. admin 表(管理员信息表)
描述:存储管理员的基本信息和状态。
字段:
字段名 数据类型 描述 idint主键,自增 namevarchar(32)管理员姓名 usernamevarchar(32)登录用户名 passwordvarchar(64)登录密码 phonevarchar(11)手机号码 sexvarchar(2)性别 id_numberint身份证号码 statusint账号状态 create_timedatetime创建时间 update_timedatetime更新时间 create_userint创建者 ID update_userint更新者 ID
2. student 表(学生用户信息表)
描述:存储学生用户的基本信息。
字段:
字段名 数据类型 描述 idint主键,自增 openidvarchar(255)微信 OpenID studentidint学号 usernamevarchar(32)用户名 emailvarchar(45)邮箱地址 phonevarchar(11)手机号码 sexvarchar(1)性别 id_numbervarchar(18)身份证号码 avatarvarchar(500)头像 URL create_timedatetime创建时间 update_timedatetime更新时间
3. topic 表(帖子表)
描述:存储用户发布的帖子信息。
字段:
字段名 数据类型 描述 idint主键,自增 contenttext帖子内容 authorIDint作者(用户)ID createdAtdatetime创建时间 updatedAtdatetime更新时间 imgURLsjson图片 URL 列表 isDraftint是否为草稿(0:否,1:是)
4. comment 表(评论表)
描述:存储用户对帖子或评论的评论(支持多级评论)。
字段:
字段名 数据类型 描述 idint主键,自增 topic_idint所属帖子 ID user_idint评论者用户 ID contenttext评论内容 parent_idint父评论 ID(可为空) created_atdatetime创建时间 updated_atdatetime更新时间 外键约束:
topic_id引用topic(id)user_id引用student(id)
5. like 表(帖子点赞表)
描述:记录用户对帖子的点赞行为。
字段:
字段名 数据类型 描述 idint主键,自增 topic_idint被点赞的帖子 ID user_idint点赞者用户 ID created_atdatetime点赞时间 外键约束:
topic_id引用topic(id)user_id引用student(id)
唯一索引:
topic_id和user_id的组合,防止重复点赞。
6. comment_like 表(评论点赞表)
描述:记录用户对评论的点赞行为。
字段:
字段名 数据类型 描述 comment_idint被点赞的评论 ID user_idint点赞者用户 ID 主键:联合主键,由
comment_id和user_id组成。
7. collection 表(收藏表)
描述:记录用户对帖子的收藏行为。
字段:
字段名 数据类型 描述 idint主键,自增 topic_idint被收藏的帖子 ID user_idint收藏者用户 ID created_atdatetime收藏时间 外键约束:
topic_id引用topic(id)user_id引用student(id)
唯一索引:
topic_id和user_id的组合,防止重复收藏。
8. report 表(举报表)
描述:记录用户对帖子或评论的举报信息。
字段:
字段名 数据类型 描述 idint主键,自增 topic_idint被举报的帖子 ID comment_idint被举报的评论 ID(可为空) author_idint被举报内容的作者 ID user_idint举报者用户 ID report_timedatetime举报时间 tagsvarchar(255)举报标签或原因 detailed_descriptiontext举报详细描述
表间关系
用户与帖子:
- 关系:一对多
- 描述:一个用户可以发布多篇帖子,
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.idcomment.user_id外键引用student.idlike.topic_id外键引用topic.idlike.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,表示在删除或更新主表记录时,若有子表引用则会阻止操作。这需要在应用层面处理关联数据的删除和更新。 - 事务处理:在涉及多表操作时,建议使用事务来确保操作的原子性和一致性。
- 数据备份与恢复:定期备份数据库,确保数据的安全和可恢复性。
通过以上设计,数据库能够有效支持平台的各项功能需求,确保数据的完整性和一致性。同时,合理的索引和约束设计也有助于提升数据库的查询性能和维护效率。