數據庫實驗二
使用商用數據庫 SQL Server 或 MySQL 實現教務系統的數據庫設計
實驗要求:
-
學習使用商用數據庫SQL Server 或MySQL
-
基于實驗一的概念模型和邏輯結構,實現數據庫分析設計
-
理解和掌握關系數據庫存取技術,關系數據操作,完整性約束機制
實驗內容:
- 創建教務系統各數據庫表,包括:Student, Course, SC等。設置主鍵和外鍵,以及用戶定義的完整性約束條件。
- 輸入數據,體驗實體完整性,參照完整性,以及用戶定義的完整性約束。
- 簡單的數據瀏覽,數據增刪改。
實驗過程:
1. 安裝 SQL Server 2016
2. 安裝Microsoft SQL Server Management Studio (SSMS)

3. 創建數據庫和表
選擇數據庫,右鍵新建查詢,輸入下面語句:
CREATE TABLE Department --系表
(
Dno CHAR(20) PRIMARY KEY,
Dname CHAR(20) UNIQUE,
Dean CHAR(10),
Classnum INT,
Crnum INT,
Adderss CHAR(20)
);
CREATE TABLE Classroom --教研室表
(
Crno CHAR(20) PRIMARY KEY,
Crname CHAR(10) UNIQUE,
Dno CHAR(20),
Adderss CHAR(20),
FOREIGN KEY (Dno) REFERENCES Department (Dno)
);
CREATE TABLE Class --班級表
(
Classno CHAR(20) PRIMARY KEY,
Classname CHAR(10) UNIQUE,
Dno CHAR(20),
Stunum INT,
FOREIGN KEY (Dno) REFERENCES Department (Dno)
);
CREATE TABLE Teacher --教員表
(
Tno CHAR(10) PRIMARY KEY,
Tname CHAR(10) UNIQUE,
Title CHAR(10),
TSex CHAR(4),
Crno CHAR(20),
FOREIGN KEY (Crno) REFERENCES Classroom (Crno)
);
CREATE TABLE Student --學生表
(
Sno CHAR(10) PRIMARY KEY,
Sname CHAR(10) UNIQUE,
Ssex CHAR(4),
Classno CHAR(20),
Tno CHAR(10),
FOREIGN KEY (Classno) REFERENCES Class (Classno),
FOREIGN KEY (Tno) REFERENCES Teacher (Tno)
);
CREATE TABLE Course --課程表
(
Cno CHAR(10) PRIMARY KEY,
Cname CHAR(20) UNIQUE,
Credit INT,
Chour INT
);
CREATE TABLE SC --選修表???
(
Sno CHAR(10),
Cno CHAR(10),
Mark INT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student (Sno),
FOREIGN KEY (Cno) REFERENCES Course (Cno)
);

4. 直接使用SSMS編輯各表數據
選中某一表,右鍵選擇編輯前200行

系表:

班級表:

教研室表:

學生表:

選修表:

課程表:

5. 導出數據庫數據字典
選擇數據庫,右鍵新建查詢,語句如下:
SELECT
(case when a.colorder=1 then d.name else '' end)表名,
a. colorder 字段序號,
a.name 字段名,
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 標識,
(case when (SELECT count(*)
FROM sysobjects
WHERE (name in
(SELECT name
FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid
FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid
FROM syscolumns
WHERE (id = a.id) AND (name = a.name))))))) AND
(xtype = 'PK'))>0 then '√' else '' end) 主鍵,
b.name 類型,
a.length 占用字節數,
COLUMNPROPERTY(a.id,a.name,'PRECISION') as 長度,
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小數位數,
(case when a.isnullable=1 then '√'else '' end) 允許空,
isnull(e.text,'') 默認值,
isnull(g.[value],'') AS 字段說明
FROM syscolumns a left join systypes b
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sys.extended_properties g
on a.id=g.major_id AND a.colid = g.major_id
order by a.id,a.colorder
得到結果:

數據關系圖如圖所示:

6. SQL語句編輯數據:
- 添加:
INSERT INTO Department values ('D4','張建','海技系','14','12','松嶺路')

新增了一條記錄:

- 刪除:
DELETE FROM SC WHERE Sno = 'S1'

此處記錄(‘S1’,’C1’,’79’)被刪除

- 修改:
UPDATE Student set Ssex = '男' WHERE Sno = 'S1'

Sno為S1的記錄性別修改為了‘男’

心得總結:
剛開始在使用SSMS編輯數據的時候,總忘記各表中的關系,學生表還沒定義就編輯選修表,報了不少次錯;由此看來,整體設計很重要,像編程之前的流程圖一樣,在建立各表之前也應該事先理清楚這些表之間的關系,這樣數據庫的思路更清晰。
經過這次實驗,感覺SQL語句確實非常方便,而且操作很簡單,很好上手,效率也比較高。
浙公網安備 33010602011771號