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

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

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: 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数据库,并对不同班级和系别进行分类设计。如果您遇到任何问题,可以查看参考资料或通过其他资源获得帮助。


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