SQL入门实验——使用SQL创建基本表、视图、索引

假设条件:
学校有若干个院系,每个院系由若干名教师和学生;每个教师可以担任若干门课程;每个学生可以同时选修多门课程。请设计某学校的教学管理的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;
原创文章 7 获赞 8 访问量 1167

猜你喜欢

转载自blog.csdn.net/bestlinton/article/details/105147115