建立關連性

 

當建立好資料表並設定好主鍵等相關設定之後,基本上就可以拿來使用了,

但也可以再對資料表加上關連性,目地為幫助設計師易理解,

二來可對資料表設限來避免資料不一致的情況發生。以下介紹如何建立關連性。

 

例如有兩資料表,STUDENT_DATA為父資料表(註1)、LEND_RECORD為子資料表(註2)

註1:凡是被參考的資料表即稱為「父資料表」,「父資料表」一定是其「主索引鍵」屬性被參考,

不可能是其他「非主索引鍵」屬性被參考。

註2:參考的資料表即稱為「子資料表」,用以參考的屬性則稱之為「外部索引鍵」。

註3:父資料表與子資料表的1:N關係如圖,其意思為,

每一筆學生資料裡同一時間只能存在一筆科系資料,

每一筆科系資料可能被同時存在於多筆學生資料之中。

 

一、利用資料庫圖表建立關連性

LEND_RECORD的STUDENT_NO要參考到STUDENT_DATA的STUDENT_NO時,

則將LEND_RECORD的STUDENT_NO屬性抓到STUDENT_DATA的STUDENT_NO的屬性裡

接下來會出現如下晝面,只要確認是否設定正確後按確定即可。

完成後如下圖

 

接下來我們要對資料表設限制

於上圖,請注意到刪除規則這欄位,共有四個選項可以選。

當更動父資料表時,分別有「沒有動作」、「重疊顯示」、「設為Null」、「設為預設值」四個選項可選。

詳細作用請參考下表(此表只適用此例。父子資料表「值」,其「值」代表 Key 值)

依照個人分析需求,決定把刪除規則與更新規則皆設成重疊顯示(CASCADE)

最後須注意的事,要把「強制使用外部索引鍵條件約束」改為「是」,

若否,則「刪除規則」與「更新規則」將不會有任何作用發生。

 

二、利用SQL之DDL

這部份可先參考CREATE TABLE (Transact-SQL)與以下範例

CREATE TABLE [dbo].[CUSTOMER2] 
  ( 
     [customer_id] [TINYINT] NOT NULL, 
     [address]     [NVARCHAR](50) NULL, 
     [cell]        [NCHAR](10) NULL, 
     PRIMARY KEY (customer_id) 
  ) 

go

CREATE TABLE [dbo].[ORDER2] 
  ( 
     [order_id]    [SMALLINT] NOT NULL, 
     [customer_id] [TINYINT] REFERENCES CUSTOMER2(customer_id)
     ON UPDATE CASCADE 
     ON DELETE CASCADE, 
     [outitem]     [DATETIME2](7) NOT NULL, 
     PRIMARY KEY ([order_id]) 
  ) 

go

完成後可以從被指定的資料表的Keys屬性觀看是否完成設定。

 

三、範例

這是比較大一點的範例,刪除規則設為「沒有動作」,更新規則設為「重疊顯示」。

 

參考資料:

如何在 SQL Server 資料庫設計「一對一」表格關聯