Node项目之评分系统(二)- 数据库设计

通过前面的介绍,能够发现,其实这是一个很是小的入门级项目,整个功能的实现就是简单的增删改查。增长一条主题,修改一条主题,删除一条主题或评分,查看全部主题或是全部评分。根据需求得出要实现的功能,而后根据大致功能就要想如何设计数据库表。mysql

这里我选用的是关系型数据库MySQL,因此在项目动手以前最重要的要设计好数据库表,你们常说:一个项目数据库设计好了,基本上就完成了一大部分的工做。这么说实际上是有些道理的。好的数据表设计会让后续的编程工做更加轻松。sql

该项目的功能简单,因此数据表天然也很简单,这里我只是建立了三个数据表:messagevote以及user,一个保存主题信息,一个保存评分信息,一个保存管理员帐号信息。数据库

数据库SQL语句不熟悉的能够选择一个GUI工具,方便数据库方面的工做,避免因为数据库方面的一些问题阻碍了整个项目的编程工做。这一点很重要,特别对于像我这样的小白来讲,颇有可能因为整个过程当中的一点困难障碍,就阻碍了整个编程工做,甚至是放弃。编程

这个项目我是在Windows平台上进行了,因而选择了一个简单的MySQL GUI工具-MySQL-Front,建立数据库,建立表,新建测试数据等等均可以直接在软件上点点鼠标就能够完成了,大大简化了开发流程。整个数据表的设计也很是简单:数据库设计

message:工具

  • title: 表明评分主题测试

  • author: 主题做者spa

  • average: 该主题平均分设计

  • status: 主题状态,是否容许评分code

  • createTime: 建立时间

  • endTime: 关闭时间(该字段后来没有使用)

vote:

  • titleId: 评分的主题id

  • voteIp: 评分者IP,因为在内网环境,每台电脑对应一个IP地址

  • voteTime: 评分时间

  • voteScore: 分数

user:

这个就很少说了,用户名和密码,在这个项目里只是为了存储管理员帐号使用。

因为项目比较简单以及本人是个数据库小白,因此看出这是个很简单的数据表结构,能知足该项目的需求便可。

  • 新建主题的时候,直接insert into message;

  • 删除主题的时候,delete from message ;

  • 修改主题的时候,update message ;

  • 查找的时候,select * from message
    同理,vote评分表也是这样。

  • 在计算平均分的时候,经过titleId去表vote中查找average(voteScore),而后更新到message表中便可。以下SQL语句:

    select avg(voteScore) average from vote v , message m where v.titleId = m.Id and v.titleId = titleId
  • 在检查重复评分的时候,直接查找titleId以及voteIp是否存在便可。以下SQL语句:

    select count(*) voteNum from vote where titleId= `titleId` and voteIp = `voteIp`
当结果为0的时候,即表示没有评过度。
  • 获取每一个主题的评分数量时,在vote表中查找对应titleId对应的行数便可。SQL语句以下:

    select count(*) voteNum from vote where titleId= `Id`

整个后台的数据库设计大概就这些,并无很复杂的结构。

相关文章
相关标签/搜索