Skip to content

数据库部分

数据库设计

本项目采用 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_iduser_id 的组合,防止重复点赞。

6. comment_like 表(评论点赞表)

  • 描述:记录用户对评论的点赞行为。

  • 字段

    字段名数据类型描述
    comment_idint被点赞的评论 ID
    user_idint点赞者用户 ID
  • 主键:联合主键,由 comment_iduser_id 组成。

7. collection 表(收藏表)

  • 描述:记录用户对帖子的收藏行为。

  • 字段

    字段名数据类型描述
    idint主键,自增
    topic_idint被收藏的帖子 ID
    user_idint收藏者用户 ID
    created_atdatetime收藏时间
  • 外键约束

    • topic_id 引用 topic(id)
    • user_id 引用 student(id)
  • 唯一索引topic_iduser_id 的组合,防止重复收藏。

8. report 表(举报表)

  • 描述:记录用户对帖子或评论的举报信息。

  • 字段

    字段名数据类型描述
    idint主键,自增
    topic_idint被举报的帖子 ID
    comment_idint被举报的评论 ID(可为空)
    author_idint被举报内容的作者 ID
    user_idint举报者用户 ID
    report_timedatetime举报时间
    tagsvarchar(255)举报标签或原因
    detailed_descriptiontext举报详细描述

表间关系

  1. 用户与帖子

    • 关系:一对多
    • 描述:一个用户可以发布多篇帖子,topic 表的 authorID 字段引用 student 表的 id 字段。
  2. 帖子与评论

    • 关系:一对多
    • 描述:一篇帖子可以有多个评论,comment 表的 topic_id 字段引用 topic 表的 id 字段。
  3. 用户与评论

    • 关系:一对多
    • 描述:一个用户可以发表多条评论,comment 表的 user_id 字段引用 student 表的 id 字段。
  4. 帖子与点赞

    • 关系:多对多(通过 like 表实现)
    • 描述:用户可以对帖子进行点赞,like 表记录用户与帖子之间的点赞关系。
  5. 评论与点赞

    • 关系:多对多(通过 comment_like 表实现)
    • 描述:用户可以对评论进行点赞,comment_like 表记录用户与评论之间的点赞关系。
  6. 用户与收藏

    • 关系:多对多(通过 collection 表实现)
    • 描述:用户可以收藏帖子,collection 表记录用户与帖子之间的收藏关系。
  7. 举报关系

    • 描述:用户可以对帖子或评论进行举报,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_iduser_id 组合,防止重复点赞。
    • collection 表的 topic_iduser_id 组合,防止重复收藏。
  • 联合主键

    • comment_like 表以 comment_iduser_id 作为联合主键。

数据库特点

  • 引擎:所有表均使用 InnoDB 引擎,支持事务和外键约束。

  • 字符集:使用 utf8mb4 字符集,支持更多字符(如表情符号)。

  • 时间字段默认值

    • created_atcreate_time 等字段默认值为当前时间。
    • updated_at 字段在记录更新时自动更新为当前时间。

设计考虑

  • 数据一致性:通过外键约束,确保引用的数据在源表中存在,避免出现孤立或无效的数据引用。
  • 性能优化:通过建立索引(如主键、唯一索引、外键索引)提高查询性能。
  • 扩展性:表结构设计灵活,支持后续功能的扩展,如增加新的举报类型或互动方式。
  • 安全性:对敏感信息(如用户密码)采用合适的加密和存储方式。

注意事项

  • 外键约束的删除和更新规则:当前设置为 ON DELETE RESTRICT ON UPDATE RESTRICT,表示在删除或更新主表记录时,若有子表引用则会阻止操作。这需要在应用层面处理关联数据的删除和更新。
  • 事务处理:在涉及多表操作时,建议使用事务来确保操作的原子性和一致性。
  • 数据备份与恢复:定期备份数据库,确保数据的安全和可恢复性。

通过以上设计,数据库能够有效支持平台的各项功能需求,确保数据的完整性和一致性。同时,合理的索引和约束设计也有助于提升数据库的查询性能和维护效率。

MIT Licensed