用sql1. 创建下列关系表:(6)TEACHER表(教师表) 字段说明: 字段名 字段说明 字段类型 是否允许为空 T_NO 教师编号 字符串 否 T_NAME 教师姓名 字符串 否 T_SEX 性别 字符串 否 S_BIRTHDAY 出生日期 日期 是 TECH_TITLE 职称 字符串 否 AGE 年龄 整数 是 SALARY 薪水 小数 是 主键:T_NO (7)TEACHING表(教师授课表) 字段说明: 字段名 字段说明 字段类型 是否允许为空 T_NO 教师编号 字符串 否 COURSE_NO 所带课程编号 字符串 否 主键:(T_NO,COURSE_NO)
时间: 2024-04-22 13:22:44 浏览: 125
好的,以下是创建TEACHER表和TEACHING表的SQL语句:
CREATE TABLE TEACHER (
T_NO VARCHAR(20) NOT NULL PRIMARY KEY,
T_NAME VARCHAR(50) NOT NULL,
T_SEX VARCHAR(10) NOT NULL,
S_BIRTHDAY DATE,
TECH_TITLE VARCHAR(50) NOT NULL,
AGE INT,
SALARY DECIMAL(10,2)
);
CREATE TABLE TEACHING (
T_NO VARCHAR(20) NOT NULL,
COURSE_NO VARCHAR(20) NOT NULL,
PRIMARY KEY (T_NO, COURSE_NO),
FOREIGN KEY (T_NO) REFERENCES TEACHER(T_NO),
FOREIGN KEY (COURSE_NO) REFERENCES COURSE(COURSE_NO)
);
注意,这里指定了T_NO为TEACHER表的主键,不允许出现重复的值。同时,所有字段都不允许为空,除了S_BIRTHDAY、AGE和SALARY。S_BIRTHDAY为日期类型,AGE为整数类型,SALARY为小数类型。TEACHING表中,主键为(T_NO, COURSE_NO),表示一个教师可以授课多门课程,同时一个课程可以由多个教师授课。通过FOREIGN KEY约束,将TEACHING表与TEACHER表和COURSE表进行关联。
相关问题
按附件(数据字典)说明在你创建的数据库下创建四个表格: t_student(学生表)、t_course(课程表)、t_scores(选课成绩表)、t_class(班级表)。学生信息表( t_student) 字段名 名称 数据类型 空 备注 SNo 学号 Char(20) N 主键 Sname 姓名 varchar(50) N Sex 性别 Char(2) Y class_name 班级名 Char(2) Y 2.课程表 课程表( t_course) 字段名 名称 数据类型 空 备注 CNo 课程编号 Char(10) N 主键 Cname 课程名称 varchar(50) N Credit 学分 Int Y 3.选课表 选课成绩表(scores) 字段名 名称 数据类型 空 备注 SNo 学号 Char(20) N 主键 CNo 课程号 Char(10) N 主键 grade 成绩 Int Y 4.班级表 班级表(t_class) 字段名 名称 数据类型 空 备注 class_name 部门编号 Char(2) N 主键 department 部门名称 varChar(50) N teacher 教师 varChar(20) classroom 教室 varChar(30)
根据数据字典,可以使用以下 SQL 语句在创建的数据库中创建四个表:
```sql
-- 创建学生表
CREATE TABLE t_student (
SNo CHAR(20) NOT NULL PRIMARY KEY COMMENT '学号',
Sname VARCHAR(50) NOT NULL COMMENT '姓名',
Sex CHAR(2) COMMENT '性别',
class_name CHAR(2) COMMENT '班级名',
FOREIGN KEY (class_name) REFERENCES t_class(class_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 创建课程表
CREATE TABLE t_course (
CNo CHAR(10) NOT NULL PRIMARY KEY COMMENT '课程编号',
Cname VARCHAR(50) NOT NULL COMMENT '课程名称',
Credit INT COMMENT '学分'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 创建选课成绩表
CREATE TABLE t_scores (
SNo CHAR(20) NOT NULL COMMENT '学号',
CNo CHAR(10) NOT NULL COMMENT '课程号',
grade INT COMMENT '成绩',
PRIMARY KEY (SNo, CNo),
FOREIGN KEY (SNo) REFERENCES t_student(SNo),
FOREIGN KEY (CNo) REFERENCES t_course(CNo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 创建班级表
CREATE TABLE t_class (
class_name CHAR(2) NOT NULL PRIMARY KEY COMMENT '部门编号',
department VARCHAR(50) NOT NULL COMMENT '部门名称',
teacher VARCHAR(20) COMMENT '教师',
classroom VARCHAR(30) COMMENT '教室'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
```
说明:
1. 表名和列名都采用了英文名称,符合要求。
2. 每个表都设置了主键,符合要求。
3. 学生表中的 sex 字段和选课成绩表中的 grade 字段都设置了数据类型,符合要求。
4. 学生表的 class_name 字段和选课成绩表的 SNo 和 CNo 字段都设置了外键约束,参照了班级表的 class_name 字段和课程表的 CNo 字段,符合要求。
5. 课程表添加了 Credit 字段,符合要求。
6. 班级表中的 teacher 和 classroom 字段都没有设置为 NOT NULL,因为数据字典中没有要求,但是仍然按照规范进行了定义。
2.创建一个更新触发器trigTno,该触发器防止用户修改表Teacher中的工号,若修改了提示错误信息“不能修改工号”,并回浪事务。 3.在教师表的教师名字段上建立非聚索引DX _Tname. 4.创建一个规则rulel: 变量@xb的取值范围是(,男,女),并将该规则绑定到 教师表(teacher) 的性别(tsex) 列上(绑定规则的存储过程是sp_ bindrule)。 5. 使用T-sQL语句建一 -个视图teacherview,定义为所有任课老师的工号和姓名
2. 以下是创建更新触发器trigTno的Transact-SQL语句,实现防止用户修改表Teacher中的工号:
```
CREATE TRIGGER trigTno
ON Teacher
INSTEAD OF UPDATE
AS
BEGIN
IF EXISTS (SELECT * FROM inserted WHERE TNo <> deleted.TNo)
BEGIN
RAISERROR('不能修改工号', 16, 1)
ROLLBACK TRANSACTION
RETURN
END
UPDATE Teacher
SET TName = inserted.TName,
FNo = inserted.FNo,
Tsex = inserted.Tsex
FROM Teacher
INNER JOIN inserted ON Teacher.TNo = inserted.TNo
END
```
触发器trigTno是一个INSTEAD OF UPDATE类型的触发器,当用户尝试修改表Teacher中的工号时,如果新工号和原工号不相同时,触发器会抛出一个"不能修改工号"的错误,并回滚事务,阻止修改操作。
3. 以下是创建非聚集索引DX_Tname的Transact-SQL语句,将其应用于教师表的教师名字段上:
```
CREATE NONCLUSTERED INDEX DX_Tname
ON Teacher(TName)
```
这条语句创建了一个名为DX_Tname的非聚集索引,将其应用于Teacher表的TName字段上,可以加快该字段上的查询速度。
4. 以下是创建规则rule1,并将其绑定到教师表的Tsex列上:
```
CREATE RULE rule1
AS
@xb IN ('', '男', '女')
EXEC sp_bindrule 'rule1', 'teacher.Tsex'
```
这条语句首先创建了一个名为rule1的规则,规定变量@xb的取值范围为(空字符串),"男"和"女"。然后,使用sp_bindrule存储过程将该规则绑定到Teacher表的Tsex列上。
5. 以下是创建视图teacherview的Transact-SQL语句,用于显示所有任课老师的工号和姓名:
```
CREATE VIEW teacherview
AS
SELECT DISTINCT TNo, TName
FROM Lesson
JOIN Teacher ON Lesson.TNo = Teacher.TNo
```
这条语句创建了一个名为teacherview的视图,使用了Lesson和Teacher表的JOIN操作,查询出所有任课老师的工号和姓名,去除重复的记录后返回结果。
阅读全文