数据库《实验一 SQL Server数据库及对象的设计》
实验内容:
实验问题描述:
某学院有若干专业,每个专业有若干学生;学院每年每学期都开设有若干门课程;每门课程有多个学生选修,每个学生每学期可以同时选修多门课程,每个学生对于同一门课程可以多次选修,但每学期只能选修1次,课程选修成绩以综合成绩记录。请设计某学院简单的教学管理系统的E-R模型,要求给出每个实体、联系的属性。根据以上语义,我们可得了上图1如示的教学管理系统E-R图(属性未画出)。
根据学院提供的学生选课及其他的部分数据,将上图1所示的E-R图中的部分实体和联系转换为关系,得到如下4个关系模式和相应的数据字典描述。
A、关系模式
⑴ 专业设置:包括专业编号、国家专业编号、专业名称、专业英文名称、学制、培养层次、授予学位、院系编号、院系名称;
⑵ 学生情况:包括学号、姓名、性别、出生日期、民族、籍贯、政治面貌、校区、生源地、入学日期、年级、班级名称、专业编号;
⑶ 课程设置:包括学年、学期、课程编号、课程名称、学分、学时数、课程类别1、课程类别2、环节类别、考核方式;
⑷ 学生选课:包括学号、课程编号、学年、学期、综合成绩。
B**、数据字典**
表 | |
---|---|
表名 | 中文名 |
Major | 专业设置 |
Student | 学生情况 |
Course | 课程设置 |
SelectCourse | 学生选课 |
专业设置:Major | ||||||
---|---|---|---|---|---|---|
字段名 | 数据类型 | 可空性 | 主键 | 外键 | 默认值 | 字段含义 |
majorNo | CHAR(4) | NOT NULL | Yes | No | 专业代码 | |
GBMajorNo | CHAR(6) | NOT NULL | No | No | 国家专业编号 | |
majorName | VARCHAR(60) | NOT NULL | No | No | 专业名称 | |
enMajorName | VARCHAR(100) | NULL | No | No | 英文名称 | |
lengthSchool | TINYINT | NOT NULL | No | No | 4 | 学制 |
eduLevel | CHAR(6) | NOT NULL | No | No | 本科 | 培养层次 |
ddegree | CHAR(12) | NOT NULL | No | No | 授予学位 | |
departmentNo | CHAR(2) | NOT NULL | No | No | 院系代码 | |
department | VARCHAR(40) | NOT NULL | No | No | 院系名称 |
约束条件:
专业代码为4位数字字符且不能为0000
国家专业编号为6位数字字符且不能为000000
院系代码为2位数字字符且不能为00
学生情况:Student | ||||||
---|---|---|---|---|---|---|
字段名 | 数据类型 | 可空性 | 主键 | 外键 | 默认值 | 字段含义 |
sno | CHAR(12) | NOT NULL | Yes | No | 学生学号 | |
sname | CHAR(16) | NOT NULL | No | No | 学生姓名 | |
sex | CHAR(2) | NOT NULL | No | No | 男 | 性别 |
birthday | DATE | NOT NULL | No | No | 出生日期 | |
nationality | CHAR(16) | NULL | No | No | 汉族 | 民族 |
native | CHAR CHAR(24) | NULL | No | No | 东莞市 | 籍贯 |
political | CHAR(12) | NULL | No | No | 共青团员 | 政治面貌 |
district | CHAR(12) | NOT NULL | No | No | 松山湖校区 | 院系代码 |
studentSource | VARCHAR(24) | NULL | No | No | 生源地 | |
enterYear | DATE | NOT NULL | No | No | 入学日期 | |
schoolYear | CHAR(12) TINYINT | NOT NULL NOT NULL | No | No | 年级 | |
class | CHAR(24) | NOT NULL | No | No | 班级 | |
majorNo | CHAR(4) | NOT NULL | No | Yes | 专业代码 |
约束条件:
学生学号为12位数字字符,第1位为2,其它位为数字且最后2位不能是00
性别只能是‘男’或‘女’;
专业代码参照表Major。
课程设置:Course | ||||||
---|---|---|---|---|---|---|
字段名 | 数据类型 | 可空性 | 主键 | 外键 | 默认值 | 字段含义 |
schoolYear | CHAR**(12****)TINYINT** | NULL NOT NULL | Yes | No | 学年 | |
semester | TINYINT | NOT NULL | Yes | No | 学期 | |
courseNo | CHAR(6) | NOT NULL | Yes | No | 课程代码 | |
courseName | VARCHAR(50) | NOT NULL | No | No | 课程名称 | |
credit | NUMERIC(3,1) | NOT NULL | No | No | 学分 | |
creditHourse | TINYINT | NOT NULL | No | No | 学时 | |
courseType1 | CHAR(16) | NOT NULL | No | No | 课程类别 | |
courseType2 | CHAR(16) | NULL | No | No | 课程性质 | |
cegmentType | CHAR(16) | NULL | No | No | 环节类别 | |
examineWay | CHAR(16) | NOT NULL | No | No | 考核方式 |
约束条件:
学年取值范围是[1,2,3,4]
学期取值范围是[1,2,3,4,5,6,7,8]
课程代码为6位数字字符且不能为000000
学分取值范围是[ 0.5,1,1.5,2,2.5,3,3.5,4,4.5,5]
学年、学期和课程代码一起构成主码。
学生选课:SelectCourse | ||||||
---|---|---|---|---|---|---|
字段名 | 数据类型 | 可空性 | 主键 | 外键 | 默认值 | 字段含义 |
sno | CHAR(12) | NOT NULL | Yes | Yes | 学号 | |
schoolYear | CHAR(12) TINYINT | NOT NULL NOT NULL | Yes | Yes | 学年 | |
semester | TINYINT | NOT NULL | Yes | Yes | 学期 | |
courseNo | CHAR(6) | NOT NULL | Yes | Yes | 课程代码 | |
score | NUMERIC(6,2) | NULL | No | No | 综合成绩 |
约束条件:
综合成绩为百分制成绩
学号、学年、学期和课程代码一起构成主码。
学号参照表student
学年、学期和课程代码一起参照表course。
设计任务:
1.用SQL语句(create database)创建数据库,数据库的名字为每位同学自己的后三位学号和拼音姓名,例如,xiaojie101。
SQL语句如下:
--创造数据库AB
CREATE DATABASE AB
ON -- 定义第一个逻辑设备(默认为主逻辑设备)及其数据文件( NAME=ABDB, -- 数据文件的逻辑文件名(即别名)FILENAME='路径\ABDB.mdf', -- 物理(磁盘)文件名 SIZE=2, MAXSIZE=10, FILEGROWTH=1 )
LOG ON -- 定义日志逻辑设备及其日志文件( NAME=ABLog, -- 日志文件的逻辑文件名(即别名)FILENAME='路径\ABLog.ldf', -- 日志(磁盘)文件名 SIZE=1, MAXSIZE=5, FILEGROWTH=1 );
2.在所创建的数据库下,用SQL语句(create table)创建所有的表、对应的完整性约束。
SQL语句如下:
--使用数据库lingxue
USE AB;--创建Major表
CREATE TABLE Major
(majorNo CHAR(4) CONSTRAINT MajorPK PRIMARY KEY CHECK (majorNo LIKE '[0-9][0-9][0-9][0-9]' AND majorNo NOT LIKE '0000'),--专业代码 GBMajorNo CHAR(6) NOT NULL CHECK (GBMajorNo LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]' AND GBMajorNo NOT LIKE '000000'), --国家专业编号majorName VARCHAR(60) NOT NULL, --专业名称enMajorName VARCHAR(100) NULL, --英文名称lengthSchool TINYINT NOT NULL DEFAULT 4,--学制eduLevel CHAR(6) NOT NULL DEFAULT '本科',--培养层次ddegree CHAR(12) NOT NULL,--授予学位departmentNo CHAR(2) NOT NULL CHECK (departmentNo LIKE '[0-9][0-9]' AND departmentNo NOT LIKE '00'),--院系代码department VARCHAR(40) NOT NULL, --院系名称
);--#创建Students表
CREATE TABLE Students
(sno CHAR(12) NOT NULL CHECK (sno LIKE '[2][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'AND sno NOT LIKE '%00'), --学生学号sname CHAR(16) NOT NULL, --学生姓名sex CHAR(2) NOT NULL DEFAULT '男' CHECK (sex in ('男','女')), --性别birthday DATE NOT NULL, --出生日期nationality CHAR(16) DEFAULT '汉族' , --民族native CHAR(24) NULL DEFAULT '东莞市', --籍贯political CHAR(12) NULL DEFAULT '共青团员', --政治面貌district CHAR(12) NOT NULL DEFAULT '松山湖校区', --院系代码studentSource VARCHAR(24), --生源地enterYear DATE NOT NULL, --入学日期schoolYear TINYINT NOT NULL, --年级class CHAR(24) NOT NULL, --班级majorNo CHAR(4) NOT NULL CHECK(majorNo LIKE '[0-9][0-9][0-9][0-9]' AND majorNo NOT LIKE '0000'),--专业代码/*添加约束*/CONSTRAINT StudentsPK PRIMARY KEY (sno), --添加主键CONSTRAINT StudentsMajorFK FOREIGN KEY(majorNo) REFERENCES Major(majorNo),--添加外键
);
--创建Course表
CREATE TABLE Course
(schoolYear TINYINT NOT NULL CHECK(schoolYear >=1 AND schoolYear <= 4), --学年semester TINYINT NOT NULL CHECK(semester >=1 AND semester <+ 8), --学期courseNo CHAR(6) NOT NULL CHECK(courseNo LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]' AND courseNo NOT LIKE '000000'), --课程代码courseName VARCHAR(50) NOT NULL, --课程名称credit NUMERIC(3,1) NOT NULL CHECK(credit in ('0.5','1','1.5','2','2.5','3','3.5','4','4.5','5')), --学分creditHourse TINYINT NOT NULL, --学时courseType1 CHAR(16) NOT NULL, --课程类别courseType2 CHAR(16) NULL, --课程性质cegmentType CHAR(16) NULL, --环节类别examineWay CHAR(16) NOT NULL, --考核方式CONSTRAINT CoursePK PRIMARY KEY (schoolYear,semester,courseNo), --添加主键
);--创建SelectCourse表
CREATE TABLE SelectCourse
(sno CHAR(12) NOT NULL CHECK (sno LIKE '[2][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'AND sno NOT LIKE '%00'), --学号schoolYear TINYINT NOT NULL CHECK(schoolYear >=1 AND schoolYear <= 4), --学年semester TINYINT NOT NULL CHECK(semester >=1 AND semester <+ 8), --学期courseNo CHAR(6) NOT NULL CHECK(courseNo LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]' AND courseNo NOT LIKE '000000'), --课程代码score NUMERIC(6,2) NULL CHECK(score >= 0 AND score <= 100), --综合成绩CONSTRAINT SelectCoursePK PRIMARY KEY (sno,schoolYear,semester,courseNo), --添加主键CONSTRAINT SelectCourseSnoFK FOREIGN KEY(sno) REFERENCES Students(sno),--添加外键CONSTRAINT SelectCourseFK FOREIGN KEY(schoolYear,semester,courseNo) REFERENCES Course(schoolYear,semester,courseNo),--添加外键
)
3.用SQL的导入导出工具,将已经整理好的对应Excel表的数据全部导入到对应的数据库表中。
结果截图如下:
--查看插入表的数据
select * from Major
select * from Students
select * from Course
select * from SelectCourse
Major
Student
Course
SelectCourse
4.用SQL语句,在Student表中增加一条记录,记录的各属性取值对应本人的实际情况。
SQL语句如下:
--插入xx专业,如果major表没有自己的专业
INSERT INTO Major VALUES('专业代码 ','国家专业编号 ','专业名称','英文名称','学制' ,'培养层次 ','授予学位 ','院系代码','院系名称 ');--插入本人信息
INSERT INTO Students VALUES ('学号','姓名','性别','出生日期 ','汉族','籍贯',' 政治面貌','院系代码','生源地','入学日期','年级','班级','专业代码');
5.用SQL语句,将数据表Student、Course和SelectCourse的schoolYear字段值改为3。
SQL语句如下:
--删除外键约束
ALTER TABLE SelectCourse DROP CONSTRAINT SelectCourseFK;--修改字段值
UPDATE Students
SET schoolYear = 3;
UPDATE Course
SET schoolYear = 3;
UPDATE SelectCourse
SETschoolYear = 3; --添加外键约束
ALTER TABLE SelectCourse
ADD CONSTRAINT SelectCourseFK FOREIGN KEY (schoolYear,semester,courseNo) REFERENCES Course(schoolYear,semester,courseNo);
6. 用SQL语句,删除Student表中新增的对应于本人的记录。
SQL语句如下:
-- 删除本人信息
DELETE FROM Students WHERE sno = 'sno';
数据库《实验一 SQL Server数据库及对象的设计》相关推荐
- python连接sql数据库_python连接sql server数据库实现增删改查
简述 python连接微软的sql server数据库用的第三方模块叫做pymssql(document:http://www.pymssql.org/en/stable/index.html).在官 ...
- 【数据库-汇总】SQL SERVER数据库
1.sql sever增删改相关 -- 切换数据库 -- use 数据库名; 1.1创建部门表: create table Department ( -- 部门编号,primary key: ...
- python3连接sql server数据库_Python3操作SQL Server数据库(实例讲解)
1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...
- SQL SERVER 2000 数据库备份和SQL Server数据库备份有两种方式,
SQL SERVER 2000 数据库备份与还原时间:2006-08-30 10:23:23 来源:CSDN 作者:佚名备份数据库,例如: BACKUP DATABASE Northwind ...
- python调用sql数据库_Python3操作SQL Server数据库(实例讲解)
1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...
- 【数据库数据恢复】Sql Server数据库数据恢复案例
数据库数据恢复环境: 5块2T硬盘组建RAID5: 划分LUN供windows服务器使用: Sql Server2008数据库: 存储空间有三个逻辑分区. 数据库故障: 数据库文件丢失,涉及到5个数据 ...
- 【数据库数据恢复】SQL SERVER数据库MDF (NDF)或LDF损坏怎么恢复数据?
SQL SERVER数据库故障类型: MDF(NDF)或LDF损坏. SQL SERVER故障原因: 1.数据库正在操作过程中,机器突然断电: 2.人为误操作. SQL SERVER故障表现: 1.数 ...
- 数据库开发基本操作-SQL Server数据库基础知识
数据库是一个信息系统应用程序的重要组成部分,在Web开发中,应用更加广泛,要学习好Web开发和ADO.NET,就必须对数据库有一定的了解. 数据库的概念很广,可以从很多方面进行解释.但是在计算机中,它 ...
- ADO.NET连接SQL Server数据库
在.NET应用程序中,创建数据连接分为三步: 一.定义连接字符串 不同的数据库连接字符串的格式不同,一般都包括要连接的数据库提供都名称.登陆信息以及要使用的数据库名称. 注意:在定义连接字符串之前,一 ...
最新文章
- 青少年编程竞赛交流群第050次活动录播
- 数字消费时代 传统行业互联网转型方向
- 那些年做的学术公益-你不是一个人在战斗
- 基于 abp vNext 和 .NET Core 开发博客项目 - 统一规范API,包装返回模型
- Windows 10 常用的快捷键及常用指令
- PHP (20140505)
- mysql有没有类似merge_有关于Mysql的MERGE表类型
- tensor backward_Pytorch中的backward函数
- 新华三模拟器STP和RSTP及其MSTP的作用与配置
- SQL-sqlHelper001
- 关于eclipse中maven项目的问题
- 米家扫地机器人是石头代工的_石头科技的隐忧:智能扫地机器人前有高山 后有追兵...
- (Oracle)零基础学习SQL语句--第1篇
- Win10下安装Detectron2,超详细教程!
- 6s126发邮件服务器错误,iphone6s的邮件设置教程
- 2020.11.09-2020.11.15工作周报
- Unity中AssetBundle打包文件大致解读
- 给计算机老师发一封信,写给计算机老师的感谢信.doc
- 《机器学习》--概述
- Mybatis if test中字符串比较和Mybatis的like查询