Một khĩa ngoại (Foreign key) là một cột hay sự kết hợp của nhiều cột được thiết lập và tuân theo một liên kết giữa các dữ liệu trong hai bảng. Một liên kết được tạo ra giữa hai bảng bằng cách bổ sung một hay nhiều cột cĩ chứa giá trị khĩa primay key của một bảng vào một bảng khác. Các cột này trở thành khĩa ngoại của bảng thứ hai. Ta cĩ thể quy định khĩa ngoại bằng các ấn định một constraint Foreign key khi bạn tạo hay thay đổi một bảng.
Một constraint Foreign key khơng bắt buộc phải liên kết với chỉ một constraint Foreign key trong một bảng khác, nĩ cũng cĩ thểđược ấn định để tham chiếu các cột của một constraint Foreign Unique trong một bảng khác.
Mặc dù mục đích chính của một constraint Foreign key là điều khiển dữ liệu cĩ thể được chứa trong bảng khĩa ngoại, nhưng nĩ cũng điều khiển các thay đổi đối với bảng khĩa chính. Chẳng hạn, nếu một mẫu tin phịng ban bị xĩa ra khỏi bảng Phongban, và mã phịng ban được sử dụng cho các nhân viên trong bảng NhanVien, tính tồn vẹn trong mối quan hệ giữa hai bảng này sẽ bị phá vỡ. Các dịng nhân viên cĩ mã phịng ban bị xĩa sẽ nằm mồ cơi trong bảng NhanVien mà khơng cĩ liên kết với dữ liệu trong bảng PhongBan.
Một constraint Foreign key sẽ ngăn chặn tình trạng mồ cơi dữ liệu. Constraint Foreign key sẽ bảo đảm khơng cho phép bạn xĩa dữ liệu trong bản chính nếu các dữ liệu này cĩ sự liên kết với dữ liệu trong bảng khĩa ngoại.
Định nghĩa FOREIGN KEY CONSTRAINT khi tạo bảng
- Định nghĩa ở mức cột
CREATE TABLE tablename
(columname datatype [ CONSTRAINT constraintname ] [ FOREIGN KEY ] REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] [ NOT FOR REPLICATION ] [,...]
- Định nghĩa ở mức bảng
CREATE TABLE tablename (columname datatype [,...], [ CONSTRAINT constraintname ] FOREIGN KEY [ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ])]
[ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] [ NOT FOR REPLICATION ]
Trung Tâm CNTT - Trường ĐHCN Tp.HCM
Ví dụ:
CREATE TABLE PhongBan ( MaPb INT,
TenPb VARCHAR(30)
CONSTRAINT Pb_Pk (MaPb) PRIMARY KEY(MaPb)
)
GO
CREATE TABLE NhanVien ( MaNv INT,
TenNV VARCHAR(30), MaPB int,
MaCv int
CONSTRAINT Nv_Pk PRIMARY KEY(MaNv)
CONSTRAINT Nv_Fk FOREIGN KEY (MaPb) REFERENCES PhongBan(MaPb) ) GO -- Xem các constraint SP_HELPCONSTRAINT NHANVIEN GO
Định nghĩa Foreign Key Constraint với bảng đã tồn tại:
ALTER TABLE tablename
[ WITH CHECK | WITH NOCHECK ] ADD
[ CONSTRAINT constraintname ] FOREIGN KEY [ ( column [ ,...n ] ) ]
REFERENCES ref_table [( ref_column[ ,...n ] )]
[ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] [ NOT FOR REPLICATION ]
Trong đĩ:
WITH CHECK: trước kho tạo ràng buộc, SQL Server sẽ kiểm tra dữ liệu hiện cĩ cĩ vi phạm ràng buộc hay khơng, nếu cĩ sẽ khơng tạo constraint.
WITH NOCHECK: Tạo Constraint mà khơng cần kiểm tra dữ liệu hiện cĩ cĩ vi phạm ràng buộc hay khơng
Ví dụ:
CREATE TABLE ChucVu
( MaCv INT PRIMARY KEY, TenCv VARCHAR(30), HSPC Real
Trung Tâm CNTT - Trường ĐHCN Tp.HCM
) GO
ALTER TABLE Nhanvien
ADD CONSTRAINT Nv_Cv_Pk FOREIGN KEY (Macv) REFERENCES ChucVu(MaCv)
Lưu ý:
ON DELETE CASCADE| NO ACTION ON UPDATE CASCADE| NO ACTION
Trung Tâm CNTT - Trường ĐHCN Tp.HCM
BÀI 7: TRUY XUẤT CƠ SỞ DỮ LIỆU CỦA SQL SERVER
Mục đích chính của CSDL trong SQL Server là lưu trữ dữ liệu sao cho dữ liệu dễ dàng
được khai thác bởi người sử dụng. Bạn cũng cĩ thể truy cập dữ liệu thơng qua một ứng dụng hoặc các trình tiện ích để gửi yêu cầu nhập dữ liệu hoặc hiệu chỉnh dữ liệu đến SQL Server. Nhằm mục đích tìm hiểu ta dùng SQL Query Analyzer như là một cơng cụ chính
để truy xuất và hiệu chỉnh dữ liệu trong một CSDL của SQL Server.