17-Access 資料庫簡介

Download Report

Transcript 17-Access 資料庫簡介

第十七章
Access 資料庫簡介
張智星
[email protected]
http://mirlab.org/jang
台大資工系 MIR實驗室
JavaScript 程式設計與應用:用於伺服器端的ASP環境
本章大綱

大綱


本 章介紹 MS Access 資料庫的建立及查詢,並說明關聯
性資料表的操作及特性,以及如何使用 GUI 介面來產生
查詢資料庫所用的 SQL 指令。後續我們若要在 ASP 網頁
和資料庫進行溝通,都必須瞭解資料庫的特性以及 SQL
指令,所以對於「網頁與資料庫整合」而言,這一章是很
重要的入門基礎。
主題




17-1:資料庫簡介
17-2:資料庫查詢:單一資料表
17-3:資料庫查詢:關聯性資料表
17-4:關聯對資料處理的影響
2/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
17-1:資料庫簡介

本小節介紹MS Access的基本觀念與使用。
3/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
資料庫概念



資料庫(Databases):由數個資料表
(Tables)所形成的集合。
資料表:由數筆記錄(Record)所成的集合。
每筆記錄都包含數個不同的欄位(Fields)。
4/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
資料表格式 (1)
5/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
資料表格式 (2)

說明





資料表中,每一個橫列稱為一筆記錄。
每一個直行稱為欄位,每一筆記錄在某個特定欄位的值稱
為「欄位值」。
上列資料表,是以序號來進行排序顯示,但在資料庫的內
部儲存方式中,並不會有特定的排序。
從資料表中抓出資料,欄位的順序是根據欄位創造日期的
先後,而記錄的順序是根據「主索引」(Primary Key)
的欄位來進行排序,每個資料表可以選定一個欄位來做為
主索引,而且主索引欄位的欄位值是不能重覆的。
上述歌曲資料表中,主索引可以是序號,這是對每一首歌
獨一無二的數值,可以用來代表某一首特定的歌曲。
6/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
開啟資料表

我們點選 song 的資料表,就可以開啟此表。 資料庫:song01.mdb
7/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
檢視資料表 (1)
8/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
檢視資料表 (2)

說明



資料表中,可以看到 11 筆記錄,每筆記錄有 4
個欄位。
欄位名稱分別是「序號」、「歌曲名稱」、「主
唱者」、「年份」。
每個欄位都有特定的資料型態,這些資料型態可
以由資料表的「設計檢視」來開啟。
9/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計檢視 (1)

我們先關掉資料表,再用右鍵點選 song 資料表的圖示,選擇設計檢視。
10/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計檢視 (2)
11/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計檢視 (3)

說明


開啟資料表的「設計檢視」選項後,可以看到每
個欄位的資料類型,例如「自動編號」、「文
字」、「數值」等。
後面有表列出MS Access資料類型。
12/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計檢視 (4)

點選「文字」右方的小倒三角形,就可以改變這個欄位的資料類型。
13/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
可選用的資料類型 (1)
資料類型
說明
文字
用來儲存文字資料,例如姓名、身份證字號、密碼、地址等。
最大長度只有 255 字元。
備忘
用來儲存文字資料,最大長度可達 64,000 字元,但是不支援
排序功能。
數字
儲存數值資料,又可分為位元組、整數、長整數、單精準數、
雙精準數、複製編號與小數點等 7 類。
日期/時間 儲存時間和日期的資料,可以選用不同的呈現方式。
貨幣
儲存貨幣或金額,例如售價、定金等。
此欄位值都是不重複的正整數,由資料庫自動產生,每新增一
筆記錄,資料庫就會以加 1 的方式產生此欄位值,因此不會重
自動編號 複。若有記錄被刪除,此欄位就不會形成連續的整數。通常我
們會指定使用具有此種資料類型的欄位為主索引,以便獨一無
二地指到某一筆特定的記錄。
14/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
可選用的資料類型 (2)
資料類型 說明
是/否
此資料類型只能有兩種值:「是」或「否」。可用於記錄是否
註冊、是否付款、是否過期等。
OLE 物件
存放各類形的檔案,例如圖片、聲音、動畫、Excel 試算表、
Word 文件等。
超連結
查閱精靈

存放超連結或網址。
嚴格地說,這並不是一種資料類型,而是方便輸入文字資料的
一種功能。
說明


可以使用「設計檢視」來新增或刪除欄位,然後再打開資
料表,就可以將一筆一筆的資料輸入到資料表內了。
最後別忘了要存檔,再關閉此資料庫。
15/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
17-2:資料庫查詢:單一資料表

本小節將說明如何對 Access 資料庫進行單一
資料表的查詢,特別著重在「圖形使用者介
面」(Graphic User Interface,簡稱 GUI)
的使用。
16/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計查詢 (1)

以 song01.mdb 來說明。首先開啟資料庫,同時點選「查詢」物件。
17/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計查詢 (2)

點選「使用設計檢視建立新查詢」後可得。
18/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計查詢 (3)

說明


按「新增」,就可以將資料表「song」加入目前
的查詢,然後按「關閉」。
要找「張惠妹所唱的歌曲」,可以分兩步驟:



選取相關欄位:點選上半部的「歌曲名稱」,拖放到
下半部的第一個欄位,再點選上半部的「主唱者」,
拖放到下半部的第二個欄位。
設定欄位選取準則:將「主唱者」欄位的「準則」空
格填入「張惠妹」。
結果如下頁圖示所示。
19/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計查詢 (4)
20/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
執行查詢 (1)

要執行查詢,可以直接點選工具列的驚嘆號。
21/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
執行查詢 (2)

說明



所列出來的資料就是張惠妹所唱的歌。
當你要關掉這個查詢結果時,Access 會詢問你是
否要儲存這個查詢,你可以將它直接儲存成「張
惠妹所唱的歌曲」。
下次只要你點選這個查詢,系統自然就會從資料
表中,抓出並顯示符合查詢準則的資料。
22/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
查詢方式

一個查詢可以有不同的檢視方式,例如:



設計檢視:以圖形使用者介面來進行查詢的設計 。
資料表檢視:查詢所得的資料列表 。
SQL 檢視:以文字化的 SQL(Structure Query
Language)指令來指定查詢 。
23/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
SQL檢視 (1)

顯示此查詢對應的 SQL 指令,只要在打開查詢後(使用「設計檢視」或
「資料表檢視」),點選工具列的第一個按鈕,並下拉至「SQL 檢視」。
24/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
SQL檢視 (2)
25/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
SQL檢視 (3)

說明



Access 由「設計檢視」產生 SQL 指令時,有時
候會在資料表名稱或欄位名稱加上中括弧,以避
開資料表名稱或欄位名稱中,可能出現的空白或
其它特殊字元。
使用 ASP 與資料庫整合時,對資料庫的處理必須
倚賴 SQL 指令。
用「設計檢視」產生需要的查詢,再將此查詢轉
換成 SQL 指令,就可以貼到 ASP 的程式碼裡面。
26/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
資料表排序

查詢「張惠妹所唱的歌(依年代由近而遠排序)」:在查詢加入"年份"欄位
後,並點選"排序",選擇"遞減排序",並點選驚嘆號執行。
27/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
使用AND查詢資料 (1)

查詢「張惠妹在 1998 年所唱的歌」:在「年份」欄位新增準則。
28/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
使用AND查詢資料 (2)

說明

相對應的SQL指令
SELECT song.歌曲名稱, song.主唱者, song.年份
FROM song WHERE (((song.主唱者)="張惠妹")
AND ((song.年份)=1998));


"="的意義和JavaScript不同,在這邊跟JavaScript
中的"=="一樣表示"相等"意思的。
SELECT後面的“song.“可以忽略不寫。
29/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
使用OR查詢條件 (1)

考慮下列查詢:「2002年的歌曲或是由張惠妹主唱的歌曲」。
30/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
使用OR查詢條件 (2)

說明




若有數個條件必須同時成立(「且」,And),我們就要
將比對字串或數值放在「準則」的同 一列。
若這些條件只要一個成立即可(「或」,Or),我們就要
將這些條件放在「準則」以下的不同列。
以 Access 的圖形使用者介面來進行查詢,只能用於當所
有的比對條件都是「且」或都是「或」的情況,若有較複
雜的邏輯判斷式,就必須靠 SQL 指令來達成。
上述查詢中,相對應的 SQL指令
SELECT song.歌曲名稱, song.主唱者, song.年份
FROM song WHERE (((song.主唱者)="張惠妹"))
OR (((song.年份)=2002));
31/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
顯示不重複的查詢資料 (1)

查詢「歌星列表」:使用滑鼠右鍵先點選查詢視窗的下半部任意處,再
選取「合計」功能。
32/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
顯示不重複的查詢資料 (2)

查詢畫面會多一個名稱為「合計」橫列,其內容為「群組」,此功能可
將相同的紀錄先排序後,再將相同的數筆紀錄合併成一筆。
33/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
顯示不重複的查詢資料 (3)

執行查詢結果後
34/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
顯示不重複的查詢資料 (4)

說明


因為使用「群組」功能,所以上述是已經排序過
的結果。
相對應的 SQL 指令
SELECT song.主唱者 FROM song GROUP BY song.主唱者;

“GROUP BY” 就是「群組」功能,可以將欄位中
相同的數筆紀錄合併成一筆。
35/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
顯示不重複的查詢資料 (5)

說明

另一個相同效果的SQL指令
SELECT DISTINCT song.主唱者 FROM song;

此查詢可得到相同結果,但是卻無法由「設計檢
視」看到 DISTINCT 的功能,只能由「SQL檢視」
來指定。
36/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
查詢總數 (1)

查詢「歌曲總數」:在產生「合計」橫列後,將滑鼠焦點移到「群組」,
就可以顯示下拉選單的按鈕,按下後,請選擇「筆數」。
37/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
查詢總數 (2)

執行查詢後
38/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
查詢總數 (3)

說明


顯示查詢中代表資料表中共有 11 筆資料。
相對應的 SQL 指令
SELECT Count(song.歌曲名稱) AS 歌曲名稱之筆數
FROM song;


“Count()”表示計算某個欄位的資料總數。
“AS”表示自訂查詢資料表的名稱。
39/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計檢視指定不周詳 (1)

查詢「張惠妹所唱歌曲的總數」:直覺的做法是將「主唱者」的「準則」
設定成「張惠妹」,並選取「合計」的「群組」功能。
40/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計檢視指定不周詳 (2)

說明


執行查詢時,會產生「準則運算式的資料類型不
符合」的錯誤訊息。
若選用「SQL檢視」,可看到相對應的 SQL 指令
SELECT Count(song.主唱者) AS 主唱者之筆數 FROM
song HAVING (((Count(song.主唱者))="張惠妹"));

錯誤發生在最後一列的條件,因為 Count 是一個
函數,只能用來計算資料的筆數,所以我們可以
用手動改成
SELECT Count(song.主唱者) AS 主唱者之筆數 FROM
song HAVING (((song.主唱者)="張惠妹"));
41/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計檢視指定不周詳 (3)

再選用「設計檢視」,畫面事實上有點亂,而且不容易懂,這也顯示有
一些簡單的查詢可能還是用 SQL 命令最適合,若要用簡單易懂的圖形介
面來表示,反而有困難。
42/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
設計檢視指定不周詳 (4)

查詢結果
43/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
查詢群組資料的總數 (1)

查詢「每一位歌手唱過的歌曲數目」:在「主唱者」欄位選取「合計/群
組」,然後在「歌曲名稱」欄位選取「合計/筆數」。
44/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
查詢群組資料的總數 (2)

說明

選用「SQL檢視」,可看到相對應的 SQL 指令
SELECT song.主唱者, Count(song.歌曲名稱)
AS 歌曲名稱之筆數
FROM song GROUP BY song.主唱者;
45/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
查詢群組資料的總數 (3)

查詢結果
46/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
17-3:資料庫查詢:關聯性資料表

本小節介紹資料表間的查詢與關聯,產生出
更有意義的查詢。
47/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
關聯性資料表 (1)


資料庫可以包含數個資料表,不同資料表之
間的欄位可以有關聯性。
我們可以根據這些資料欄位的關聯性來使資
料庫的資料更符合實際世界的狀況,此種具
有關聯性的資料庫,即稱為關聯性資料庫
(Relational Databases)。
48/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
關聯性資料表 (2)

以 song01.mdb 內的 song 資料表來說明
49/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
關聯性資料表 (3)

說明


「主唱者」的欄位中很多資料是重複的,如果我們還要增
加和「主唱者」相關的資料, 例如「出道年份」、「身
高」、「嗜好」等,就會增加更多重覆的資料。
我們可以將和主唱者相關的資料放到另一個資料表 singer,
並指定每首歌曲所對應的歌手,這樣做的好處是:



減少資料的重複:例如「張惠妹」的資料不會出現很多次。
保持資料的一致性:「張惠妹」只有一筆資料,因此不需
要輸入「張惠妹」很多次,也比較不會出現把「張惠妹」
誤輸入成「張蕙妹」的情況。
保持資料的完整性:例如我們可以規定,沒有對應歌手的
歌曲資料,不允許登錄到 song 資料庫。
50/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
沒有關聯的查詢 (1)

我們使用一個資料較少的檔案 song02.mdb 來進行以下說明,
其中 song 和singer資料表的內容如下
song:
序號
singer:
名稱
歌手序號
年份
序號
姓名
類別
出道年份
1
用心良苦
1
1993
1
張宇
男歌手
1973
2
聽海
4
1998
4
張惠妹
女歌手
1975
8
戀人未滿
9
2002
6
蕭亞軒
女歌手
1971
9
I.O.I.O.
9
2002
9
S.H.E
女團體
1960
17
神話
0
1983
11
永邦
男歌手
1969
18
花心
0
1993
51/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
沒有關聯的查詢 (2)

說明

由上述列表可以知道,每一首歌有一個欄位是「歌手序
號」,指到 singer 資料表的「序號」欄位,就可以找到
對應的歌手資料。我們可以使用 SQL 查詢來列出歌手和
歌曲的所有可能組合,所用的 SQL 指令為:
SELECT song.名稱, singer.姓名 FROM song, singer;


SELECT中的“song.”和“singer.”不可以省略。
下頁是查詢結果,列表共有 30 筆資料,代表由第一個資
料表(6 筆資料)和第二個資料表(5 筆資料)的所有可
能組合,但是我們並沒有用到兩個資料表之間的關聯,所
以得到的結果當然不正確。
52/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
沒有關聯的查詢 (3)
名稱
姓名
名稱
姓名
名稱
姓名
用心良苦
張宇
用心良苦
蕭亞軒
用心良苦
永邦
聽海
張宇
聽海
蕭亞軒
聽海
永邦
戀人未滿
張宇
戀人未滿
蕭亞軒
戀人未滿
永邦
I.O.I.O.
張宇
I.O.I.O.
蕭亞軒
I.O.I.O.
永邦
神話
張宇
神話
蕭亞軒
神話
永邦
花心
張宇
花心
蕭亞軒
花心
永邦
用心良苦
張惠妹
用心良苦
S.H.E
聽海
張惠妹
聽海
S.H.E
戀人未滿
張惠妹
戀人未滿
S.H.E
I.O.I.O.
張惠妹
I.O.I.O.
S.H.E
神話
張惠妹
神話
S.H.E
花心
張惠妹
花心
S.H.E
53/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
關聯查詢 (1)

把有關聯性的欄位加入條件式,得到下列的 SQL 指
令(在此例是 song 資料表的「歌手序號」以及
singer 資料表的「序號」欄位)
SELECT song.名稱, singer.姓名
FROM singer, song
WHERE (song.歌手序號=singer.序號);

得到的結果
名稱
姓名
用心良苦
張宇
聽海
張惠妹
戀人未滿
S.H.E
I.O.I.O.
S.H.E
54/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
關聯查詢 (2)

對應的「設計檢視」畫面
55/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
關聯查詢 (3)

說明


上述的做法是以 where 子句來指定資料所必須具
備的特性,另一種做法則是直接在「設計檢視」
中指定資料表之間的關聯。
關聯發生於 song 資料表的「歌手序號」及
singer 資料表的「序號」。欲建立此關連,我們
可以選取 song 資料表的「歌手序號」欄位後,
拖放到 singer 資料表的「序號」欄位,就可以建
立這兩個資料表的關聯性(會產生關聯線段以連
接有關聯性的欄位),然後再加入需要查詢的欄
位名稱,如下頁圖示。
56/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
關聯查詢 (4)
57/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
關聯查詢 (5)

對應的 SQL 指令
SELECT song.序號, song.名稱, singer.姓名
FROM song INNER JOIN singer
ON song.歌手序號 = singer.序號;

得到的結果
序號
名稱
姓名
1
用心良苦
張宇
2
聽海
張惠妹
8
戀人未滿
S.H.E
9
I.O.I.O.
S.H.E
58/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
關聯查詢 (6)

說明

在上述範例中,SQL 指令使用了 INNER JOIN。
事實上,對於資料表的連接(Join),可以分成
三類:



Inner Join:只會列出來兩個資料表連接欄位的資料相
同的記錄。
Left Join:列出所有來自左資料表的記錄,以及連接欄
位相等的右資料表的記錄。
Right Join:列出所有來自右資料表的記錄,以及連接
欄位相等的左資料表的記錄。
59/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
Join的連接屬性 (1)

如果我們雙擊連接關聯性欄位的線段,就會跳出「連接屬性」
的視窗。

此視窗的預設值「僅包含兩個資料表連接欄位的資料相同的
記錄」,就是 Inner Join。
點選第 2個選項(「包括所有來自“song”的記錄和只包括那
些連接欄位相等的“singer”欄位」),就是 Left Join。

60/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
Join的連接屬性 (2)

選擇Left Join並按「確定」。
61/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
Join的連接屬性 (3)

關聯線段被加上了一個由左向右的箭頭,代表 Left
Join,相對應的 SQL 命令如下:
SELECT song.序號, song.名稱, singer.姓名
FROM song LEFT JOIN singer
ON song.歌手序號 = singer.序號;
62/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
Join的連接屬性 (4)

得到的結果代表「列出所有的歌,以及這些歌所可
能對應的歌手」。
序號
名稱
姓名
1
用心良苦
張宇
2
聽海
張惠妹
8
戀人未滿
S.H.E
9
I.O.I.O.
S.H.E
17
神話
18
花心
63/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
Join的連接屬性 (5)

點選第 3 個選項(「包括所有來自"singer"的記錄和只包括
那些連接欄位相等的"song"欄位」),就是 Right Join,對
應的 SQL 命令 SELECT song.序號, song.名稱, singer.姓名
FROM song RIGHT JOIN singer
ON song.歌手序號 = singer.序號;

得到的結果代表「列出所有的歌手,以及這些歌手可能對應
的歌」。 序號
名稱
姓名
1
用心良苦
張宇
2
聽海
張惠妹
蕭亞軒
9
I.O.I.O.
S.H.E
8
戀人未滿
S.H.E
永邦
64/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
Join的連接屬性 (6)

說明

有關於 Outer Join,說明如下:




Left Join 又稱為 Left Outer Join。
Right Join 又稱為 Right Outer Join。
Full Outer Join 就是 Left Join 和 Right Join 的聯集,
但是 Access 目前不支援。
以上的做法要在建立查詢時,才建立起資料表之
間的關聯,另一種方式是事先就建立好資料表的
關聯,這是永久性的關聯,所以在進行查詢時,
也會將此關聯包含進來。
65/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
永久性關聯 (1)

開啟「工具/資料庫關聯圖」。
66/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
永久性關聯 (2)


選取 song 資料表的「歌手序號」欄位後,拖放到 singer 資料表的「序
號」欄位,就可以建立這兩個資料表的永久關聯,此時會跳出來「編輯
關聯」的畫面。
說明



有關這個畫面的選項「強迫參考完整性」,我們會在下一節說明。
只要按下「建立」,即可建立根基於 Inner Join 的永久關聯。
也可以按下「連接類型」,來設定其他類別的 Join,如 Left Join 或
是 Right Join。
67/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
永久性關聯 (3)

此線段所連結的欄位即是互有關聯的欄位。
68/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
永久性關聯 (4)

說明


若要編輯關聯,可以雙擊此線段,即可開啟「編
輯關聯」的視窗。
一旦建立永久關聯後,在「設計檢視」模式下編
輯查詢時,只要加入相關的資料表,即可反應此
永久關聯,而不需要再自行手動加入。
69/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
17-4:關聯對資料處理的影響

本小節說明如何在 Access 資料庫設定資料庫
關聯後,進一步設定關聯對於資料的新增、
修改、刪除的影響。
70/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
強迫參考完整性 (1)

以 song03.mdb 的資料庫來說明。開啟此資料庫後,點選「工具/資料表
關聯圖」,可以看到 song 和 singer 資料表之間已經有關聯存在。
71/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
強迫參考完整性 (2)

點選關聯線段來編輯關聯,勾選「強迫參考完整性」,但不勾選「重疊
顯示更新相關欄位」和「重疊顯示刪除相關記錄」。
72/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
強迫參考完整性 (3)

此時資料庫關聯圖已被修改
73/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
強迫參考完整性 (4)

說明


其中關聯線端的兩端分別被加上「1」和「∞」,
代表這兩個欄位的關聯是「一對多」,也就是一
個歌星可以唱很多首歌,但是一首歌只能有一個
歌星來唱。
Access 是根據 song 資料表的「序號」是不可重
複的主索引,因此自動決定這個關聯是「一對多
關聯」。
74/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
強迫參考完整性 (5)

打開 singer 資料表,可以看到每筆資料都有一個「+」號,表示此資料
表是「父資料表」,不可任意刪除資料,否則將會影響到「子資料表」,
也就是 song 資料表。
75/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
強迫參考完整性 (6)

點選包含「張惠妹」的記錄的正號可以知道,「張惠妹」這筆資料和
song 資料表的三筆記錄有關聯。
76/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
強迫參考完整性 (7)

說明


要刪掉 singer 資料表中「張惠妹」的這筆資料,Access
會回覆訊息視窗。
系統不允許使用者刪除「張惠妹」此筆資料,因為若直接
刪除此筆資料,會使得 song 資料表中的三筆資料變成孤
兒,找不到對應的歌手,這就是勾選「強迫參考完整性」
的效果,會保持資料的完整性。
77/79
JavaScript 程式設計與應用:用於伺服器端的ASP環境
強迫參考完整性 (8)

說明


若我們執意要刪除父資料表中的記錄,並對於相關聯的子
資料表的記錄也希望一併刪除,那我們就 可以勾選「重
疊顯示刪除相關記錄」,此時使用者只要刪除 singer 資
料表的「張惠妹」這筆資料,系統即會一併刪除 song 資
料表中的「聽海」、「牽手」、「原來你什麼都不要」三
筆資料。
若我們要修改父資料表中的某一個關聯欄位,並對於相關
聯的子資料表的記錄也希望能自動一併修改,那我們就可
以勾選「重疊顯示更新相關欄位」,即可達到此功能。
78/79