1. 写出用Create Table创建表student1、course1、sc1 ,并按下列要求设置完整性约束。要求: (1)Student1表 属性:Sno(学号) Sname(姓名) Ssex(性别) Sage (年龄) Sdept(系部) student 的约束: 主码:sno Sname不可为空,且唯一 性别 不能为空且取值范围为{男,女} 年龄大于16岁 (2) Course1表 属性:Cno(课程号) Cname(课程名) Cpno(先修课号) Ccredit(学分) course 的约束: 主码:cno Ccredit 取值范围[ 1-6 ] Course表的外码Cpno ,参照表Course的Cno (3) SC1表 属性:Sno(学号) Cno(课程号) Grade(成绩) SC1 的约束: 主码:(sno,cno) ,主码名为 PK_SC 成绩(grade)只能在 0 – 100分之间 Sc1的外码: 外码:SC 表的sno 参照表 student 的 sno 外码:sc 表的Cno 参照表 course 的 cno 2 实体完整性验证
时间: 2024-01-08 20:02:55 浏览: 90
1. 创建表语句如下:
```sql
-- 创建 Student1 表
CREATE TABLE student1 (
Sno VARCHAR(10) PRIMARY KEY,
Sname VARCHAR(20) NOT NULL UNIQUE,
Ssex VARCHAR(2) NOT NULL CHECK (Ssex IN ('男', '女')),
Sage INT NOT NULL CHECK (Sage > 16),
Sdept VARCHAR(20)
);
-- 创建 Course1 表
CREATE TABLE course1 (
Cno VARCHAR(10) PRIMARY KEY,
Cname VARCHAR(20) NOT NULL,
Cpno VARCHAR(10) REFERENCES course1(Cno),
Ccredit INT CHECK (Ccredit BETWEEN 1 AND 6)
);
-- 创建 SC1 表
CREATE TABLE sc1 (
Sno VARCHAR(10) REFERENCES student1(Sno),
Cno VARCHAR(10) REFERENCES course1(Cno),
Grade INT CHECK (Grade BETWEEN 0 AND 100),
PRIMARY KEY (Sno, Cno)
);
```
2. 实体完整性验证是指保证数据表中每条记录的实体完整性,即每条记录都代表一个真实存在的实体。在本题中,需要验证以下实体的完整性:
- Student1 表中的每个 Sno 对应一个唯一的学生信息
- Course1 表中的每个 Cno 对应一个唯一的课程信息
- SC1 表中的每个 (Sno, Cno) 对应一个唯一的成绩信息
验证方法如下:
- 对于 Student1 表和 Course1 表,可以通过查询每个 Sno/Cno 对应的记录数,保证每个 Sno/Cno 对应一个唯一的实体。
```sql
-- 查询 Student1 表中每个 Sno 对应的记录数
SELECT Sno, COUNT(*) FROM student1 GROUP BY Sno HAVING COUNT(*) > 1;
-- 查询 Course1 表中每个 Cno 对应的记录数
SELECT Cno, COUNT(*) FROM course1 GROUP BY Cno HAVING COUNT(*) > 1;
```
如果查询结果为空,则说明实体完整性验证通过。
- 对于 SC1 表,可以通过查询每个 (Sno, Cno) 对应的记录数,保证每个 (Sno, Cno) 对应一个唯一的实体。
```sql
-- 查询 SC1 表中每个 (Sno, Cno) 对应的记录数
SELECT Sno, Cno, COUNT(*) FROM sc1 GROUP BY Sno, Cno HAVING COUNT(*) > 1;
```
如果查询结果为空,则说明实体完整性验证通过。