数据库设计问题

问题:

某学校要设计一个数据库,学校的业务规则概括如下:

  • 学校内班级若干,每个班级内又有学生若干。
  • 学校开设课程若干,只有某些特定的班级能上指定的课程。
  • 学生选修某些课程,但是在自身班级下的课程是必修。
  • 学校定期组织考试,成绩囊括所有学生所有课程的考试成绩。

解决:

使用三大范式实现数据库设计规范化:

1、确认实体:

系 科目 学生 成绩

2、标出属性:

系:系编号(PK) 系名称
科目:科目编号(PK) 科目名称 学习时长 系编号
学生:学号(PK) 密码 姓名 性别 系编号 联系电话 生日 邮箱 身份证号码 住址
成绩:学号(FK) 科目号(FK) 考试日期 考试成绩

3、找出关系:

1系>>>N学生
1系>>>N科目
1学生>>>N成绩
1科目>>>N成绩
N学生<<<>>>N科目

4、画E-R图:

在这里插入图片描述

5、画模型图:

在这里插入图片描述

代码建库步骤如下:
// 建库 MySchool_db
CREATE DATABASE Myschool_db;

在这里插入图片描述
在这里插入图片描述

// 建表(先主后从)
// 创建年级表
CREATE TABLE grade(GradeID INT  NOT NULL AUTO_INCREMENT COMMENT '年级编号',GradeName VARCHAR(50) NOT NULL COMMENT '年级名称',PRIMARY KEY (GradeID)
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

在这里插入图片描述

// 创建科目表
DROP TABLE IF EXISTS subject;
CREATE TABLE subject  (SubjectNo int NOT NULL AUTO_INCREMENT COMMENT '课程编号',SubjectName varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课程名称',ClassHour int NULL DEFAULT NULL COMMENT '学时',GradeID int NULL DEFAULT NULL COMMENT '年级编号',PRIMARY KEY (SubjectNo)
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci

在这里插入图片描述

// 创建学生表
DROP TABLE IF EXISTS student;
CREATE TABLE student  (StudentNo int(0) NOT NULL COMMENT '学号',LoginPwd varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,StudentName varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学生姓名',Sex tinyint(1) NULL DEFAULT NULL COMMENT '性别,取值0或1',GradeId int(0) NULL DEFAULT NULL COMMENT '年级编号',Phone varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话,允许为空,即可选输入',Address varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地址,允许为空,即可选输入',BornDate datetime(0) NULL DEFAULT NULL COMMENT '出生时间',Email varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱账号,允许为空,即可选输入',IdentityCard varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '身份证号',PRIMARY KEY (StudentNo) USING BTREE,UNIQUE INDEX IdentityCard(IdentityCard) USING BTREE,INDEX Email(Email) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

在这里插入图片描述

// 创建成绩表
CREATE TABLE `result`  (`StudentNo` int(0) NOT NULL COMMENT '学号',`SubjectNo` int(0) NOT NULL COMMENT '课程编号',`ExamDate` datetime(0) NOT NULL COMMENT '考试日期',`StudentResult` int(0) NOT NULL COMMENT '考试成绩',INDEX `SubjectNo`(`SubjectNo`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci

在这里插入图片描述

// 为subject表添加外键约束
ALTER TABLE subject ADD CONSTRAINT fk_subgra FOREIGN KEY (GradeID) REFERENCES grade (GradeID);
//为student表添加外键约束
ALTER TABLE student ADD CONSTRAINT fk_stugra FOREIGN KEY (GradeID) REFERENCES grade (GradeID);
结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里实验就基本做完啦!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3399平台开发系列讲解(网络篇)什么是Linux路由

🚀返回专栏总目录 文章目录 一、什么是路由二、路由配置命令沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是路由 一张路由表中会有多条路由规则。每一条规则至少包含这三项信息。 目的网络:这个包想去哪儿?出口设备:将包从哪个口扔出去?下一跳网关:下一个…

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

手上 ROC-RK3399-PC Pro 使用蓝牙 WIFI 模组是 AP6256。 一、AP6256 模组介绍 AP6256是正基科技(AMPAK)推出的一款低成本、低功耗的双模模块,它集成了Wi-Fi和蓝牙功能。这款模块支持SDIO接口,具有以下特点: 1、型号:AP6256 2、接口:SDIO(Secure Digital Input/Outp…

分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类…

【DG 特长生2019】模拟赛赛后总结(2024.1.24)

打了330pt,订正后350pt T1 签到 T2 dfs剪枝&#xff08;虽然我写挂了&#xff09; T3 NOIP原题 T4 floyd 主要是想分享一下T4。 写了一种基于floyd的做法。 感觉好像和大部分人的写法不太一样。 因为看到大小关系&#xff0c;我就想到了传递性。 floyd是可以维护传递…

Pyside6中QTableWidget使用

目录 一&#xff1a;介绍&#xff1a; 二&#xff1a;演示 一&#xff1a;介绍&#xff1a; 在 PySide6 中&#xff0c;QTableWidget 是一个用于展示和编辑表格数据的控件。它提供了在窗口中创建和显示表格的功能&#xff0c;并允许用户通过单元格来编辑数据。 要使用 QTabl…

【学网攻】 第(4)节 -- 交换机划分Vlan

文章目录 【学网攻】 第(1)节 -- 认识网络 【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口 前言 网络已经成为了我们生活中不可或缺的一部分&#xff0c;它连接了世界各地的人们&#xff0c;让信息和资源得以自由流动。随着互联网的发展&am…

Linux 下查看端口以及释放端口

目录 一、查看端口是否被占用 1、使用 netstat 命令 2、使用 lsof 命令 二、释放端口 1、使用kill命令 2、使用 fuser 命令 三、netstat 四、lsof 五、fuser 一、查看端口是否被占用 在 Linux 系统上&#xff0c;你可以使用 netstat 或 lsof 命令来查看端口是否被占用。…

洛谷 P1614 爱与愁的心痛

测试用例 8 3 1 4 7 3 1 2 4 3#include<iostream> using namespace std; int main(){int n;int m;cin>> n >> m;int a[10000];for (int i 0;i < n;i){cin>>a[i];}int min 10000000;for (int i 0;i < n-m1;i){int temp 0;for (int j i;j &…

85花们不会停下脚步,等待宋茜的追赶。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 近期&#xff0c;宋茜的新剧《我们的翻译官》正在热播中。这部…

第5章-TCP和UDP基本原理

1. TCP/IP传输层的作用 2. TCP基本原理 2.1. TCP头格式 2.2. TCP的三次握手 2.3. TCP的四次挥手 2.4. TCP的窗口滑动机制 3. UDP基本原理 4. TCP和UDP的比较 1. TCP/IP传输层的作用 1、定义&#xff1a;为主机&#xff1a;提供端到端的连接&#xff1b;为网络层&#xf…

【C++】入门(二)

前言&#xff1a; c基础语法&#xff08;下&#xff09; 文章目录 五、引用5.1 引用概念5.2 引用使用规则5.3 常引用5.4 引用的使用场景5.5 引用和指针的区别 六、内联函数6.1 概念6.2 内联函数的特性 七、auto关键字&#xff08;C11&#xff09;7.1 概念7.2 使用规则7.3 用于f…

SpringSecurity(12)——OAuth2相关概念

角色 资源所有者&#xff08;Resource Owner&#xff09;&#xff1a;通常是用户&#xff0c;如昵称、头像这些资源的拥有者&#xff08;用户只是将这些资源放到服务提供商的资源服务器中&#xff09;第三方应用&#xff08;Client&#xff09;&#xff1a;希望使用资源服务器…