使用SQL命令在学生作业管理数据库中建立学生表(要求性别只能填写男女)、课程表(学分保留小数点后一位)和学生成绩表(注意sno和cno的参照完整性约束,并且各项成绩保留小数点后一位)
时间: 2025-03-16 11:19:38 浏览: 52
### 创建学生表、课程表和学生成绩表的SQL结构
以下是满足需求的学生表、课程表和学生成绩表的 SQL 结构设计:
#### 学生表(Student)
学生表需包含性别字段,并通过 `CHECK` 约束限定性别只能为“男”或“女”。此外,学生的唯一标识为主键 `Sno`。
```sql
CREATE TABLE Student (
Sno CHAR(7) PRIMARY KEY,
Sname VARCHAR(50),
Sex ENUM('男', '女') NOT NULL CHECK (Sex IN ('男', '女')),
Age INT,
Dept VARCHAR(50)
);
```
此部分定义了学生表的核心字段及其约束条件[^1]。其中,`ENUM` 类型用于限制性别的输入范围,而 `CHECK` 约束进一步确保数据的有效性。
---
#### 课程表(Course)
课程表需要支持学分的小数位精度到一位,因此可以使用 `DECIMAL(3, 1)` 数据类型表示学分字段。该类型的含义是总长度为 3 位,小数点后保留 1 位。
```sql
CREATE TABLE Course (
Cno CHAR(10) PRIMARY KEY,
Cname VARCHAR(100),
Credit DECIMAL(3, 1) NOT NULL
);
```
上述代码片段展示了如何利用 `DECIMAL` 定义精确数值类型的字段[^2]。同时,主键 `Cno` 被指定为课程编号的唯一标识符。
---
#### 学生成绩表(SC)
学生成绩表需要实现以下功能:
- 设置 `Sno` 和 `Cno` 的外键分别指向 `Student(Sno)` 和 `Course(Cno)` 表。
- 使用组合主键 `(Sno, Cno)` 来确保每条记录的唯一性。
- 成绩字段 `Grade` 需要支持小数点后一位,可采用 `DECIMAL(4, 1)` 类型。
```sql
CREATE TABLE SC (
Sno CHAR(7),
Cno CHAR(10),
Grade DECIMAL(4, 1),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno),
PRIMARY KEY (Sno, Cno)
);
```
此处明确了成绩表的设计原则:通过外键建立关系并结合组合主键保障数据一致性[^3]。另外,`DECIMAL(4, 1)` 提供足够的精度以存储分数值。
---
### 综合说明
以上三张表格共同构成了一个完整的数据库模型,能够有效管理学生信息、课程详情以及他们的选课成绩情况。各表之间的关联性和约束机制均得到了充分考虑。
---
阅读全文
相关推荐
















