建立FOREIGN KEY條件約束
建立FOREIGN KEY條件約束的主要目的,就是要將彼此相關的資料表連結起來,以便確保關聯資料表間的參考完整性。
1.
以程式控制方式建立FOREIGN
KEY條件約束
a.
於使用CREATE TABLE命令建立資料表的同時將某一欄位定義為外部索引鍵,亦或是使用ALTER TABLE命令替資料表新增欄位時要將某一欄位定義為外部索引鍵;
則可於此欄位定義敘述之後加入下面該引數:
[CONSTRAINT constraint_name]
[FOREIGN KEY]
REFERENCES ref_table(ref_column)
語法中的ref_table是想要連結之父資料表名稱。
而ref_column則是父資料表之主索引鍵或UNIQUE條件約束欄位名稱。
承上,如果為多個欄位時:
[CONSTRAINT constraint_name]
[FOREIGN KEY] (column [,…n])
REFERENCES ref_table(ref_column [,…n])
語法中的 (column
[,…n]) 引數係指定哪些欄位要被定義為外部索引鍵。
而ref_table是想要連結之父資料表名稱。
而 (ref_column
[,…n]) 引數則是指定父資料表之主索引鍵或UNIQUE條件約束的欄位名稱。
值得注意的是,(column
[,…n]) 引數中的欄位與
(ref_column [,…n]) 引數中的欄位必須一一對應,且彼此之欄位的資料型態(包含欄位的長度)務必相同。
範例一:
欲使用CREATE
TABLE命令建立資料表Customers與Orders,並一併以CustomerID欄位為鍵值建立起兩者間的關聯性連結:
/* 檔案名稱: Demo641.sql */
CREATE TABLE Customers
(
CustomerID nchar(5) NOT NULL PRIMARY KEY,
CompanyName nvarchar(40) NOT NULL ,
ContactName nvarchar(30) NULL ,
)
CREATE TABLE Orders
(
OrderID int IDENTITY(1, 1) NOT NULL ,
CustomerID nchar(5) NULL
CONSTRAINT FK_Orders_Customers
FOREIGN
KEY
REFERENCES
Customers(CustomerID),
OrderDate datetime NULL ,
)
範例二:
承上例,惟此例是在資料表建立完成後,再使用ALTER TABLE命令替兩資料表建立起關聯性連結:
/* 檔案名稱: Demo642.sql */
CREATE TABLE Customers
(
CustomerID nchar(5) NOT NULL PRIMARY KEY,
CompanyName nvarchar(40) NOT NULL ,
ContactName nvarchar(30) NULL ,
)
CREATE TABLE Orders
(
OrderID int IDENTITY(1, 1) NOT NULL ,
CustomerID nchar(5) NULL,
OrderDate datetime NULL ,
)
ALTER TABLE Orders
ADD
CONSTRAINT FK_Orders_Customers
FOREIGN
KEY (CustomerID)
REFERENCES
Customers(CustomerID)
範例三:
將資料表Order建立各個FOREIGN KEY條件約束,並將它們分別連結至Customers、Employess與Shippers等資料表的主索引鍵,而使它們之間有關聯性:
/* 檔案名稱: Demo643.sql */
ALTER TABLE Orders
ADD
CONSTRAINT FK_Orders_Customers
FOREIGN KEY (CustomerID)
REFERENCES Customers(CustomerID),
CONSTRAINT FK_Orders_Employees
FOREIGN KEY (EmployeeID)
REFERENCES Employees(EmployeeID),
CONSTRAINT FK_Orders_Shippers
FOREIGN KEY (ShipVia)
REFERENCES Shippers(ShipperID)
範例四:
若欲將多個欄位的組合定義為外部索引鍵,例如:資料表sales的主索引鍵是由stor_id、ord_num與title_id三個欄位組成,假設要替某一個資料表建立FOREIGN KEY條件約束並使其連結至資料表sales的主索引鍵,則命令敘述:
/* 檔案名稱: Demo644.sql */
ALTER TABLE ChildTable
ADD
CONSTRAINT FK_ChildTable_Sales
FOREIGN KEY (stor_id, ord_num, title_id)
REFERENCES Sales(stor_id, ord_num, title_id)
b.
移除FOREIGN KEY條件約束
移除FOREIGN KEY條件約束之實質意義,即是移除兩資料表間的關聯性連結。
(a)使用資料庫圖表,於關聯性連結的連結線按右鍵,選取「從資料庫中刪除關聯性」指令,再「存檔」即可。
(b)以程式控制方式,語法如下:
ALTER TABLE table_name
{ DROP
{
CONSTRAINT constraint_name
} [,…n]
}
語法中的table_name是子資料表名稱,CONSTRAINT
constraint_name引數指欲刪除之FOREIGN KEY條件約束名稱。
沒有留言:
張貼留言