Foreign Key Constraint

Một phần của tài liệu Bài giảng SQL SERVER tin chi) (Trang 53)

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 toà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 TABLEtablename

(columname datatype[ CONSTRAINTconstraintname] [ FOREIGN KEY ] REFERENCESref_table[ (ref_column) ] [ ON DELETE { CASCADE | NO ACTION } ]

[ ON UPDATE { CASCADE | NO ACTION } ] [ NOT FOR REPLICATION ] [,...]

- Định nghĩa ở mức bảng

CREATE TABLEtablename

(columname datatype[,...], [ CONSTRAINTconstraintname]

REFERENCESref_table[ (ref_column[ ,...n ])] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] [ NOT FOR REPLICATION ]

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 TABLEtablename

[ WITH CHECK | WITH NOCHECK ] ADD [ CONSTRAINTconstraintname] FOREIGN KEY [ (column[ ,...n] ) ]

REFERENCESref_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 )

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

Chương 4: 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.

Một phần của tài liệu Bài giảng SQL SERVER tin chi) (Trang 53)

Tải bản đầy đủ (PDF)

(99 trang)