学生(学号,姓名,性别,出生日期,民族,班号) 班级(班号,班名,班主任,教室) 课程(课程号,课程名,学分) 选课(学号,课程号,成绩)
时间: 2024-10-13 19:16:05 浏览: 42
班主任-工作计划3.pdf
这是一个简单的数据库设计示例,用于管理学生、班级、课程以及学生选课的情况。以下是各个实体及其关联的描述:
1. **学生**:存储学生的基本信息,包括学号(唯一标识)、姓名、性别、出生日期、民族和所属的班级编号(通过外键引用班级表)。
2. **班级**:包含班号(作为主键)、班名、班主任姓名以及教室信息。
3. **课程**:存储课程的数据,包括课程号(主键)、课程名称和学分。
4. **选课**:这是联系学生和课程的中间表,有学号(外键引用学生表)、课程号(外键引用课程表),以及对应的成绩。
对于你提到的操作,可以创建以下几个SQL相关的:
- 查询男性学生信息:
```sql
CREATE PROCEDURE GetMaleStudents
AS
BEGIN
SELECT 学号, 姓名, 性别
FROM 学生
WHERE 性别 = '男';
END;
```
- 指定学生信息查询:
```sql
CREATE PROCEDURE GetStudentInfo(@name NVARCHAR(50))
AS
BEGIN
SELECT 学号, 姓名, 性别, 班号
FROM 学生
WHERE 姓名 = @name;
END;
```
- 选修课程成绩查询:
```sql
CREATE PROCEDURE GetCourseGrades(@course_name NVARCHAR(50))
AS
BEGIN
SELECT s.学号, s.姓名, c.课程名, sc.成绩
FROM 学生 s
JOIN 选课 sc ON s.学号 = sc.学号
JOIN 课程 c ON sc.课程号 = c.课程号
WHERE c.课程名 = @course_name;
END;
```
- 计算课程总分和平均分:
```sql
CREATE PROCEDURE CourseScoreSummary(@course_name NVARCHAR(50))
AS
BEGIN
SELECT c.课程名, SUM(sc.成绩) AS 总分, AVG(sc.成绩) AS 平均分
FROM 课程 c
JOIN 选课 sc ON c.课程号 = sc.课程号
GROUP BY c.课程名
HAVING c.课程名 = @course_name;
END;
```
至于触发器,由于SQL的特性,它们一般会在特定的表上自动执行,例如:
- 插入学生记录后显示信息:
```sql
CREATE TRIGGER InsertStudentInfo
ON 学生
AFTER INSERT
AS
BEGIN
SELECT * FROM inserted;
END;
```
其他的触发器可以根据需求设置,比如在修改班级时更新学生列表等。具体的触发器创建取决于数据库管理系统(DBMS)的规定和业务需求。
阅读全文