實驗課程名稱:資料庫系統概論

matthew_leung發表於2018-11-06

 

廣東東軟學院

學生實驗報告

 

實驗課程名稱:資料庫系統概論

實驗專案名稱:資料庫的建立和管理

實驗型別:綜合性

指導教師:

 

實驗日期:  年  月  日

學生姓名

 

學   號

 

班  級

 

專業名稱

 

實驗組

其他成員

 

實驗地點

 

實驗成績

(教師簽名)

 

 

 

 

 

 

一、實驗目的與要求

1.熟悉SQL Sever2008的圖形介面工作環境;

2.理解幾個主要系統資料庫;

3.掌握分別利用SQL Sever Management Studio和Transact-SQL語句建立資料庫的方法;

4.理解資料庫檔案和檔案組,掌握檔案和檔案組的兩種增加、刪除、修改檔案和檔案組的方法。

5.掌握分別用SQL Sever Management Studio和Transact-SQL語句兩種方式修改資料庫,包括(刪除資料庫,分離資料庫,附加資料庫等)

6.掌握使用SQL Sever Management Studio和T-SQL語言建立表、修改表已經刪除表。

7.掌握建立、刪除和修改約束的方法。

8.瞭解如何讓檢視錶的定義、資料的依賴關係。

 

二、實驗原理

1.資料庫的組織結構

1)邏輯儲存結構

SQL Sever資料庫由一個表集合組成。這些表包含結構化的資料以及為支援對資料的操作額保證資料的完整性而定義的其他物件,如檢視、索引、儲存過程、使用者定義函式和觸發器等,它們夠成了資料庫的邏輯儲存結構,如圖1-1所示。

2)物理儲存結構

資料庫的物理儲存結構是說明包含資料庫物件的資料庫檔案是如何在磁碟上儲存的。建立資料庫實際上就是在硬碟上建立資料庫檔案的過程,資料庫檔案是存放資料庫資料和資料庫物件的檔案。

在SQL Sever資料庫中存在主要資料檔案、次要資料檔案和事務日誌3種資料庫檔案。主要資料檔案(簡稱主檔案)包含資料庫的啟動資訊並用於儲存資料,副檔名為.mdf。每個資料庫必須且只有一個主檔案,該檔案存放兩種物件,即使用者物件和系統物件。使用者物件包含表、檢視及儲存過程等,用於儲存使用者輸入的資料;系統物件有表名、資料庫使用者帳號、索引地址等維護資料庫工作所需要的資訊。系統表應該儲存在主檔案中,而使用者資料可移動到次要資料檔案中。

次要資料檔案主要儲存使用者資料,檔案的副檔名為.ndf。如果主檔案包含了資料庫中所有資料,則可以不要次要檔案,但如果資料庫非常大(如超出了單個windows檔案的最大值),就應該有多個次要資料檔案來輔助存放使用者資料,但不能存放系統物件。使用次要資料檔案可以讓資料庫檔案不斷得到擴充,並可以通過將不同的檔案存放到不同的磁碟空間中實現同時對多個磁碟進行訪問,從而提高資料儲存的併發性。

圖1-1

SQL Sever主要通過事務日誌檔案來實現資料的恢復,副檔名為.ldf。資料庫必須至少包含一個事務日誌檔案,每個日誌檔案僅能被一個資料庫所擁有,資料和日誌資訊不應混在一起。

3)資料庫檔案組

為了方便資料的分配、放置和管理,SQL Sever允許對檔案進行分組處理,在同一個組中的檔案共同組成一個檔案組。例如,可以分別在三個硬碟驅動器上建立三個資料檔案Data1.ndf、Data2.ndf和Data3.ndf,並將它們指派到檔案組Filegroup中,然後在Filegroup上建立一個表,這樣對錶中資料的查詢將分散到三個磁碟上,從而查詢效能得到改善。此外,將維護要求相近的表和索引分配到相同的檔案組中,備份時僅備份檔案組,而非資料龐大的整個資料庫,能提高系統的可維護性。再有,對於不允許修改的表(如歷史資料),可以將它們置於檔案組中(主檔案除外)然後將這些檔案組標記為只讀,從而起到保護資料的目的。

檔案和檔案組的設計遵循如下規則:一個檔案或檔案組不能由多個資料庫使用;一個檔案只能是一個檔案組的成員;事務日誌檔案不能屬於任何檔案組。

2.資料庫的分離和附加

資料庫的分離和附加是一對互逆的操作。分離資料庫是指將資料庫從SQL Sever例項中刪除,即從資料庫的邏輯結構中刪除,但並不會將其物理檔案(資料檔案和日誌檔案)從磁碟上刪除,之後,就可以使用這些檔案將資料庫附加到任何SQL Sever例項,包括分離該資料庫的伺服器。當需要將資料庫物理檔案從當前位置移到另一磁碟或儲存路徑下時,可先分離再附加資料庫。通常,附加資料庫時會將資料庫重置為它分離或複製時的狀態。

在進行資料庫分離操作時,要注意以下幾點:

(1)不能對資料庫物件進行更新操作和執行任務,使用者也不能連線在該資料庫上。

(2)在移動資料庫之前,最好為資料庫做一個完整的備份。

(3)確保資料庫要移動的目標位置及將來資料增長能有足夠的空間。

三、實驗原理

1.資料庫的建立

包括主要資料檔案,邏輯檔名,物理檔名,次要資料檔案,日誌檔案,檔案組等。

2.資料庫的管理

1)修改資料庫(擴充套件、收縮,分離,附加,移動,複製等)

2)修改資料庫屬性(新增資料檔案或日誌檔案,新增檔案組,刪除檔案和檔案組,修改某個檔案屬性,重新命名檔案,重新命名資料庫等)

 

四、實驗裝置與軟體環境

1.Windows XP Professional SP3/Windows7

2.SQL Server 2008

 

五、實驗步驟

1.使用SQL Sever Management Studio建立資料庫,具體要求如下

1)資料庫名稱為Test1。

2)主要資料檔案:邏輯檔名為Test1Data1,物理檔名為Test1Data1.mdf,初始容量為5MB,最大容量為10MB,增量為1MB。

3)次要資料檔案:邏輯檔名為Test1Data2,物理檔名為Test1Data2.ndf, 初始容量為3MB,最大容量為20MB,增量為2MB。

4)事務日誌檔案:邏輯檔名為Test1Log1,物理檔名為Test1Log1.ldf,初始容量為1MB,最大容量為5MB,增量為1MB。

 

 

 

 

 

 

 

 

 

2.使用Transact-SQL語句建立資料庫,具體要求如下:

1)資料庫名稱為Test2。

2)  主要資料檔案:邏輯檔名為Test2Data1,物理檔名為Test2Data1.mdf,初始容量為5MB,最大容量為10MB,增量為10%。

3)  次要資料檔案:邏輯檔名為Test2Data2,物理檔名為Test2Data2.ndf, 初始容量為3MB,最大容量為20MB,增量為2MB。

4)  事務日誌檔案:邏輯檔名為Test2Log1,物理檔名為Test2Log1.ldf,初始容量為1MB,最大容量為5MB,增量為1MB。

 

 

 

 

 

 

 

 

 

3.使用Transact-SQL語句建立資料庫Test3,具體要求如下:

1)該資料庫名稱為Test3

2)包含兩個檔案組:PRIMARY和Test3_group1

3)三個資料檔案:主檔案Test3_data1,Test3_data2放在PRIMARY檔案組中,Test_data3放在Test3_group1檔案組中。

4)一個日誌檔案:Test3_log

5)各檔案的初始容量、最大容量、增量可任意設定。

 

 

 

 

 

 

 

 

4.使用Transact-SQL語句修改資料庫屬性,具體要求如下:

1)向3中建立的Test3資料庫增加一個新的檔案組,名稱為Test3_group2

2)向檔案組Test3_group2中新增檔案Test3_data4。

3)刪除檔案Test3_data4。

4)刪除剛新增的檔案組Test3_group2

5)修改Test3資料庫中主要資料檔案Test3_data1的屬性,初始容量為2MB,最大容量為20MB,增幅為1MB;修改日誌檔案的屬性,初始容量為2MB,最大容量為50MB,增幅為1MB.

6)修改Test3資料庫的名稱為new_Test3。

 

 

 

 

 

 

 

 

 

 

 

 

5.分別使用dbcc shrinkdatabasedbcc shrinkfile對資料庫Test2進行壓縮。

 

 

 

 

 

 

 

 

 

 

 

 

6.分別採用SQL Sever Management StudioT-SQL語言刪除資料庫Test1.

 

 

 

 

 

 

 

 

 

 

 

 

7.建立表,並建立相應的約束。

要求:在學生管理資料庫XSGL中建立如下三個表:建立名為Student(學生資訊)的表,表中的各列要求如下:

欄位名稱

欄位型別

約束

說明

Sno

Int

主鍵

 

學生學號

Sname

Nchar(8)

 

學生姓名,不能空

Sex

Char(2)

 

性別,預設為男,只能輸入男或女

Birthday

Datetime

 

出生日期,不能為空

Age

smallint

 

當前時間-birthday

Sdept

Char(20)

 

系部

建立名為Course(課程資訊)的表,表中的各列要求如下:

欄位名稱

欄位型別

約束

說明

Cno

char(10)

主鍵

課程代號

Cname

Varchar(40)

唯一性

課程名

Credit

smallint

 

學分,取值0-10之間

Cteacher

Char(10)

 

教師

建立名為SC(選課成績)表,表中的各列要求如下:

欄位名稱

欄位型別

約束

說明

Sno

Int

主鍵、外來鍵(參考Student中的Sno)

學號

Cno

Char(10)

主鍵、外來鍵(參考Cource中的Cno)

課程號

Grade

Smallint

可以為空

成績,0—100之間

兩種方法SQL Sever Management Studio和T-SQL語言建立表、修改表以及刪除表。

 

 

 

8、增加、修改和刪除欄位,要求:

1)給Student表中增加一個memo欄位,型別為varchar(200)

2)將memo欄位的型別改為nvarchar(250)

3)刪除memo欄位。

4)修改表Cource的名稱為CourceInfo

 

 

 

實驗過程與結果(可貼圖)

要求:寫出實驗的具體流程和實驗的結果,需要分點說明,相應的地方需要截圖說明。

1.使用SQL Sever Management Studio建立資料庫,具體要求如下

1)資料庫名稱為Test1。

2)主要資料檔案:邏輯檔名為Test1Data1,物理檔名為Test1Data1.mdf,初始容量為5MB,最大容量為10MB,增量為1MB。

3)次要資料檔案:邏輯檔名為Test1Data2,物理檔名為Test1Data2.ndf, 初始容量為3MB,最大容量為20MB,增量為2MB。

4)事務日誌檔案:邏輯檔名為Test1Log1,物理檔名為Test1Log1.ldf,初始容量為1MB,最大容量為5MB,增量為1MB。

CREATE DATABASE Test1

ON PRIMARY (

    NAME = TestData1,

    filename = 'D:\Test1Data1.mdf',

    size = 5,

    filegrowth = 1,

    maxsize = 10

    ),filegroup

    Test1Data2 (

        NAME = Test1Data2,

        filename = 'D:\Test1Data2.ndf',

        size = 3,

        filegrowth = 2,

        maxsize = 20 ) log

             ON (

                 NAME = Test1Log1,

                 filename = 'D:\Test1Log1.ldf',

                 size = 1,

                 maxsize = 5,

                 filegrowth = 1

                 );

2.使用Transact-SQL語句建立資料庫,具體要求如下:

1)資料庫名稱為Test2。

2)  主要資料檔案:邏輯檔名為Test2Data1,物理檔名為Test2Data1.mdf,初始容量為5MB,最大容量為10MB,增量為10%。

3)  次要資料檔案:邏輯檔名為Test2Data2,物理檔名為Test2Data2.ndf, 初始容量為3MB,最大容量為20MB,增量為2MB。

4)  事務日誌檔案:邏輯檔名為Test2Log1,物理檔名為Test2Log1.ldf,初始容量為1MB,最大容量為5MB,增量為1MB。

create database Test2

    on primary (

    name = TestData1,

    filename = 'D:\Test2Data1.mdf',

    size = 5,

    maxsize = 10,

    filegrowth = 10% ), filegroup

    Test2Data2 (

        name = Test2Data2,

        filename = 'D:\Test2Data2.ndf',

        size = 3,

        maxsize = 20,

        filegrowth = 2) log on (

             name = Test2Log1,

             filename = 'D:\Test2Log1.ldf',

             size = 1,

             maxsize = 5,

         filegrowth = 1);

3.使用Transact-SQL語句建立資料庫Test3,具體要求如下:

1)該資料庫名稱為Test3

2)包含兩個檔案組:PRIMARY和Test3_group1

3)三個資料檔案:主檔案Test3_data1,Test3_data2放在PRIMARY檔案組中,Test_data3放在Test3_group1檔案組中。

4)一個日誌檔案:Test3_log

5)各檔案的初始容量、最大容量、增量可任意設定。

create database Test3

    on primary (

    name = Test3_Data1,

    filename = 'D:\Test3Data1.mdf',

    size = 1,

    filegrowth = 1,

    maxsize=unlimited),

         (

             name = Test3_Data2,

             size = 1,

             filename = 'D:\Test3Data2.ndf',

             maxsize = unlimited,

             filegrowth = 2),

        filegroup Test3_group1(

             name = Test_data3,

             size = 5,

             filename = 'D:\Test3Data3.ndf',

             maxsize = unlimited,

             filegrowth = 3

             ) log on (

             name = Test3_log,

             size = 1,

             filename = 'D:\Test3Log.lfg',

             filegrowth = 1,

         maxsize = 5);

4.使用Transact-SQL語句修改資料庫屬性,具體要求如下:

1)向3中建立的Test3資料庫增加一個新的檔案組,名稱為Test3_group2

2)向檔案組Test3_group2中新增檔案Test3_data4。

3)刪除檔案Test3_data4。

4)刪除剛新增的檔案組Test3_group2

 

 

 

 

 

 

 

 

 

 

5)修改Test3資料庫中主要資料檔案Test3_data1的屬性,初始容量為2MB,最大容量為20MB,增幅為1MB;修改日誌檔案的屬性,初始容量為2MB,最大容量為50MB,增幅為1MB.

 

 

6)修改Test3資料庫的名稱為new_Test3。

 

 

 

 

5.分別使用dbcc shrinkdatabasedbcc shrinkfile對資料庫Test2進行壓縮。

6.分別採用SQL Sever Management StudioT-SQL語言刪除資料庫Test1.

 

 

 

 

建立表,並建立相應的約束。在學生管理資料庫XSGL中建立如下三個表:建立名為Student(學生資訊)的表,建立名為Course(課程資訊)的表, 建立名為SC(選課成績)表,實現截圖如下:

create table Cource(

    Cno Char(10) primary key,

    Cname Varchar(40) unique,

    Credit smallint check(Credit >= 0 and Credit <=10),

    Cteacher Char(10)

    );

create table SC(

    Sno int foreign key references Student(Sno),

    Cno Char(10) foreign key references Cource(Cno),

    Grade Smallint check(Grade>=0 and Grade<=100)

);

 

create table Student(

    Sno int primary key, --學生學號

    Sname Nchar(8) not null,--學生姓名

    Sex Char(2) default '男' check(Sex = '男' or Sex = '女'),

    Birthday DateTime not null,--出生日期

    Age smallint,--當前時間-birthday

    Sdept Char(10)--教師

);

 

 

5. 增加、修改和刪除欄位.

1)給Student表中增加一個memo欄位,型別為varchar(200)

2)將memo欄位的型別改為nvarchar(250)

3)刪除memo欄位。

4)修改表Cource的名稱為CourceInfo

5)實現截圖如下:

 

 

--1)給Student表中增加一個memo欄位,型別為varchar(200)

alter table Student add memo varchar(200);

--2)將memo欄位的型別改為nvarchar(250)

alter table Student alter column memo nvarchar(200);

--3)刪除memo欄位。

alter table Student drop column memo;

--4)修改表Cource的名稱為CourceInfo

EXEC sp_rename 'Cource','CourceInfo';

   

操作異常問題與解決方案

 

  1. 在建立檔案組時無法建立,後來百度解決.
  2. 新增檔案指向指定檔案組和日誌檔案總是報錯,直到後來百度看到過類似實列解決此問題.
  3. 壓縮資料庫不懂的shrinkdatabase,百度解決此問題

 

 

實驗總結

在這次實驗資料庫的建立和管理中,我更加深刻理解SQL SERVER的使用,對資料庫建立,刪除,修改約束的方法,比如給Student的Sno新增外來鍵的方法:Sno int foreign key references Student(Sno), 建立檔案組的方法: Alter database Text3 add filegroup[PRIMARY].本次實驗主要了解到了倆點:1.資料庫的組織結構(包括資料庫的組織結構分為邏輯儲存結構,物理儲存結構以及資料庫檔案組)2.資料庫的分離和附加,資料庫的分離和附加是一對互逆的操作,在進行資料庫的分離時要注意三點,(1).不能對資料庫物件進行更新操作和執行任務,使用者也不能連線在該資料庫上。(2).在移動資料庫之前,最好為資料庫做一個完整的備份。(3).確保資料庫要移動的目標位置及將來資料增長能有足夠的空間。

在這次實驗遇到最大的問題就是在建立資料庫Text3裡,在這過程中建立的檔案組以及向指定檔案組裡新增指定檔案,新增檔案組可以實現,但是新增指定檔案不懂語句怎麼新增,網上找了一些實列但是新增過程也總是不理想,最後分類一個個來新增實現就可以了.最後實現三個表,表與表之間的關係,這個可以解決,只要理清那個表是主關鍵表,新增外來鍵直接foreign key references, 在這次實驗我更加了解到資料庫的知識點以及程式相關知識,給我帶來了豐富的體驗,同時也看到了自己的不足之處,只有更加了解自己方可取勝!

 

 

 

其他要求:

  1. 格式:實驗報告正文部分的小標題為宋體小四加粗;正文為宋體小四,不用加粗,行距為20磅。
  2. 所提交的報告要刪除本模板中紅色字部分的說明。
/*1.使用SQL Sever Management Studio建立資料庫,具體要求如下:
1)資料庫名稱為Test1。
2)主要資料檔案:邏輯檔名為Test1Data1,物理檔名為Test1Data1.mdf,初始容量為5MB,最大容量為10MB,增量為1MB。
3)次要資料檔案:邏輯檔名為Test1Data2,物理檔名為Test1Data2.ndf, 初始容量為3MB,最大容量為20MB,增量為2MB。
4)事務日誌檔案:邏輯檔名為Test1Log1,物理檔名為Test1Log1.ldf,初始容量為1MB,最大容量為5MB,增量為1MB。
*/
CREATE DATABASE Test1 
ON PRIMARY ( 
	NAME = TestData1, 
	filename = 'D:\Test1Data1.mdf', 
	size = 5, 
	filegrowth = 1, 
	maxsize = 10 
	),filegroup 
	Test1Data2 ( 
		NAME = Test1Data2, 
		filename = 'D:\Test1Data2.ndf', 
		size = 3, 
		filegrowth = 2, 
		maxsize = 20 ) log 
			ON ( 
				NAME = Test1Log1, 
				filename = 'D:\Test1Log1.ldf', 
				size = 1, 
				maxsize = 5, 
				filegrowth = 1 
					);


/*2.使用Transact-SQL語句建立資料庫,具體要求如下:
1)資料庫名稱為Test2。
2)	主要資料檔案:邏輯檔名為Test2Data1,物理檔名為Test2Data1.mdf,
初始容量為5MB,最大容量為10MB,增量為10%。
3)	次要資料檔案:邏輯檔名為Test2Data2,物理檔名為Test2Data2.ndf, 
初始容量為3MB,最大容量為20MB,增量為2MB。
4)	事務日誌檔案:邏輯檔名為Test2Log1,物理檔名為Test2Log1.ldf,
初始容量為1MB,最大容量為5MB,增量為1MB。
*/
create database Test2
	on primary (
	name = TestData1,
	filename = 'D:\Test2Data1.mdf',
	size = 5,
	maxsize = 10,
	filegrowth = 10% ), filegroup 
	Test2Data2 (
		name = Test2Data2,
		filename = 'D:\Test2Data2.ndf',
		size = 3,
		maxsize = 20,
		filegrowth = 2) log on (
			name = Test2Log1,
			filename = 'D:\Test2Log1.ldf',
			size = 1,
			maxsize = 5,
			filegrowth = 1);

/*3.使用Transact-SQL語句建立資料庫Test3,具體要求如下:
1)該資料庫名稱為Test3
2)包含兩個檔案組:PRIMARY和Test3_group1
3)三個資料檔案:主檔案Test3_data1,Test3_data2放在PRIMARY檔案組中,Test_data3放在Test3_group1檔案組中。
4)一個日誌檔案:Test3_log
5)各檔案的初始容量、最大容量、增量可任意設定。
*/
create database Test3
	on primary (
	name = Test3_Data1,
	filename = 'D:\Test3Data1.mdf',
	size = 1,
	filegrowth = 1,
	maxsize=unlimited),
		 (
			name = Test3_Data2,
			size = 1,
			filename = 'D:\Test3Data2.ndf',
			maxsize = unlimited,
			filegrowth = 2),
		filegroup Test3_group1(
			name = Test_data3,
			size = 5,
			filename = 'D:\Test3Data3.ndf',
			maxsize = unlimited,
			filegrowth = 3
			) log on (
			name = Test3_log,
			size = 1,
			filename = 'D:\Test3Log.lfg',
			filegrowth = 1,
			maxsize = 5);

/*4.使用Transact-SQL語句修改資料庫屬性,具體要求如下:
1)向3中建立的Test3資料庫增加一個新的檔案組,名稱為Test3_group2
2)向檔案組Test3_group2中新增檔案Test3_data4。
3)刪除檔案Test3_data4。
4)刪除剛新增的檔案組Test3_group2
5)修改Test3資料庫中主要資料檔案Test3_data1的屬性,初始容量為2MB,
最大容量為20MB,增幅為1MB;修改日誌檔案的屬性,初始容量為2MB,
最大容量為50MB,增幅為1MB.
6)修改Test3資料庫的名稱為new_Test3。
*/
alter database Test3 add filegroup Test3_group2;

alter database Test3 add file(
	name = Test3_data4,
	filename = 'D:\Test3_data4.ndf',
	size = 1,
	maxsize = unlimited,
	filegrowth = 1
	) to filegroup Test3_group2;

alter database Test3 remove file Test3_data4;

alter database Test3 remove filegroup Test3_group2;

alter database Test3 modify file (
name = Test3_Data1,
size = 2,
maxsize = 20,
filegrowth = 1);

alter database Test3 modify file ( 
name = Test3_log,
size = 2,
maxsize = 50,
filegrowth = 1);

alter database Test3 modify name = new_Test3; 

/*5.分別使用dbcc shrinkdatabase和dbcc shrinkfile對資料庫Test2進行壓縮。*/

/*6.分別採用SQL Sever Management Studio和T-SQL語言刪除資料庫Test1.*/
drop database Test1;


create table Student(
	Sno int primary key, --學生學號
	Sname Nchar(8) not null,--學生姓名
	Sex Char(2) default '男' check(Sex = '男' or Sex = '女'),
	Birthday DateTime not null,--出生日期
	Age smallint,--當前時間-birthday
	Sdept Char(10)--教師
	);
create table Cource(
	Cno Char(10) primary key,
	Cname Varchar(40) unique,
	Credit smallint check(Credit >= 0 and Credit <=10),
	Cteacher Char(10)
	);
create table SC(
	Sno int foreign key references Student(Sno),
	Cno Char(10) foreign key references Cource(Cno),
	Grade Smallint check(Grade>=0 and Grade<=100)
	);
--1)給Student表中增加一個memo欄位,型別為varchar(200)
alter table Student add memo varchar(200);
--2)將memo欄位的型別改為nvarchar(250)
alter table Student alter column memo nvarchar(200);
--3)刪除memo欄位。
alter table Student drop column memo;
--4)修改表Cource的名稱為CourceInfo
EXEC sp_rename 'Cource','CourceInfo';

 
 
 

相關文章