2 设计数据库1数据库的概念结构设计:分析各个实体的数据特征确定各个实体的属性和实体联系类型绘制相应的E-R图。2数据库的逻辑结构设计:将实体和联系转换为关系模式并对其进行范式分析和优化。3数据库的物理结构设计:再将关系模式转换为关系表设计各个数据表的结构确定各个字段的属性包括字段数据类型、长度、是否为NULL值、主键等属性。3 创建数据库在SQL Server中创建数据库数据
操作说明:
- 设计数据库
根据题目要求,首先需要进行数据库的设计,包括概念结构设计、逻辑结构设计和物理结构设计。具体步骤如下:
(1)概念结构设计:根据题目要求,需要分析各个实体的数据特征,确定各个实体的属性和实体联系类型,绘制相应的E-R图。
在本题中,可以确定以下实体和属性:
- 学生(学号、姓名、性别、年龄、所在班级)
- 教师(工号、姓名、性别、年龄、所教课程)
- 课程(课程号、课程名称、学分、学时)
- 班级(班级号、班级名称、所属学院、年级)
- 成绩(学号、课程号、成绩)
其中,学生和教师之间是“选课关系”,学生和班级之间是“所属关系”,班级和课程之间是“开课关系”,学生和课程之间是“成绩关系”。
根据上述实体和关系,可以绘制如下的E-R图:

(2)逻辑结构设计:将实体和联系转换为关系模式,并对其进行范式分析和优化。
在本题中,可以将上述实体和关系转化为以下关系模式:
- 学生(学号,姓名,性别,年龄,班级号)
- 教师(工号,姓名,性别,年龄)
- 课程(课程号,课程名称,学分,学时)
- 班级(班级号,班级名称,所属学院,年级)
- 成绩(学号,课程号,成绩)
对上述关系模式进行范式分析,可以发现其已经符合第三范式,因此无需进行优化。
(3)物理结构设计:再将关系模式转换为关系表,设计各个数据表的结构,确定各个字段的属性,包括字段数据类型、长度、是否为NULL值、主键等属性。
根据上述关系模式,可以创建以下数据表:
- 学生表(Student):包含学号、姓名、性别、年龄、班级号等字段。
- 教师表(Teacher):包含工号、姓名、性别、年龄等字段。
- 课程表(Course):包含课程号、课程名称、学分、学时等字段。
- 班级表(Class):包含班级号、班级名称、所属学院、年级等字段。
- 成绩表(Score):包含学号、课程号、成绩等字段。
具体表结构和字段属性如下:
-- 学生表
CREATE TABLE Student (
Sno CHAR(10) PRIMARY KEY, -- 学号
Sname VARCHAR(20) NOT NULL, -- 姓名
Ssex CHAR(2) NOT NULL, -- 性别
Sage TINYINT NOT NULL, -- 年龄
Cno CHAR(10) NOT NULL -- 班级号
);
-- 教师表
CREATE TABLE Teacher (
Tno CHAR(10) PRIMARY KEY, -- 工号
Tname VARCHAR(20) NOT NULL, -- 姓名
Tsex CHAR(2) NOT NULL, -- 性别
Tage TINYINT NOT NULL -- 年龄
);
-- 课程表
CREATE TABLE Course (
Cno CHAR(10) PRIMARY KEY, -- 课程号
Cname VARCHAR(20) NOT NULL, -- 课程名称
Ccredit FLOAT NOT NULL, -- 学分
Chours TINYINT NOT NULL -- 学时
);
-- 班级表
CREATE TABLE Class (
Cno CHAR(10) PRIMARY KEY, -- 班级号
Cname VARCHAR(20) NOT NULL, -- 班级名称
Cdept VARCHAR(20) NOT NULL, -- 所属学院
Cgrade TINYINT NOT NULL -- 年级
);
-- 成绩表
CREATE TABLE Score (
Sno CHAR(10) NOT NULL, -- 学号
Cno CHAR(10) NOT NULL, -- 课程号
Grade FLOAT NOT NULL, -- 成绩
PRIMARY KEY (Sno, Cno), -- 主键为学号和课程号的组合
FOREIGN KEY (Sno) REFERENCES Student(Sno), -- 外键关联学生表
FOREIGN KEY (Cno) REFERENCES Course(Cno) -- 外键关联课程表
);
- 创建数据库
根据题目要求,在SQL Server中创建一个新的数据库,命名为“DB_本人学号”,并设置数据库文件的参数。具体操作如下:
-- 创建数据库
CREATE DATABASE DB_XXXXXX
ON PRIMARY (
NAME = 'DB_XXXXXX_Data',
FILENAME = 'C:\DB\XXXXXX\DB_XXXXXX_Data.mdf',
SIZE = 10MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 5MB
)
LOG ON (
NAME = 'DB_XXXXXX_Log',
FILENAME = 'C:\DB\XXXXXX\DB_XXXXXX_Log.ldf',
SIZE = 5MB,
MAXSIZE = 50MB,
FILEGROWTH = 1MB
);
其中,XXXXXX需要替换为自己的学号,数据库文件保存在C:\DB\XXXXXX目录下。
- 创建数据表
根据题目要求,需要创建5个以上的数据表,并从excel文件中导入所有的记录数据。具体操作如下:
-- 创建数据表
-- (略)
-- 导入数据
-- 学生表
BULK INSERT Student
FROM 'C:\DB\XXXXXX\Student.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
-- 教师表
BULK INSERT Teacher
FROM 'C:\DB\XXXXXX\Teacher.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
-- 课程表
BULK INSERT Course
FROM 'C:\DB\XXXXXX\Course.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
-- 班级表
BULK INSERT Class
FROM 'C:\DB\XXXXXX\Class.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
-- 成绩表
BULK INSERT Score
FROM 'C:\DB\XXXXXX\Score.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
其中,XXXXXX需要替换为自己的学号,csv文件保存在C:\DB\XXXXXX目录下。
- 维护数据的完整性
根据题目要求,需要设置数据库中各个数据表的主键、外键、唯一约束、默认值约束、检查约束和自动编号的标识列等。具体操作如下:
-- 设置主键
ALTER TABLE Student ADD CONSTRAINT PK_Student PRIMARY KEY (Sno);
ALTER TABLE Teacher ADD CONSTRAINT PK_Teacher PRIMARY KEY (Tno);
ALTER TABLE Course ADD CONSTRAINT PK_Course PRIMARY KEY (Cno);
ALTER TABLE Class ADD CONSTRAINT PK_Class PRIMARY KEY (Cno);
ALTER TABLE Score ADD CONSTRAINT PK_Score PRIMARY KEY (Sno, Cno);
-- 设置外键
ALTER TABLE Student ADD CONSTRAINT FK_Student_Class FOREIGN KEY (Cno) REFERENCES Class(Cno);
ALTER TABLE Score ADD CONSTRAINT FK_Score_Student FOREIGN KEY (Sno) REFERENCES Student(Sno);
ALTER TABLE Score ADD CONSTRAINT FK_Score_Course FOREIGN KEY (Cno) REFERENCES Course(Cno);
-- 设置唯一约束
ALTER TABLE Student ADD CONSTRAINT UQ_Student_Sname UNIQUE (Sname);
ALTER TABLE Teacher ADD CONSTRAINT UQ_Teacher_Tname UNIQUE (Tname);
ALTER TABLE Course ADD CONSTRAINT UQ_Course_Cname UNIQUE (Cname);
ALTER TABLE Class ADD CONSTRAINT UQ_Class_Cname UNIQUE (Cname);
-- 设置默认值约束
ALTER TABLE Student ADD CONSTRAINT DF_Student_Ssex DEFAULT '男' FOR Ssex;
ALTER TABLE Teacher ADD CONSTRAINT DF_Teacher_Tsex DEFAULT '男' FOR Tsex;
ALTER TABLE Course ADD CONSTRAINT DF_Course_Ccredit DEFAULT 2.0 FOR Ccredit;
ALTER TABLE Course ADD CONSTRAINT DF_Course_Chours DEFAULT 32 FOR Chours;
ALTER TABLE Class ADD CONSTRAINT DF_Class_Cdept DEFAULT '计算机科学与技术' FOR Cdept;
ALTER TABLE Class ADD CONSTRAINT DF_Class_Cgrade DEFAULT 1 FOR Cgrade;
-- 设置检查约束
ALTER TABLE Student ADD CONSTRAINT CK_Student_Sage CHECK (Sage BETWEEN 16 AND 40);
ALTER TABLE Teacher ADD CONSTRAINT CK_Teacher_Tage CHECK (Tage BETWEEN 25 AND 60);
ALTER TABLE Course ADD CONSTRAINT CK_Course_Ccredit CHECK (Ccredit BETWEEN 1.0 AND 4.0);
ALTER TABLE Course ADD CONSTRAINT CK_Course_Chours CHECK (Chours BETWEEN 16 AND 64);
ALTER TABLE Class ADD CONSTRAINT CK_Class_Cgrade CHECK (Cgrade BETWEEN 1 AND 4);
-- 设置自动编号的标识列
ALTER TABLE Student ADD ID INT IDENTITY(1,1);
ALTER TABLE Teacher ADD ID INT IDENTITY(1,1);
ALTER TABLE Course ADD ID INT IDENTITY(1,1);
ALTER TABLE Class ADD ID INT IDENTITY(1,1);
ALTER TABLE Score ADD ID INT IDENTITY(1,1);
- 数据库备份
根据题目要求,需要对数据库进行备份,备份设备为“DB_bakDevice”。具体操作如下:
-- 创建备份设备
USE master;
EXEC sp_addumpdevice 'disk', 'DB_bakDevice', 'C:\DB\XXXXXX\DB_XXXXXX_Backup.bak';
-- 进行完整备份
BACKUP DATABASE DB_XXXXXX
TO DB_bakDevice
WITH FORMAT, INIT, NAME = 'DB_XXXXXX_FullBackup';
其中,XXXXXX需要替换为自己的学号,备份文件保存在C:\DB\XXXXXX目录下。
备份过程如下图所示:

- 检索与操作数据表
根据题目要求,需要使用DML语句完成系统运行涉及的相关增删改查操作,操作过程如下:
-- 查询学生表中所有记录
SELECT * FROM Student;
-- 查询成绩表中所有记录
SELECT * FROM Score;
-- 查询学号为“20210001”的学生的信息及其所在班级的信息
SELECT S.Sno, S.Sname, S.Ssex, S.Sage, C.Cname
FROM Student S
JOIN Class C ON S.Cno = C.Cno
WHERE S.Sno = '20210001';
-- 查询所有学生的姓名、年龄和所在班级名称
SELECT S.Sname, S.Sage, C.Cname
FROM Student S
JOIN Class C ON S.Cno = C.Cno;
-- 查询所有成绩大于等于90分的学生的学号、姓名和课程名称
SELECT S.Sno, S.Sname, C.Cname
FROM Student S
JOIN Score SC ON S.Sno = SC.Sno
JOIN Course C ON SC.Cno = C.Cno
WHERE SC.Grade >= 90;
-- 查询所有学生的平均分,并按照平均分从高到低排序
SELECT S.Sno, S.Sname, AVG(SC.Grade) AS AvgGrade
FROM Student S
JOIN Score SC ON S.Sno = SC.Sno
GROUP BY S.Sno, S.Sname
ORDER BY AvgGrade DESC;
-- 向学生表中插入一条新记录
INSERT INTO Student (Sno, Sname, Ssex, Sage, Cno)
VALUES ('20210010', '张三', '男', 20, 'C001');
-- 修改学号为“20210010”的学生的年龄为22岁
UPDATE Student SET Sage = 22 WHERE Sno = '20210010';
-- 删除学号为“20210010”的学生的记录
DELETE FROM Student WHERE Sno = '20210010';
操作结果如下图所示:

- 创建与应用存储过程
根据题目要求,需要使用SQL语言创建3个以上存储过程,并在JAVA代码中对其进行调用。具体操作如下:
-- 创建存储过程1:查询指定班级的所有学生信息
CREATE PROCEDURE GetStudentsByClass
@Cno CHAR(10)
AS
BEGIN
SELECT *
FROM Student
WHERE Cno = @Cno;
END;
-- 创建存储过程2:查询指定课程的成绩分布情况
CREATE PROCEDURE GetScoreDistribution
@Cno CHAR(10)
AS
BEGIN
SELECT
COUNT(CASE WHEN Grade >= 90 THEN 1 END) AS 'A',
COUNT(CASE WHEN Grade >= 80 AND Grade < 90 THEN 1 END) AS 'B',
COUNT(CASE WHEN Grade >= 70 AND Grade < 80 THEN 1 END) AS 'C',
COUNT(CASE WHEN Grade >= 60 AND Grade < 70 THEN 1 END) AS 'D',
COUNT(CASE WHEN Grade < 60 THEN 1 END) AS 'E'
FROM Score
WHERE Cno = @Cno;
END;
-- 创建存储过程3:查询指定学
原文地址: http://www.cveoy.top/t/topic/gSLJ 著作权归作者所有。请勿转载和采集!