2017年10月11日 星期三

使用(視覺化操作)資料庫圖表建立FOREIGN KEY條件約束


使用(視覺化操作)資料庫圖表建立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
建立authorstitlespublisherstitleauthor四個資料表:
/* 檔案名稱: 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
將資料表publisherstitles連結起來:
/* 檔案名稱: Demo646.sql */
ALTER TABLE titles ADD
  CONSTRAINT FK_titles_publishers
  FOREIGN KEY (pub_id)
  REFERENCES publishers (pub_id)


範例3
將資料表authorstitleauthortitles連結起來:
/* 檔案名稱: 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
將資料表publisherstitles兩者間的關聯性連結移除:
/* 檔案名稱: Demo648.sql */
ALTER TABLE titles
  DROP CONSTRAINT FK_titles_publishers


範例5
將資料表authorstitleauthortitles三者間的關聯性連結移除:
/* 檔案名稱: Demo649.sql */
ALTER TABLE titleauthor
  DROP
  CONSTRAINT FK_titleauthor_authors,FK_titleauthor_titles



沒有留言:

用頭腦去思考,不要人云亦云才好, 宗教信徒就是依賴與自私心態(求東求西)的人, 光是這點就很容易暴露弱點了, 難怪seafood吃飽飽,哈哈。 續上, 除了依賴與自私心態(兩者都是人性)之外。 另外也有很大一部份的人,是人云亦云的思考邏輯, 所以宗教才能譁眾取寵。