社团成员信息系统

news2024/9/19 10:47:42

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.coloradmin.cn/o/1877945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟化技术(二)

目录 三、存储虚拟化(一)存储虚拟化的一般模型(二)存储虚拟化的实现方式(三)案例分析 四、网络虚拟化(一)核心层网络虚拟化(二)接入层网络虚拟化(…

生成独立的zedboard+ad9361起始项目

文件分享 链接:https://pan.baidu.com/s/17wB_9xVWjO7HhxNvmmZyuA 提取码:94zz 首先下载HDL和NO-OS项目 git clone --recursive https://github.com/analogdevicesinc/hdl git clone --recursive https://github.com/analogdevicesinc/no-OS下载…

L03_Redis知识图谱

这些知识点你都掌握了吗?大家可以对着问题看下自己掌握程度如何?对于没掌握的知识点,大家自行网上搜索,都会有对应答案,本文不做知识点详细说明,只做简要文字或图示引导。 Redis 全景图 Redis 知识全景图都包括什么呢?简单来说,就是“两大维度,三大主线”。 Redis …

基于springboot实现学生用品采购系统项目【项目源码+论文说明】

基于springboot实现学生用品采购系统演示 摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装学生用品采购系统软…

STM32CubeMx的学习记录系列(2)- STM32G474RET6

最近有个小比赛,需要用到G4,不过找了一圈没有找到标准库的代码,只能使用hal,用CubeMX来生成配置代码。 共同特点 ARDUINO Uno V3 扩展连接器 ST morpho 扩展引脚接头,可完全访问所有 STM32 I/O 采用LQFP64或LQFP48封…

算法 —— 双指针

目录 移动零 复写零 快乐数 盛最多水的容器 有效三角形的个数 查找总价格为目标值的两个商品 三数之和 四数之和 移动零 下图以样例1为例,看下图如何做到保证非零元素相对顺序前提下,移动零元素。 代码实现如下: class Solution {…

1,Windows-本地Linux 系统(WSL)

目录 第一步电脑设置 第二步安装Ubuntu 第三文件传递 开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL),开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arc…

如何有效保护生物医药企业隔离网数据导出的安全性?

生物医药企业的核心数据保护至关重要,企业为了保护内部的核心数据,会将网络进行物理隔离,将企业内⽹与外⽹隔离。⽹络隔离后,仍存在重要数据从内网导出至外网的隔离网数据导出需求。以下是一些需要特别保护的核心数据类型&#xf…

小米平板6系列对比

小米平板6系列目前有4款,分别为6、6 Pro、6 Max、6S Pro。具体对比如下表所示。 小米平板型号66 Pro6 Max6S Pro实物图发布时间2023年4月21日2023年4月21日2023年8月14日2024年2月22 日屏幕大小11英寸11英寸14英寸12.4英寸分辨率2.8K2.8K2.8K3K刷新率144Hz144Hz120…

EtherCAT笔记(四)——EtherCAT数据帧结构

EtherCAT数据包含2B的数据头和44~1948B的数据区。数据区由多个子报文组成。由于EtherCAT本身是通过以太网数据帧的形式传输,因此其协议帧中会携带以太网的帧头。 其中,解释如下: (1)以太网数据帧头:EtherC…

VSCode + GDB + J-Link 单片机程序调试实践

VSCode GDB J-Link 单片机程序调试实践 本文介绍如何创建VSCode的调试配置,如何控制调试过程,如何查看修改各种变量。 安装调试插件 在 VSCode 扩展窗口搜索安装 Cortex-Debug插件 创建调试配置 在 Run and Debug 窗口点击 create a launch.json …

C语言力扣刷题11——打家劫舍1——[线性动态规划]

力扣刷题11——打家劫舍1和2——[线性动态规划] 一、博客声明二、题目描述三、解题思路1、线性动态规划 a、什么是动态规划 2、思路说明 四、解题代码(附注释) 一、博客声明 找工作逃不过刷题,为了更好的督促自己学习以及理解力扣大佬们的解…

日志分析-windows系统日志分析

日志分析-windows系统日志分析 使用事件查看器分析Windows系统日志 cmd命令 eventvwr 筛选 清除日志、注销并重新登陆,查看日志情况 Windows7和Windowserver2008R2的主机日志保存在C:\Windows\System32\winevt\Logs文件夹下,Security.evtx即为W…

有哪些防爬虫的方法

防爬虫的方法有robots.txt文、user-agent过滤、ip限制、验证码、动态页面生成、频率限制、动态url参数和反爬虫技术等。详细介绍:1、robots.txt文件,用于告诉搜索引擎爬虫哪些页面可以访问,哪些页面禁止访问;2、ip限制&#xff0c…

面试-J.U.C包的梳理

1.J.U.C包的梳理 Java.Util.Concurrent包简称JUC (1)JUC整体架构图 (2)分析 Executor:线程执行器,任务执行和调度的框架。Tools下存在executor相关的executors类,用于创建executorservice,scheduleexecutorservice,…

获取 url 地址栏 ? 后面的查询字符串,并以键值对形式放到对象里面

写在前面 在前端面试当中,关于 url 相关的问题很常见,而对于 url 请求参数的问题也很常见,大部分以笔试题常见,今天就根据这道面试题一起来看一下。 问题 获取 url 地址栏?后面的查询字符串,并以键值对形式放到对象…

CICD持续集成(Jenkins+Git+Gogs)

1.Jenkins Jenkins 是一个开源的、用于构建和自动化软件开发流程的持续集成和交付工具。它提供了一个可扩展的平台,用于构建、测试和部署软件项目。通过使用 Jenkins,开发团队可以实现持续集成和交付,自动化构建和测试过程,提高软…

Rust监控可观测性

可观测性 在监控章节的引言中,我们提到了老板、前端、后端眼中的监控是各不相同的,那么有没有办法将监控模型进行抽象、统一呢? 来简单分析一下: 业务指标实时展示,这是一个指标型的数据( metric )手机 APP 上传的数…

springboot在线考试 LW +PPT+源码+讲解

第三章 系统分析 3.1 可行性分析 一个完整的系统,可行性分析是必须要有的,因为他关系到系统生存问题,对开发的意义进行分析,能否通过本系统来补充线下在线考试管理模式中的缺限,去解决其中的不足等,通过对…

三让徐州 | 第8集 | 自古皆有死,人无信不立 | 三国演义 | 逐鹿群雄

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 📌这篇博客分享的是《三国演义》文学剧本第Ⅰ部分《群雄逐鹿》的第8️⃣集《三让徐州》的经典语句和文学剧本全集台词 文章目录 1.经典语句2.文学剧本台词…