软件中级实训-软工集市数据库设计

软件中级实训数据库设计

2023.5.3

论坛系统ER图

实体

帖子 post

  • 帖子ID(主键)postID int
  • 用户ID(用户的外键) userID int
  • 所属主题 subject varchar(10)
  • 标题 title varchar(20)
  • 正文内容 ptext varchar(5000)
  • 评论数量 comment_num int
  • 点赞数量 like_num int
  • 发帖时间 post_time datetime
  • 热度 heat double

帖子评论 pcomment

  • 帖子评论ID(主键) pcommentID int 主键
  • 用户ID(用户的外键)userID int
  • 评论目标ID(帖子的外键)ptargetID int
  • 点赞数量 like_num int
  • 评论内容 pctext varchar(1000)
  • 评论时间 time datetime

评论的评论 ccomment

  • 评论ID(主键) ccommentID int
  • 用户ID(用户的外键)userID int
  • 评论目标ID(评论的外键)ctargetID int
  • 点赞数量 like_num bigint
  • 评论内容 cctext varchar(100)
  • 评论时间 time datetime

帖子点赞 plike

  • 点赞ID plikeID bigint
  • 点赞人ID(用户的外键)userID int
  • 点赞目标ID(帖子的外键)ptargetID int

帖子的评论点赞 pclike

  • 点赞ID pclikeID int
  • 点赞人ID(用户的外键)userID int
  • 点赞目标ID(帖子的外键、评论的外键)pctargetID int

评论的评论点赞 cclike

  • 点赞ID cclikeID int
  • 点赞人ID(用户的外键)userID int
  • 点赞目标ID(帖子的外键、评论的外键)cctargetID int

用户 user

  • 用户ID userID int
  • 手机号 phone char(15)
  • 邮箱号 email varchar(255)
  • 密码 key varchar(20)
  • 用户名称(昵称) name varchar(50)
  • 学号/工号 num int
  • 头像 profile varchar(50)
  • 简介 intro varchar(255)
  • 是否通过身份验证 idpass boolean /tinyint(1)
  • 是否被封禁 ban boolean/tinyint(1)

管理员 admin

  • 账号 account varchar(100)
  • 密码 key varchar(100)

举报 sue

  • 举报ID sueID int

  • 举报目标类型 targettype enum

    • 帖子
    • 帖子的评论
    • 评论的评论
  • 举报目标ID ptargetID int

  • 用户ID(举报人ID,用户的外键)userID int

  • 举报原因 reason varchar(1000)

  • 举报时间 sue_time datetime

  • 举报处理情况 status varchar(20)/enum

    • ok 已处理
    • nosin 经检查无违规
    • wait 受理中
  • 是否处理 finish boolean tinyint(1)

对于举报,感觉没必要分成多张表,因为举报的数据量会比较少,搞成一张表对性能影响不明显,而且举报对于日常使用影响不大,所以不设外键也是可以的。

反馈 feedback

  • 反馈ID feedbackID int
  • 用户ID(用户的外键)userID int
  • 反馈内容 ftext varchar(1000)
  • 反馈时间 time timestamp
  • 反馈处理情况 status enum
    • wait 受理中
    • ok 已处理

通知 notice

  • 通知ID noticeID int
  • 接受者ID(用户的外键)receiver int
  • 发送者ID(用户的外键)sender int
  • 通知类型 type enum
    • 帖子被评论 pcomment
    • 评论被评论 ccomment
    • 被惩罚 punish
  • 通知内容 ntext varchar(100)
  • 是否已读 read tinyint(1)

notice有没有必要分成多张表?(数量比较多)

外键的设置:CASCADE:主表删除或修改记录时,从表也会对关联记录的外键字段进行修改。

RESTRICT:删除或修改主表记录,子表中若有关联记录,则不允许主表删除或修改。

SET NULL:主表删除或修改主表记录时,从表会将关联记录的外键字段设为null。

ON UPDATE CASCADE:主表修改记录时,从表关联记录的外键字段也会修改。(将CASCADE改为RESTRICT,意思相反)

ON DELETE CASCADE:主表删除记录时,从表关联记录的外键字段也会删除。(将CASCADE改为RESTRICT,意思相反)

在该数据库外键的设置,均采用CASCADE


软件中级实训-软工集市数据库设计
http://thinkerhui.site/2023/05/07/软工集市/软件中级实训-软工集市数据库设计/
作者
thinkerhui
发布于
2023年5月7日
许可协议