使用(視覺化操作)資料庫圖表建立FOREIGN KEY條件約束
於SQL Server上可以使用「資料庫圖表」(Database Diagrams)此一極具親和力的工具來維護關聯資料表。
步驟如下:
a.
於SQL Server Enterprise Manager之資料表所屬的資料庫展開中,選取「圖表」項目,按右鍵選取「新增資料庫圖表」指令。
b.
此時會顯示’建立資料庫圖表精靈’,以便輔助將資料表加至資料庫圖表。
c.
若按「下一步」則精靈會詢問要將哪些資料表加至資料庫圖表。可選擇將會有關聯性的資料表加至資料庫圖表,使移至「要新增至圖表的資料表」清單方塊中,最後「完成」即可。
d.
接下來將以拖放方式定義各個資料表間的關聯性連結,必須注意的是,在進行此項操作前,需已經替父資料表建立主索引鍵或UNIQUE條件約束,此時可在資料庫圖表中進行也可。
e.
欲於資料庫圖表中替資料表建立UNIQUE條件約束,則先選該資料表再於工具列中按「管理索引/索引鍵」按鈕,然後於「屬性」對話方塊中建立UNIQUE條件約束。
f.
以拖放方式定義資料表間的關聯性連結,於父資料表之主索引鍵mark後 (或UNIQUE條件約束欄位)左側按著不放,托放至子資料表中欲作為外部索引鍵之欄位後放開按鍵,並於「建立關聯性」對話方塊中完成相關設定即可。如此會自動替子資料表建立FOREIGN KEY條件約束,連結至父資料表的主索引鍵。
「建立關聯性」對話方塊中的設定說明如下:
(a)「關聯性名稱」文字方塊中輸入關聯性連結的名稱;即是子資料表之FOREIGN KEY條件約束的名稱。
(b)「主索引鍵表」清單方塊的標題列會顯示此一關聯性連結之父資料表名稱,而清單方塊的清單列會顯示該主索引鍵或UNIQUE條件約束之欄位名稱。(可更正清單方塊內容)
(c)「外部索引鍵表」清單方塊的標題列會顯示此一關聯性連結之子資料表名稱,而清單方塊的清單列會顯示該外部索引鍵的欄位。(可更正清單方塊內容)
(d)「核取方塊□建立時立即檢查現有資料」預設為勾選,表示會檢查子資料表所有記錄是否都能有對應於父資料表記錄,如否則此一關聯性連結無法被建立。
(e)「核取方塊□複寫動作將使用此關聯性」預設為勾選,表示當子資料表被複製到其他資料庫時,亦會套用此FOREIGN KEY條件約束。
(f)「核取方塊□插入和更新動作將使用此關聯性」預設為勾選,表示將採用「限制新增」、「限制更新」與「限制刪除」用以維護關聯資料表間的參考完整性。
如果希望採用「連鎖更新」而不用「限制更新」,則可勾選核取方塊□串聯更新相關欄位。即當更新某一筆父資料表之主索引鍵值時,會自動將相關聯之子資料表記錄一併做更新。
如果希望採用「連鎖刪除」而不用「限制刪除」,則可勾選核取方塊□串聯刪除相關欄位。即當刪除某一筆父資料表之主索引鍵值時,會自動將相關聯之子資料表記錄一併做刪除。
g.
反覆以上步驟,直到替所有相關的資料表建立起關聯性連結。
h.
最後於工具列中按「存檔」按鈕。
除了使用資料庫圖表方式,亦可使用「資料表和索引屬性」之「關聯性」標籤來建立(編輯)關聯性連結。
範例1
建立authors、titles、publishers與titleauthor四個資料表:
/* 檔案名稱: Demo645.sql */
CREATE TABLE authors
(
au_id char(6) NOT NULL PRIMARY KEY,
au_name varchar (20) NOT NULL
)
CREATE TABLE titles
(
title_id char(6) NOT NULL PRIMARY KEY,
title varchar(80) NOT NULL,
pub_id char(4) NOT NULL,
)
CREATE TABLE publishers
(
pub_id char(4) NOT NULL PRIMARY KEY,
pub_name varchar(40) NULL
)
CREATE TABLE titleauthor
(
au_id char(6) NOT NULL,
title_id char(6) NOT NULL,
au_ord tinyint NULL,
royaltyper int NULL,
PRIMARY KEY (au_id, title_id)
)
範例2
將資料表publishers與titles連結起來:
/* 檔案名稱: Demo646.sql */
ALTER TABLE titles ADD
CONSTRAINT
FK_titles_publishers
FOREIGN KEY (pub_id)
REFERENCES publishers
(pub_id)
範例3
將資料表authors、titleauthor與titles連結起來:
/* 檔案名稱: Demo647.sql */
ALTER TABLE titleauthor
ADD
CONSTRAINT
FK_titleauthor_authors
FOREIGN KEY (au_id)
REFERENCES authors (au_id),
CONSTRAINT
FK_titleauthor_titles
FOREIGN KEY (title_id)
REFERENCES titles (title_id)
範例4
將資料表publishers與titles兩者間的關聯性連結移除:
/* 檔案名稱: Demo648.sql */
ALTER TABLE titles
DROP CONSTRAINT
FK_titles_publishers
範例5
將資料表authors、titleauthor與titles三者間的關聯性連結移除:
/* 檔案名稱: Demo649.sql */
ALTER TABLE titleauthor
DROP
CONSTRAINT
FK_titleauthor_authors,FK_titleauthor_titles
沒有留言:
張貼留言