Biểu diễn RBTV bằng phụ thuộc hàm

Một phần của tài liệu TÀI LIỆU DẠY HỌC CƠ SỞ DỮ LIỆU (Trang 155 - 158)

5.3. R ÀNG BUỘC TOÀN VẸN (RBTV)

5.3.4. Biểu diễn RBTV bằng phụ thuộc hàm

SINH_VIEN (MaSV, HoTenSV, NamSinh, GioiTinh, QueQuan, MaLop) LOP (MaLop, TenLop, MaKhoa)

KHOA (MaKhoa, TenKhoa, ĐC, SĐT)

HOC_PHAN (MaHP, TenHP, SoTC, HocKy, MoTa) KET_QUA (MaSV, MaHP, DiemThi, LanThi)

156 a. RBTV về miền giá trị

Cú pháp [CONSTRAINT <tên RBTV>] CHECK (<điều kiện>)

Ràng buộc toàn vẹn về miền giá trị này có thể định nghĩa trên một cột của bảng, có thể được viết ngay sau tên thuộc tính mà không cần phải viết tên RBTV trong cụm CONSTRAINT <tên RBTV>. Nếu định nghĩa trên nhiều cột của bảng thì nên sử dụng cụm này và được viết sau khi đã khai báo xong các thuộc tính của bảng.

<Điều kiện> là một biểu thức logic bất kỳ như đã trình bày trong phần câu lệnh truy vấn thông tin, tuy nhiên trong biểu thức không được chứa các câu hỏi con (SubQueries).

Ví dụ 5.13. Điều kiện trong mệnh đề CHECK cho phép chỉ nhận những bản ghi có giá trị ở cột GioiTinh trong bảng SINH_VIEN là Nam hoặc Nữ. Câu lệnh trên có thể được viết cách khác tương đương như sau:

CREATE TABLE SINH_VIEN (

MaSV VARCHAR(10) PRIMARY KEY, HoTenSV NVARCHAR (30) NOT NULL, NamSinh DATE NOT NULL,

GioiTinh NVARCHAR(4), QueQuan NVARCHAR(200), MaLop VARCHAR(10),

CONSTRAINT CK_SINH_VIEN CHECK (GioiTinh= N‘Nam’ OR GioiTinh=N‘Nữ’)

);

b. RBTV về khóa ngoài hay phụ thuộc tồn tại:

Cú pháp

Định nghĩa cho bảng trên nhiều cột của bảng [CONSTRAINT <tên RBTV>]

FOREIGN KEY (<các thuộc tính khóa ngoài>) REFERENCES <tên bảng> (<các cột khóa chính>) Và định nghĩa cho một cột khóa ngoài của bảng:

[CONSTRAINT <tên RBTV>]

REFERENCES <tên bảng> (<các cột khóa chính>)

Lưu ý: Trong cú pháp định nghĩa trên một cột của bảng không có các từ khóa FOREIGN KEY và không có dấu phẩy ở trước CONSTRAINT. Các RBTV định nghĩa trên cột được viết ngay trong dòng mô tả cột.

Ví dụ 5.14. Định nghĩa cấu trúc các bảng SINH_VIEN và KHOA có khóa ngoài là MaKhoa:

157 CREATE TABLE SINH_VIEN (

MaSV VARCHAR(10) PRIMARY KEY, HoTenSV NVARCHAR (30) NOT NULL, NamSinh DATE NOT NULL,

GioiTinh NVARCHAR(4), QueQuan NVARCHAR(200), MaLop VARCHAR(10),

CONSTRAINT FK_SINH_VIEN_LOP FOREIGN KEY (MaLop) REFERENCES LOP.MaLop

);

Với RBTV về khóa ngoài còn có thể sử dụng tùy chọn (Option) ON DELETE CASCADE để thực hiện việc xóa một bộ của bảng chứa khóa chính thì sẽ xóa tất cả các bản ghi của bảng chứa khóa ngoài. Chẳng hạn, khi xóa đi một lớp khỏi bảng LOP, thì tất cả các sinh viên thuộc lóp đó cũng sẽ bị xóa bỏ khỏi bảng SINH_VIEN. Mệnh đề xóa ON DELETE CASCADE mang tính “lan tỏa” này được đặt sau mệnh đề REFERENCES.

Ví dụ 5.15. Định nghĩa cấu trúc các bảng SINH_VIEN và LOP được viết lại với RBTV về khóa ngoài có sự xóa “lan tỏa” như sau:

CREATE TABLE SINH_VIEN (

MaSV VARCHAR(10) PRIMARY KEY, HoTenSV NVARCHAR (30) NOT NULL, NamSinh DATE NOT NULL,

GioiTinh NVARCHAR(4), QueQuan NVARCHAR(200), MaLop VARCHAR(10),

CONSTRAINT FK_SINH_VIEN_LOP FOREIGN KEY(MaLop) REFERENCES LOP.MaLop

ON DELETE CASCADE );

c. Một số tùy chọn khác

DISABLE: Nếu bổ sung từ khóa này vào sau RBTV, thì hệ quản trị CSDL vẫn ghi nhận RBTV nhưng không bắt buộc kiểm tra sự vi phạm RBTV khi cập nhật dữ liệu cho bảng. Người chủ sở hữu hoặc người quản trị CSDL có thể bắt đầu bắt buộc kiểm tra RBTV bằng cách kích hoạt với từ khóa ENABLE khi thực hiện lệnh sửa đổi cấu trúc bảng ALTER TABLE.

158

EXCEPTIONS INTO <tên bảng>: Những bản ghi vi phạm RBTV khi cập nhật dữ liệu (trong quá trình cập nhật theo lô - Batch Updating) hoặc khi kích hoạt kiểm tra RBTV sẽ không được dưa vào bảng chính mà sẽ được lưu lại trong bảng các ngoại lệ chỉ ra sau các từ khóa EXCEPTIONS INTO.

Tóm lại, cú pháp tổng quát của lệnh tạo cấu trúc bảng trong CSDL như sau:

CREATE TABLE <tên bảng>(

<Column 1><Type 1> (<Size 1>) [ CONSTRAINT clause 1],

<Column 2><Type 2> (<Size 2>) [ CONSTRAINT clause 2], ...

<Column n><Type n> (<Size n>) [ CONSTRAINT clause n]

, [ CONSTRAINT clause 1], , [ CONSTRAINT clause 2],

, [ CONSTRAINT clause m], );

Trong đó cú pháp của các khai báo RBTV là như sau:

[ CONSTRAINT <tên RBTV>] NULL NOT NULL  UNIQUE [ (<tên cột>, <tên cột>... )  

PRIMARY KEY  (<tên cột>, <tên cột>... )  

 

 FOREIGN KEY  (<tên cột>, <tên cột>... ) ] ]

REFERENCES <tên bảng> (<tên cột>, <tên cột>... )  CHECK (<điều kiện>)

Một phần của tài liệu TÀI LIỆU DẠY HỌC CƠ SỞ DỮ LIỆU (Trang 155 - 158)

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

(188 trang)