这个怎么做? 2023-05-08 16:18 采纳率: 47.3%
浏览 14

关于Express&&Mysql的问题我想请问一下大家,像数据两大需要分类的数据库设计!

Express&&Mysql的问题
我想请问一下大家,像数据量大时的分类的数据库设计。如:有好几个不同的班级或者好几个不同的系,但他们中存储的都是学生的信息。这种情况,我认为最优解是,给每一个班级都建立一张mysql表,可我只会使用express对数据库进行增删改查,那么建表使用express应该如何操作呢

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-09 08:32
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7727457
    • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:express连接本地mysql查询数据的流程及遇到的问题
    • 除此之外, 这篇博客: mysql 行转列,多行转一行,列转行,一行转多列中的 业务场景,按照上图看的话很难只看同学们的数学成绩或者语文成绩,所以要按照以下格式展示: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
      s_name数学语文英语
      张三908592
      李四889199
      李四1008288

      思路:
      第一步可以将每一行根据学科s_sub分成数学,语文,英语三列 , sql语句:

      case  s_sub  when '数学' then s_score else 0 end 数学
      

      完整sql:

      select s_name,
      case s_sub when '数学' then s_score else 0 end 数学,
      case s_sub when '语文' then s_score else 0 end 语文,
      case s_sub when '英语' then s_score else 0 end 英语
      from student_score
      

      结果:
      在这里插入图片描述
      最后,需要按照s_name为维度group by聚合一下

      select s_name,
      sum(case s_sub when '数学' then s_score else 0 end) 数学,
      sum(case s_sub when '语文' then s_score else 0 end) 语文,
      max(case s_sub when '英语' then s_score else 0 end) 英语
      from student_score group by s_name
      

      最终结果:
      在这里插入图片描述
      如果不是int类型而是 varchar 那么上面是行不通的,因为sum里面不能跟字符串,需要用group_concat()函数替代sum,可先看多行转一行之后再看下方sql

      select s_name,
      GROUP_CONCAT(case s_sub when '数学' then  CAST(s_score AS char) else null end) 数学,
      GROUP_CONCAT(case s_sub when '语文' then  CAST(s_score AS char) else null end) 语文,
      GROUP_CONCAT(case s_sub when '英语' then  CAST(s_score AS char) else null end) 英语
      from student_score group by s_name
      
    • 以下回答来自chatgpt:

      我可以为您提供以下步骤来在Express中建立一个大型学生信息管理系统的MySQL数据库,并对不同班级和系别进行分类设计:

      1. 首先,安装MySQL并在本地服务器上启动MySQL服务。可以按照参考资料中“MySQL安装指南”的步骤进行安装和启动。

      2. 创建一个数据库,可以使用MySQL命令行或MySQL Workbench进行操作。

      CREATE DATABASE students;

      1. 创建各班级和系别所需的表。您可以为每个班级和系别创建一个MySQL表,也可以将他们都创建在同一个表中。以下是一个基本的students表的SQL语句。

      CREATE TABLE students ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, stud_no INT(11) NOT NULL, class VARCHAR(255), major VARCHAR(255), PRIMARY KEY (id), INDEX (stud_no), INDEX (class), INDEX (major) );

      以上SQL语句创建了一个名为students的表,其中包含了以下列:id、name、stud_no、class 和 major。它还创建了一个主键、一个stud_no索引、一个class索引和一个major索引。您可以根据需要添加或删除列和索引,以满足您的特定需求。

      1. 连接Express应用程序与MySQL数据库。可以使用mysql2 node.js模块来连接MySQL数据库,以下是一个连接示例:

      ``` const mysql = require('mysql2');

      const dbConfig = { host: 'localhost', user: 'yourusername', password: 'yourpassword', database: 'students' };

      const connection = mysql.createPool(dbConfig); ```

      请务必将“yourusername”和“yourpassword”替换为您用于连接MySQL的实际用户名和密码。

      1. 将Express应用程序中的路由和控制器与MySQL数据库的表相连接。以下是一个POST请求的示例控制器,它在students表中创建一个新学生记录。

      exports.createStudent = (req, res) => { const { name, stud_no, class, major } = req.body; connection.query( 'INSERT INTO students(name, stud_no, class, major) VALUES(?, ?, ?, ?)', [name, stud_no, class, major], (error, results, fields) => { if (error) throw error; res.send('New student has been created successfully.'); } ); }

      该控制器从请求体中获取学生信息,并使用以下SQL语句将其插入到students表中。

      INSERT INTO students(name, stud_no, class, major) VALUES(?, ?, ?, ?)

      可以根据您的需要更改或扩展该控制器,以实现特定的查询和操作。

      1. 最后,将您的Express应用程序部署到服务器上,以便您可以在浏览器中访问它。

      这些步骤应该能够帮助您在Express中建立一个大型学生信息管理系统的MySQL数据库,并对不同班级和系别进行分类设计。如果您遇到任何问题,可以查看参考资料或通过其他资源获得帮助。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 5月8日

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路