当前位置: 首页 > news >正文

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

经过前面的介绍,可以发现,其实这是一个非常小的入门级项目,整个功能的实现就是简单的增删改查。增加一条主题,修改一条主题,删除一条主题或评分,查看所有主题或是所有评分。根据需求得出要实现的功能,然后根据大体功能就要想如何设计数据库表。

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

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

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

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

message:

  • title: 代表评分主题

  • author: 主题作者

  • average: 该主题平均分

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

  • 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`

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

相关文章:

  • [asp.net core]project.json(2)
  • Java 8中,Function,Consumer,Predicate,Supplier举例 ,以及CompletableFuture使用
  • dict 没有 key 的情况
  • linux装oracle客户端
  • 聊聊自己的职业规划这个件事
  • 阿里云ECS Centos7 系统安装图形化桌面
  • iOS scrollView 的相关使用
  • 经典Java面试题-内部类
  • Android只需两步,使你的Android Studio支持Lambda表达式
  • 【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等...
  • 移动webapp前端ui用哪个框架好
  • 理解 iOS 的内存管理
  • 绘制动画及动画循环练习
  • Sublime插件支持Sass编译和Babel解析ES6 .sublime-build文件初探
  • SCCM 2016 + SQL 2016 + Win 2012 R2 安装教程
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • CentOS7 安装JDK
  • CSS 专业技巧
  • docker-consul
  • java第三方包学习之lombok
  • mysql常用命令汇总
  • supervisor 永不挂掉的进程 安装以及使用
  • ubuntu 下nginx安装 并支持https协议
  • 番外篇1:在Windows环境下安装JDK
  • 分布式任务队列Celery
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 如何编写一个可升级的智能合约
  • 实现菜单下拉伸展折叠效果demo
  • 微服务核心架构梳理
  • 协程
  • 学习笔记:对象,原型和继承(1)
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #define与typedef区别
  • #每天一道面试题# 什么是MySQL的回表查询
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (04)odoo视图操作
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Python第六天)文件处理
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (六)Hibernate的二级缓存
  • (强烈推荐)移动端音视频从零到上手(下)
  • (转)Linux下编译安装log4cxx
  • (转)我也是一只IT小小鸟
  • ./configure、make、make install 命令
  • .“空心村”成因分析及解决对策122344
  • .Net MVC + EF搭建学生管理系统
  • :=
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [hibernate]基本值类型映射之日期类型