假设条件:
学校有若干个院系,每个院系由若干名教师和学生;每个教师可以担任若干门课程;每个学生可以同时选修多门课程。请设计某学校的教学管理的E-R模型,要求给出每个实体、联系的属性。
根据以上语义,设计如下E-R图(属性未画出)、6个关系模式及相当的数据字典描述。
数据字典
表
表名 中文名
Department 院系
Course 课程
SC 选修
Student 学生
Teacher 教师
Teaching 担任
院系:Department
字段名 数据类型 是否可以为空 Is PK Is FK 中文名
DepID int NOT NULL Yes No 院系编号
DName varchar(20) NOT NULL No No 院系名称
Location varchar(50) NULL No No 办公地点
Leader char(8) NULL No No 系主任姓名
教师:Teacher
字段名 数据类型 是否可以为空 Is PK Is FK 中文名
TNo char(8) NOT NULL Yes No 教师编号
TName char(4) NOT NULL No No 教师姓名
Sex char(2) NULL No No 性别
Prof char(5) NULL No No 职称
Mobile char(11) NULL No No 手机号
DepID Int NOT NULL No Yes 所属院系ID
Sex只能是‘男’或‘女’
Prof只能是[‘助教’,‘讲师’,‘副高’,‘正高’]
Mobile只能是11位数字
TName具有唯一性
DepID参照Department的DepID
课程:Course
字段名 数据类型 是否可以为空 Is PK Is FK 中文名
CNo char(10) NOT NULL Yes No 课程编号
CName varchar(50) NOT NULL No No 课程名称
Grade decimal(2,1) NULL No No 学分
Term smallint NULL No No 开课学期
TNo char(8) NULL No Yes 授课教师编号
DepID int NOT NULL No Yes 开课院系编号
Grade取值范围是[1,1.5,2,2.5,3,3.5,4,4.5,5]
Term取值范围是[1,2,3,4,5,6,7,8]
TNo为外键,参照教师表中的TNo
DepID为外键,参照院系表中的DepID
学生:Student
字段名 数据类型 是否可以为空 Is PK Is FK 中文名
SNo char(10) NOT NULL Yes No 学号
SName char(8) NOT NULL No No 姓名
Sex char(2) NULL No No 性别
BirthDate smalldatetime NULL No No 出生日期
Class int NOT NULL No No 班级
Email varchar(100) NULL NO NO 邮箱
Sex只能是‘男’或‘女’
邮箱名中一定要含有‘@’符号
选课:SC
字段名 数据类型 是否可以为空 Is PK Is FK 中文名
SNo char(10) NOT NULL Yes Yes 学生学号
CNo char(10) NOT NULL Yes Yes 课程编号
SDate smalldatetime NULL No No 选课日期
Score decimal(4,1) NULL No No 考试成绩
SNo参照Student表中的SNo
CNo参照Course表中的CNo
Score取值范围[0-100],带一位小数,如80.5
担任:Teaching
字段名 数据类型 可空性 主键 外键 中文名
TNo char(8) NOT NULL Yes Yes 教师编号
CNo char(10) NOT NULL Yes Yes 课程编号
Term smallint NOT NULL Yes NO 开课学期
Num int NULL No No 选修人数
room varchar(15) NULL No No 上课地点
croom varchar(15) NULL No No 答疑地点
TNo参照Teacher的TNo
CNo参照Course的CNo
Term取值范围是[1,2,3,4,5,6,7,8]
Num不超过200
使用SQL语句(create database)创建数据库JiaoXue;
SQL语句如下:
USE master
IF (EXISTS(SELECT * FROM sysdatabases WHERE name ='JiaoXue')) --检查JiaoXue是否存在
DROP DATABASE JiaoXue --如果已经存在JiaoXue数据库,则删除JiaoXue
GO
CREATE DATABASE JiaoXue --数据库名为JiaoXue
ON PRIMARY
(
NAME = JiaoXue, --主数据文件逻辑名称
FILENAME = 'E:\Sql_Server_Workplace\JiaoXue\JiaoXueDB.mdf', --数据文件路径及物理名称
SIZE = 5MB, --初始大小
MAXSIZE = UNLIMITED, --最大尺寸
FILEGROWTH = 1MB --自动增长的增量
)
LOG ON
(
NAME = JiaoXue_log, --日志文件逻辑名称
FILENAME = 'E:\Sql_Server_Workplace\JiaoXue\JiaoXueDB_log.ldf', --日志文件路径及物理名称
SIZE = 2MB, --初始大小
MAXSIZE = 4MB, --最大尺寸
FILEGROWTH = 10% --自动增长的增量
)
创建学生表:
CREATE TABLE Student(
Sno CHAR(10) NOT NULL UNIQUE,
Sname CHAR(8) NOT NULL UNIQUE,
Ssex CHAR(2) CHECK(Ssex = '男' or Ssex = '女'),--限制男或女
BirthDate smalldatetime,
Class INT NOT NULL UNIQUE,
Email varchar(100) CHECK(Email = '_%@%_'),--必须带@
Primary key (Sno)
);
创建课程表:
CREATE TABLE Course(
CNo char(10) NOT NULL UNIQUE,
Cname varchar(50) NOT NULL UNIQUE,
Grade decimal(2,1) CHECK(Grade in (1,1.5,2,2.5,3,3.5,4,4.5,5)),
--Grade取值范围是[1,1.5,2,2.5,3,3.5,4,4.5,5]
Term smallint CHECK(Term in (1,2,3,4,5,6,7,8)),
--Term取值范围是[1,2,3,4,5,6,7,8]
TNo char(8) FOREIGN KEY(TNo) REFERENCES Teacher(TNo),
--TNo为外键,参照教师表中的TNo
DepID int NOT NULL FOREIGN KEY(DepID) REFERENCES Department(DepID),
--DepID为外键,参照院系表中的DepID
Primary key(CNo)
);
创建SC表:
CREATE TABLE SC(
SNo char(10) NOT NULL UNIQUE FOREIGN KEY(SNo) REFERENCES Student(Sno),
--SNo参照Student表中的SNo
CNo char(10) NOT NULL UNIQUE FOREIGN KEY(CNo) REFERENCES Course(CNo),
--CNo参照Course表中的CNo
SDate smalldatetime,
Score decimal(4,1) CHECK(Score between 0 and 100),
--Score取值范围[0-100],带一位小数,如80.5
Primary key(SNo,CNo),
);
创建Teaching表:
CREATE TABLE Teaching(
TNo CHAR(8) NOT NULL UNIQUE FOREIGN KEY(TNo) REFERENCES Teacher(TNo),
-- TNo参照Teacher的TNo
CNo CHAR(10) NOT NULL UNIQUE FOREIGN KEY(CNo) REFERENCES Course(CNo),
-- CNo参照Course的CNo
Term smallint NOT NULL CHECK(Term in (1,2,3,4,5,6,7,8)),
-- Term取值范围是[1,2,3,4,5,6,7,8]
Num int CHECK(Num >= 0 and Num <= 200),
-- Num不超过200
room varchar(15),
croom varchar(15),
Primary key (TNo,CNo,Term),
);
使用SQL语句先将Teaching表的Num属性改为smallint类型,然后再删除Croom属性;
SQL语句如下:
ALTER TABLE Teaching DROP CONSTRAINT Num
ALTER TABLE Teaching ALTER COLUMN Num smallint
ALTER TABLE Teaching
ADD Constraint CK_Teaching_Num CHECK(Num <= 200 and Num >= 0)
--修改过程中需要删除限制条件,所以需要重新条件限制条件
删除的Sql语句:
ALTER TABLE Teaching DROP COLUMN croom
用SQL语句删除Teaching表的定义。
DROP TABLE dbo.Teaching;