学生选课系统---数据库课程设计SQL Server

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

可以直接从我的GitHub中获取文档:

学生选课系统GitHub

一 题目

学生选课系统

二 需求分析

1.根据学生专业学年学期等信息,录入课程完成课程计划
2.根据课程计划,录入任课教师信息
3.学生可以根据学年学期等信息,选择课程完成选课要求

三 结构概念设计

计划受众表信息
学生表信息
教师表信息
课程表信息
教学计划表信息
任课表信息
学生选课表信息

四 ER图(基于三级范式)

这里写图片描述

这里我遇到一个问题如何设计ER图 和如何根据ER图设计关系逻辑呢?

数据库设计方法

看了以上这篇 收益很多 可以参考下

五 数据字典

Stdunt表(学生表)

字段名           数据类型         长度            约束            描述
字段名    数据类型    长度    约束    描述
Student_id    Nvar char    50    主键    学生学号
Gender    Nvarchar    50    无    性别
Name    Nvarchar    50    无    学生名字
category    Nvarchar    50    无    种类

Course表(课程表)

字段名    数据类型    长度    约束    描述
course_id    Nvarchar    50    主键    课程号
Name    Nvarchar    50    唯一键    课程名
mode    Nvarchar    50    无    考核方式
Credit    Int        无    学分

each表(教师任课表)

字段名    数据类型    长度    约束    描述
Teach_id    Nvarchar    50    主键    任课号
Plan_id    Nvarchar    50    外键,组合唯一键    教学计划号
Teacher_id    Nvarchar    50    外键,组合唯一键    教师编号

Teacher表(教师表)

字段名    数据类型    长度    约束    描述
Teacher_id    Nvarchar    50    主键    教师编号
Name    Nvarchar    50    无    教师名
Gender    Nvarchar    50    无    性别
Student_select表(学生选课表)
字段名    数据类型    长度    约束    描述
Select_id    Nvarchar    50    主键    选课号
Student_id    Nvarchar    50    外键,组合唯一键    学生编号
Teach_id    Nvarchar    50    外键,组合唯一键    排课编号

Administrator表

字段名    数据类型    长度    约束    描述
administrator    Nvarchar    50        管理员号
password    Nvarchar    50        密码

Plan表(教学计划表)

字段名    数据类型    长度    约束    描述
plan_id    nvarchar    50    主键    教学计划号
audience_id    nvarchar    50    外键,组合唯一键    计划受众号
course_id    nvarchar    50    外键,组合唯一键    课程号

audience表(计划受众表)

字段名    数据类型    长度    约束    描述
auience_id    nvarchar    50    主键约束    计划受众id
academy    nvarchar    50    无    学院
major    nvarchar    50    无    专业
grade    nvarchar    50    无    年级
semester    Int        无    学期

六 数据库定义语句

CREATE DATABASE [Student_Select]
GO
USE [Student_Select]
GO
/****** Object:  Table [dbo].[Teacher]    Script Date: 06/27/2018 10:37:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Teacher](
    [teacher_id] [nvarchar](50) NOT NULL,
    [name] [nvarchar](50) NULL,
    [gender] [nchar](10) NULL,
 CONSTRAINT [PK_Teacher] PRIMARY KEY CLUSTERED 
(
    [teacher_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[Teacher]([teacher_id], [name], [gender]) VALUES (N'1', N'1', N'1         ')
INSERT [dbo].[Teacher]([teacher_id], [name], [gender]) VALUES (N'2', N'2', N'2         ')
/****** Object:  Table [dbo].[Course]    Script Date: 06/27/2018 10:37:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Course](
    [course_id] [nvarchar](50) NOT NULL,
    [name] [nvarchar](50) NULL,
    [mode] [nvarchar](50) NOT NULL,
    [credit] [nvarchar](50) NULL,
 CONSTRAINT [PK_Course] PRIMARY KEY CLUSTERED 
(
    [course_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [IX_Course] UNIQUE NONCLUSTERED 
(
    [name] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'考核方式' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Course', @level2type=N'COLUMN',@level2name=N'mode'
GO
INSERT [dbo].[Course]([course_id], [name], [mode], [credit]) VALUES (N'1', N'1', N'1', N'1')
INSERT [dbo].[Course]([course_id], [name], [mode], [credit]) VALUES (N'2', N'2', N'2', N'2')
/****** Object:  Table [dbo].[audience]    Script Date: 06/27/2018 10:37:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[audience](
    [audience_id] [nvarchar](50) NOT NULL,
    [academy] [nvarchar](50) NULL,
    [major] [nvarchar](50) NULL,
    [grade] [nvarchar](50) NULL,
    [semester] [int] NULL,
 CONSTRAINT [PK_audience] PRIMARY KEY CLUSTERED 
(
    [audience_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'受众ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'audience', @level2type=N'COLUMN',@level2name=N'audience_id'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'学院' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'audience', @level2type=N'COLUMN',@level2name=N'academy'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年级' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'audience', @level2type=N'COLUMN',@level2name=N'grade'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'学期' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'audience', @level2type=N'COLUMN',@level2name=N'semester'
GO
INSERT [dbo].[audience]([audience_id], [academy], [major], [grade], [semester]) VALUES (N'1', N'1', N'1', N'1', 1)
INSERT [dbo].[audience]([audience_id], [academy], [major], [grade], [semester]) VALUES (N'2', N'2', N'2', N'2', 2)
/****** Object:  Table [dbo].[Administrator]    Script Date: 06/27/2018 10:37:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Administrator](
    [administrator] [nvarchar](50) NULL,
    [password] [nvarchar](50) NULL
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Student]    Script Date: 06/27/2018 10:37:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Student](
    [student_id] [nvarchar](50) NOT NULL,
    [gender] [nchar](10) NULL,
    [name] [nvarchar](50) NULL,
    [category] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED 
(
    [student_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[Student]([student_id], [gender], [name], [category]) VALUES (N'1', N'1         ', N'1', N'1')
INSERT [dbo].[Student]([student_id], [gender], [name], [category]) VALUES (N'2', N'2         ', N'2', N'2')
/****** Object:  Table [dbo].[Plan]    Script Date: 06/27/2018 10:37:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Plan](
    [plan_id] [nvarchar](50) NOT NULL,
    [audience_id] [nvarchar](50) NOT NULL,
    [course_id] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Plan] PRIMARY KEY CLUSTERED 
(
    [plan_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [IX_Plan] UNIQUE NONCLUSTERED 
(
    [audience_id] ASC,
    [course_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[Plan]([plan_id], [audience_id], [course_id]) VALUES (N'1', N'1', N'1')
INSERT [dbo].[Plan]([plan_id], [audience_id], [course_id]) VALUES (N'2', N'2', N'2')
/****** Object:  Table [dbo].[Teach]    Script Date: 06/27/2018 10:37:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Teach](
    [teach_id] [nvarchar](50) NOT NULL,
    [plan_id] [nvarchar](50) NULL,
    [teacher_id] [nvarchar](50) NULL,
 CONSTRAINT [PK_Teach] PRIMARY KEY CLUSTERED 
(
    [teach_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [IX_Teach_1] UNIQUE NONCLUSTERED 
(
    [teach_id] ASC,
    [plan_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[Teach]([teach_id], [plan_id], [teacher_id]) VALUES (N'1', N'1', N'1')
INSERT [dbo].[Teach]([teach_id], [plan_id], [teacher_id]) VALUES (N'2', N'2', N'2')
/****** Object:  Table [dbo].[Student_Selete]    Script Date: 06/27/2018 10:37:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Student_Selete](
    [selete_id] [nvarchar](50) NOT NULL,
    [student_id] [nvarchar](50) NOT NULL,
    [teach_id] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Student_Selete] PRIMARY KEY CLUSTERED 
(
    [selete_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [IX_Student_Selete_1] UNIQUE NONCLUSTERED 
(
    [student_id] ASC,
    [teach_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  ForeignKey [audience_id]    Script Date: 06/27/2018 10:37:01 ******/
ALTER TABLE [dbo].[Plan]  WITH CHECK ADD  CONSTRAINT [audience_id] FOREIGN KEY([audience_id])
REFERENCES [dbo].[audience]([audience_id])
GO
ALTER TABLE [dbo].[Plan] CHECK CONSTRAINT [audience_id]
GO
/****** Object:  ForeignKey [course_id]    Script Date: 06/27/2018 10:37:01 ******/
ALTER TABLE [dbo].[Plan]  WITH CHECK ADD  CONSTRAINT [course_id] FOREIGN KEY([course_id])
REFERENCES [dbo].[Course]([course_id])
GO
ALTER TABLE [dbo].[Plan] CHECK CONSTRAINT [course_id]
GO
/****** Object:  ForeignKey [plan_id]    Script Date: 06/27/2018 10:37:01 ******/
ALTER TABLE [dbo].[Teach]  WITH CHECK ADD  CONSTRAINT [plan_id] FOREIGN KEY([plan_id])
REFERENCES [dbo].[Plan]([plan_id])
GO
ALTER TABLE [dbo].[Teach] CHECK CONSTRAINT [plan_id]
GO
/****** Object:  ForeignKey [teacher_id]    Script Date: 06/27/2018 10:37:01 ******/
ALTER TABLE [dbo].[Teach]  WITH CHECK ADD  CONSTRAINT [teacher_id] FOREIGN KEY([teacher_id])
REFERENCES [dbo].[Teacher]([teacher_id])
GO
ALTER TABLE [dbo].[Teach] CHECK CONSTRAINT [teacher_id]
GO
/****** Object:  ForeignKey [student_zhujian]    Script Date: 06/27/2018 10:37:01 ******/
ALTER TABLE [dbo].[Student_Selete]  WITH CHECK ADD  CONSTRAINT [student_zhujian] FOREIGN KEY([student_id])
REFERENCES [dbo].[Student]([student_id])
GO
ALTER TABLE [dbo].[Student_Selete] CHECK CONSTRAINT [student_zhujian]
GO
/****** Object:  ForeignKey [teach_zhujian]    Script Date: 06/27/2018 10:37:01 ******/
ALTER TABLE [dbo].[Student_Selete]  WITH CHECK ADD  CONSTRAINT [teach_zhujian] FOREIGN KEY([teach_id])
REFERENCES [dbo].[Teach]([teach_id])
GO
ALTER TABLE [dbo].[Student_Selete] CHECK CONSTRAINT [teach_zhujian]
GO

七 数据库关系图

这里写图片描述

最后贴一下朋友的数据库ER图和逻辑设计,是仓库管理系统,我觉得也可以参考:

ER图:

这里写图片描述

逻辑图:

这里写图片描述

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
4天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
4天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
5天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
16天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
62 3
|
14天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
16 1
|
16天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
15 2
|
19天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
SQL 数据库
如何快速备份还原Sql Server 数据库
备份数据库 选择你要备份的数据库,鼠标右键单击,选择任务-备份   弹出备份数据库窗口,选择添加    弹出选择备份目标窗口,点击浏览,选择存放备份数据库的目录,输入文件名,后缀名输入.bak,点击确定,确定,备份完成     还原数据库  鼠标右键单击数据库,选择还原文件和文件   ...
1360 0