建立關連性
當建立好資料表並設定好主鍵等相關設定之後,基本上就可以拿來使用了,
但也可以再對資料表加上關連性,目地為幫助設計師易理解,
二來可對資料表設限來避免資料不一致的情況發生。以下介紹如何建立關連性。
例如有兩資料表,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屬性觀看是否完成設定。
三、範例
這是比較大一點的範例,刪除規則設為「沒有動作」,更新規則設為「重疊顯示」。
參考資料: