CHƯƠNG II : CÁC RÀNG BUỘC VÀ CÁC TRIGGER
2.1 KHểA VÀ KHểA NGOÀI
2.1.4 Mụ tả cỏc ràng buộc khoỏ ngoài
Một loại ràng buộc quan trọng thứ hai trờn lược đồ cơ sở dữ liệu là giỏ trị đối với một số thuộc tớnh nào đú phải cú nghĩa.
Trong SQL, chỳng ta cú thể khai bỏo một (hoặc cỏc) thuộc tớnh của một quan hệ là khoỏ ngoài tham chiếu đến một (hoặc cỏc) thuộc tớnh của một quan hệ thứ hai (cú thể cựng một quan hệ). Khai bỏo đú cú nghĩa là:
1. Cỏc thuộc tớnh được tham chiếu của quan hệ thứ hai phải được tuyờn bố là UNIQUE hoặc PRIMARY KEY đối với quan hệ của chỳng. Ngược lại, chỳng ta khụng thể khai bỏo khoỏ ngoài.
2. Cỏc giỏ trị của khoỏ ngoài xuất hiện trong quan hệ thứ nhất cũng phải xuất hiện trong cỏc thuộc tớnh được tham chiếu của một bộ nào đấy. Chớnh xỏc hơn, giả sử cú một khoỏ ngoài F tham chiếu một tập thuộc tớnh G của một quan hệ nào đú. Giả sử một bộ t của quan hệ thứ nhất cú cỏc giỏ trị xỏc định trong tất cả cỏc thuộc tớnh của F; gọi danh sỏch cỏc giỏ trị của t trong cỏc thuộc tớnh đú là t[F]. Khi đú, trong quan hệ được tham chiếu phải cú một bộ s nào đấy phự hợp với t[F] trờn cỏc thuộc tớnh G, nghĩa là s[G] = t[F].
Cũng như đối với khoỏ chớnh, chỳng ta cú hai cỏch khai bỏo một khoỏ ngoài.
a) Nếu khoỏ ngoài chỉ gồm một thuộc tớnh, chỳng ta cú thể tiếp sau tờn và kiểu của nú bằng một khai bỏo rằng nú tham chiếu thuộc tớnh nào đấy của một bảng nào đấy (thuộc tớnh này phải là khoỏ chớnh hoặc duy nhất). Khai bỏo cú dạng:
REFERENCE < bảng>(<thuộc tớnh>)
b) Cỏch thứ hai, chỳng ta cú thể thờm vào danh sỏch cỏc thuộc tớnh trong một lệnh CREATE TABLE một hoặc nhiều khai bỏo phỏt biểu rằng một tập thuộc tớnh là một khoỏ ngoài. Sau đú chỳng đưa ra tờn bảng và cỏc thuộc tớnh được khoỏ ngoài tham chiếu đến của bảng đú. Cỏc thuộc tớnh này phải là cỏc thuộc tớnh khoỏ. Khai bỏo cú dạng như sau:
FOREIGN KEY (<cỏc thuộc tớnh>) REFERENCE < Tờnbảng> (cỏc thuộc tớnh
được tham chiếu đến) Vớ dụ 2.3 Giả sử chỳng ta muốn mụ tả quan hệ
cú khoỏ chớnh là MósốDA và khoỏ ngồi MósốĐV tham chiếu thuộc tớnh MósốĐV của quan hệ ĐƠNVỊ. Chỳng ta cú thể cú hai cỏch mụ tả như sau:
cỏch 1: CREATE TABLE DỰÁN
(TờnDA VARCHAR(15),
MósốDA INT PRIMARY KEY,
ĐịađiểmDA VARCHAR(15),
MósốĐV INT REFERENCES ĐƠNVỊ(MósốĐV));
cỏch 2: CREATE TABLE DỰÁN
(TờnDA VARCHAR(15),
MósốDA INT PRIMARY KEY,
ĐịađiểmDA VARCHAR(15),
MósốĐV INT,
FOREIGN KEY(MósốĐV) REFERENCES
ĐƠNVỊ(MósốĐV));
Chỳ ý rằng thuộc tớnh được tham chiếu MósốĐV trong quan hệ ĐƠNVỊ phải là khoỏ của quan hệ đú. í nghĩa của việc mụ tả khoỏ ngoài là ở chỗ mỗi khi một giỏ trị xuất hiện trong thành phần MósốĐV của một bộ của quan hệ DỰÁN thỡ giỏ trị đú cũng phải xuất hiện trong thành phần MósốĐV của một bộ giỏ trị nào đú của quan hệ ĐƠNVỊ. Cú một ngoại trừ là thành phần MósốĐV của một bộ cụ thể của quan hệ DỰÁN cú thể cú giỏ trị NULL, khi đú sẽ khụng cú đũi hỏi rằng NULL xuất hiện như giỏ trị của thành phần MósốĐV của ĐƠNVỊ (bởi vỡ MósốĐV là khoỏ chớnh).