社团成员信息系统

ER实体关系图与数据库模型

DDL

CREATE TABLE `club` (
  `club_id` int(11) NOT NULL AUTO_INCREMENT,
  `club_name` varchar(100) NOT NULL,
  `president_name` varchar(50) DEFAULT NULL,
  `foundation_date` date DEFAULT NULL,
  `description` text,
  PRIMARY KEY (`club_id`),
  KEY `president_name` (`president_name`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;

CREATE TABLE `course` (
  `course_id` int(11) NOT NULL AUTO_INCREMENT,
  `course_name` varchar(100) NOT NULL,
  `room_number` int(11) NOT NULL,
  `teacher_name` varchar(50) DEFAULT NULL,
  `credit_hours` int(11) NOT NULL,
  `description` text,
  PRIMARY KEY (`course_id`),
  KEY `room_number` (`room_number`),
  CONSTRAINT `course_ibfk_1` FOREIGN KEY (`room_number`) REFERENCES `room` (`room_number`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

CREATE TABLE `date_student` (
  `student_id` int(11) NOT NULL,
  `in_date` date NOT NULL,
  `out_date` date DEFAULT NULL,
  KEY `student_id` (`student_id`),
  CONSTRAINT `date_student_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `grade` (
  `grade_id` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) NOT NULL,
  `course_id` int(11) NOT NULL,
  `score` decimal(5,2) DEFAULT NULL,
  PRIMARY KEY (`grade_id`),
  KEY `course_id` (`course_id`),
  KEY `student_id` (`student_id`),
  CONSTRAINT `grade_ibfk_1` FOREIGN KEY (`course_id`) REFERENCES `course` (`course_id`),
  CONSTRAINT `grade_ibfk_2` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

CREATE TABLE `room` (
  `room_id` int(11) NOT NULL AUTO_INCREMENT,
  `room_number` int(11) NOT NULL,
  `capacity` int(11) NOT NULL,
  `building` varchar(50) DEFAULT NULL,
  `floor` int(11) DEFAULT NULL,
  PRIMARY KEY (`room_id`),
  KEY `room_number` (`room_number`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

CREATE TABLE `student` (
  `student_id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `gender` enum('Male','Female','Other') DEFAULT NULL,
  `address` varchar(100) DEFAULT NULL,
  `club_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`student_id`),
  KEY `name` (`name`),
  KEY `student_id` (`student_id`),
  KEY `club_id` (`club_id`),
  CONSTRAINT `student_ibfk_1` FOREIGN KEY (`club_id`) REFERENCES `club` (`club_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DML

INSERT INTO `club` VALUES ('1', '编程俱乐部', 'Alice', '2022-09-01', '学习编程和算法');
INSERT INTO `club` VALUES ('2', '摄影爱好者', 'Bob', '2021-10-15', '交流摄影技巧和作品');
INSERT INTO `club` VALUES ('3', '数学研究会', 'Charlie', '2023-01-01', '深入探索数学之美');
INSERT INTO `club` VALUES ('4', '环境保护协会', 'Diana', '2022-05-20', '倡导环保意识和行动');
INSERT INTO `club` VALUES ('5', '音乐社', 'Eve', '2021-03-10', '分享音乐,组织演出');

INSERT INTO `course` VALUES ('1', 'Math ', '101', 'Prof. Smith', '3', 'Intro to Calculus');
INSERT INTO `course` VALUES ('2', 'English ', '202', 'Prof. Johnson', '4', 'Advanced Composition');
INSERT INTO `course` VALUES ('3', 'History ', '303', 'Prof. Davis', '3', 'World History');
INSERT INTO `course` VALUES ('4', 'Science ', '404', 'Prof. Anderson', '4', 'Biology for Non-Majors');
INSERT INTO `course` VALUES ('5', 'Art ', '505', 'Prof. Thompson', '2', 'Art Appreciation');

INSERT INTO `date_student` VALUES ('1', '2023-09-01', '2024-06-26');
INSERT INTO `date_student` VALUES ('2', '2023-08-15', '2024-06-20');
INSERT INTO `date_student` VALUES ('3', '2023-09-10', '2024-06-09');
INSERT INTO `date_student` VALUES ('4', '2023-08-20', '2024-06-13');
INSERT INTO `date_student` VALUES ('5', '2023-09-05', '2024-06-03');

INSERT INTO `grade` VALUES ('1', '1', '1', '90.50');
INSERT INTO `grade` VALUES ('2', '2', '2', '85.75');
INSERT INTO `grade` VALUES ('3', '3', '3', '92.00');
INSERT INTO `grade` VALUES ('4', '4', '1', '88.25');
INSERT INTO `grade` VALUES ('5', '5', '4', '95.00');

INSERT INTO `room` VALUES ('1', '101', '30', 'Building A', '1');
INSERT INTO `room` VALUES ('2', '202', '40', 'Building B', '2');
INSERT INTO `room` VALUES ('3', '303', '25', 'Building C', '1');
INSERT INTO `room` VALUES ('4', '404', '35', 'Building A', '3');
INSERT INTO `room` VALUES ('5', '505', '50', 'Building B', '2');

INSERT INTO `student` VALUES ('1', '1', 'Alice', '20', 'Female', '123 Main St', null);
INSERT INTO `student` VALUES ('2', '2', 'Bob', '21', 'Male', '456 Elm St', null);
INSERT INTO `student` VALUES ('3', '3', 'Charlie', '19', 'Male', '789 Oak St', null);
INSERT INTO `student` VALUES ('4', '4', 'Diana', '20', 'Female', '321 Pine St', null);
INSERT INTO `student` VALUES ('5', '5', 'Eve', '22', 'Female', '654 Maple St', null);

简单查询

-- 简单查询1(查询所有同学的性别)
SELECT `name`,gender FROM student;

-- 简单查询2(查询所有同学总成绩并且按照降序排序)
SELECT student_id,sum(score) sums FROM grade GROUP BY student_id ORDER BY sums DESC;

-- 简单查询3(查询所有在2楼的教室)
SELECT room_number, `floor` FROM room WHERE floor=2;

复杂查询

复杂查询1(查询每个学生对应科目的成绩)
SELECT s.name,g.course_id,g.score FROM student s JOIN grade g ON s.student_id=g.student_id;

-- 复杂查询2(查询所有同学总成绩并且按照降序排序,并显示同学名称)
SELECT s.name,t.student_id,t.sums FROM student s JOIN (SELECT student_id,sum(score) sums FROM grade
 GROUP BY student_id ORDER BY sums DESC) tON t.student_id=s.student_id ORDER BY sums DESC;

-- 简单查询3(查询所有在2楼的教室)
SELECT room_number, `floor` FROM room WHERE floor=2;

触发器

插入触发器

-- 插入触发器 (club 表)
-- 当向 club 表插入数据时,更新 student 表中的相关记录。
DROP TRIGGER IF EXISTS `trg_insert_club`;
DELIMITER //
CREATE TRIGGER `trg_insert_club` AFTER INSERT ON `club` FOR EACH ROW BEGIN
    UPDATE `student`
    SET `club_id` = NEW.club_id
    WHERE `name` = NEW.president_name;
END
//
DELIMITER ;

测试语句

-- 插入一个新的俱乐部记录
INSERT INTO `student`(student_id,name) VALUES (14,'zxc');
INSERT INTO `club` VALUES (15, '舞蹈社', 'zxc', '2023-02-14', '学习各种舞蹈');


-- 检查学生表中是否更新了 Frank 的 club_id
SELECT * FROM `student` WHERE `name` = 'zxc';

更新触发器

-- 更新触发器 (course 表)
-- 当更新 course 表中的 room_number 时,更新 room 表中的相关记录。
DELIMITER //
CREATE TRIGGER `trg_update_course`
AFTER UPDATE ON `course`
FOR EACH ROW
BEGIN    
      UPDATE `room`   
      SET `room_number` = NEW.room_number    
      WHERE `room_number` = 
OLD.room_number;
END //
DELIMITER ;

测试语句

-- 测试语句:
-- 测试更新触发器
-- 更新课程表中的一条记录
UPDATE `course`SET `room_number` = '303’
WHERE `course_id` = '1’;
-- 检查房间表中是否更新了相应的 room_number
SELECT * FROM `room` 
WHERE `room_number` = '303';

删除触发器

-- 删除触发器 (student 表)
-- 当删除 student 表中的记录时,删除 date_student 表中的相关记录。
DELIMITER //
CREATE TRIGGER `trg_delete_student`
BEFORE DELETE ON `student`
FOR EACH ROW
BEGIN 
    DELETE FROM `date_student`    
    WHERE `student_id` = OLD.student_id;
END //
DELIMITER;

测试语句

-- 删除学生表中的一条记录
UPDATE `student`
SET `club_id` = NULL
WHERE `student_id` = 1;
DELETE  FROM `grade`
WHERE `student_id` = '1';

DELETE  FROM `student`
WHERE `student_id` = '1';

-- 检查 date_student 表中是否删除了相应的记录
SELECT * FROM `date_student` WHERE `student_id` = '1';

存储过程

存储过程 (update_student_club)

-- 更新学生的俱乐部信息,涉及 student 和 club 表。

DELIMITER //

CREATE PROCEDURE `update_student_club`(
    IN p_student_id INT,
    IN p_club_id INT,
    IN p_student_name VARCHAR(255)
)
BEGIN
    UPDATE `student`
    SET `club_id` = p_club_id
    WHERE `student_id` = p_student_id;

    UPDATE `club`
    SET `president_name` = p_student_name
    WHERE `club_id` = p_club_id;
END //

DELIMITER ;

测试语句

-- 测试存储过程
-- 假设 student 表有以下数据
INSERT INTO `student` 
(`student_id`, `name`, `club_id`)
 VALUES (7, '张三', NULL);
-- 假设 club 表有以下数据
INSERT INTO `club` 
(`club_id`, `club_name`, `president_name`)
 VALUES (7, '篮球俱乐部', NULL);
-- 调用存储过程
CALL `update_student_club`(7,7, '张三’);
-- 检查更新后的结果
SELECT * FROM `student` 
WHERE `student_id` = 7;
SELECT * FROM `club` 
WHERE `club_id` = 7;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/754990.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DP(动态规划)【2】 最大连续子列和 最长不降子序列

1.最大连续子列和 #include <iostream> #include <vector> #include <cmath> #include <string> #include <cstring> #include <queue> using namespace std; const int N10002,maxn10;int n,m,k,f[N]{0},dp[N]{0};int main() {scanf(&quo…

1.SQL注入-数字型

SQL注入-数字型(post) 查询1的时候发现url后面的链接没有传入1的参数。验证为post请求方式&#xff0c;仅显示用户和邮箱 通过图中的显示的字段&#xff0c;我们可以猜测传入数据库里面的语句&#xff0c;例如&#xff1a; select 字段1,字段2 from 表名 where id1; 编辑一个…

【漏洞复现】宏景HCM人力资源信息管理系统——任意文件读取漏洞

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 宏景HCM人力资源信息管理系统是一款全面覆盖人力资源管理各模块…

GPT-4o首次引入!全新图像自动评估基准发布!

目录 01 什么是DreamBench&#xff1f; 02 与人类对齐的自动化评估 03 更全面的个性化数据集 04 实验结果 面对层出不穷的个性化图像生成技术&#xff0c;一个新问题摆在眼前&#xff1a;缺乏统一标准来衡量这些生成的图片是否符合人们的喜好。 对此&#xff0c;来自清华大…

心理辅导平台系统

摘 要 中文本论文基于Java Web技术设计与实现了一个心理辅导平台。通过对国内外心理辅导平台发展现状的调研&#xff0c;本文分析了心理辅导平台的背景与意义&#xff0c;并提出了论文研究内容与创新点。在相关技术介绍部分&#xff0c;对Java Web、SpringBoot、B/S架构、MVC模…

lvs+上一章的内容

书接上回这次加了个keepalived 一、集群与分布式 1.1 集群介绍 **集群&#xff08;Cluster&#xff09;**是将多台计算机组合成一个系统&#xff0c;以解决特定问题的计算机集合。集群系统可以分为以下三种类型&#xff1a; **LB&#xff08;Load Balancing&#xff0c;负载…

Golang | Leetcode Golang题解之第203题移除链表元素

题目&#xff1a; 题解&#xff1a; func removeElements(head *ListNode, val int) *ListNode {dummyHead : &ListNode{Next: head}for tmp : dummyHead; tmp.Next ! nil; {if tmp.Next.Val val {tmp.Next tmp.Next.Next} else {tmp tmp.Next}}return dummyHead.Next …

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 数字排列游戏(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

【论文复现】——基于LM优化的NDT点云配准算法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 1、论文概述 传统的正态分布变换配准算法处理初始位姿变换相…

修改网络的结构用于预训练

目录 一、模型准备 二、修改结构 1、在网络中添加一层 2、在classifier结点添加一个线性层 3、修改网络中的某一层(features 结点举例&#xff09; 4、替换网络中的某一层结构&#xff08;与第3点类似&#xff09; 5、提取全连接层的输入特征数和输出特征数 6、删除网络…

springboot + Vue前后端项目(第二十一记)

项目实战第二十一记 写在前面1. springboot文件默认传输限制2. 安装视频插件包命令3. 前台Video.vue4. 创建视频播放组件videoDetail.vue5. 路由6. 效果图总结写在最后 写在前面 本篇主要讲解系统集成视频播放插件 1. springboot文件默认传输限制 在application.yml文件中添…

《昇思25天学习打卡营第2天|快速入门》

文章目录 前言&#xff1a;今日所学&#xff1a;1. 数据集处理2. 网络的构建3. 模型训练4. 保存模型5. 加载模型 总体代码与运行结果&#xff1a;1. 总体代码2. 运行结果 前言&#xff1a; 今天是学习打卡的第2天&#xff0c;今天的内容是对MindSpore的一个快速入门&#xff0…

Selenium IDE 的使用指南

Selenium IDE 的使用指南 在自动化测试的领域中&#xff0c;Selenium 是一个广为人知且强大的工具集。而 Selenium IDE 作为其中的一个组件&#xff0c;为测试人员提供了一种便捷且直观的方式来创建和执行自动化测试脚本。 一、Selenium IDE 简介 Selenium IDE 是一个用于录…

第十三章 常用类

一、包装类 1. 包装类的分类 &#xff08;1&#xff09;针对八种基本数据类型相应的引用类型—包装类 &#xff08;2&#xff09;有了类的特点&#xff0c;就可以调用类中的方法。 2. 包装类和基本数据的转换 jdk5 前的手动装箱和拆箱方式&#xff0c;装箱&#xff1a;基本…

【Qt】信号和槽机制

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

操作系统之《PV操作》【知识点+详细解题过程】

1、并发进程 &#xff1a; 并发的实质是一个处理器在几个进程之间的多路复用&#xff0c;并发是对有限的物理资源强制行使多用户共享&#xff0c;消除计算机部件之间的互等现象&#xff0c;以提高系统资源利用率。 &#xff08;1&#xff09;并发进程——互斥性&#xff1a; 进…

使用Jetpack Compose实现具有多选功能的图片网格

使用Jetpack Compose实现具有多选功能的图片网格 在现代应用中,多选功能是一项常见且重要的需求。例如,Google Photos允许用户轻松选择多个照片进行分享、添加到相册或删除。在本文中,我们将展示如何使用Jetpack Compose实现类似的多选行为,最终效果如下: 主要步骤 实现…

【redis】Redis AOF

1、AOF的基本概念 AOF持久化方式是通过保存Redis所执行的写命令来记录数据库状态的。AOF以日志的形式来记录每个写操作&#xff08;增量保存&#xff09;&#xff0c;将Redis执行过的所有写指令记录下来&#xff08;读操作不记录&#xff09;。AOF文件是一个只追加的文件&…

Redis 高级数据结构业务实践

0、前言 本文所有代码可见 > 【gitee code demo】 本文会涉及 hyperloglog 、GEO、bitmap、布隆过滤器的介绍和业务实践 1、HyperLogLog 1.1、功能 基数统计&#xff08;去重&#xff09; 1.2、redis api 命令作用案例PFADD key element [element ...]添加元素到keyPF…

PortSip测试

安装PBX 下载 免费下载 PortSIP PBX 安装PBX&#xff0c;安装后&#xff0c;运行 &#xff0c;默认用户是admin 密码是admin&#xff0c;然后配置IP 为192.168.0.189 设置域名为192.168.0.189 配置分机 添加分机&#xff0c;添加了10001、10002、9999 三个分机&#xff0c…