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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章