Thứ Bảy, 1 tháng 10, 2011

Sử dụng các đối tượng DB2: Tạo các ràng buộc - P6

Các ràng buộc (constraints) cho phép DBMS áp đặt một tính toàn vẹn dữ liệu nhất định trong các bảng của nó bằng cách ngăn không cho nhập vào bảng các dữ liệu sai hoặc dữ liệu không mong muốn. 

Các ràng buộc sau được sử dụng trong DB2 để áp đặt tính toàn vẹn của dữ liệu:

  • Khóa chính: Được sử dụng để áp đặt tính duy nhất trên một hoặc một bộ các giá trị cột. Mỗi bảng chỉ có một khóa chính.
  • Khoá ngoại (ràng buộc tham chiếu): Được sử dụng để thiết lập một mối quan hệ tham chiếu (referential relationship) giữa hai bảng, thường gọi là bảng cha và bảng con, với thao tác được định nghĩa trong mệnh đề REFERENCE. Thao tác này thực hiện khi dữ liệu được chèn vào/xóa/cập nhật trong bảng cha hay bảng con đáp ứng các tiêu chuẩn cho trước. Một khóa ngoại sẽ luôn luôn tham chiếu tới một khóa chính hoặc khoá duy nhất trong bảng cha.
  • Khoá duy nhất: Được định nghĩa để áp đặt tính duy nhất trên một hoặc một bộ các giá trị cột. Trái với khóa chính, một bảng có thể có nhiều khoá duy nhất. Các khoá duy nhất cũng cho phép các khoá ngoại tham chiếu các cột dữ liệu khác nhau mà không là khóa chính. Một chỉ mục duy nhất (unique index) được tạo ra mỗi khi một khóa chính hoặc một khóa duy nhất được định nghĩa.
  • Ràng buộc kiểm tra: Được định nghĩa ở mức bảng, đối với một hay nhiều cột bảng. Chúng được sử dụng để áp đặt các qui tắc đã định rõ đối với các cột bảng đó sao cho dữ liệu được chèn vào hoặc cập nhật trong các cột đó thỏa mãn các điều kiện đã định nghĩa trước trong ràng buộc kiểm tra. Không như các ràng buộc khác, ràng buộc kiểm tra có thể tạm thời được tắt trong thời gian thực hiện một số thao tác nhất định, ví dụ như LOAD, và bảng sẽ được đặt vào trạng thái chờ kiểm tra (check pending) cho đến khi ràng buộc được kiểm tra.

Ta tạo ra các ràng buộc khi tạo một bảng, hoặc sau đó bổ sung chúng bằng cách sử dụng câu lệnh ALTER TABLE hoặc một giao diện GUI.

Bài tập sau đây cho bạn có dịp thực hành việc tạo và sử dụng các ràng buộc. Nó cũng giải thích cách sử dụng Command Editor (Bộ soạn thảo lệnh) để thực hiện một số nhiệm vụ quản trị hằng ngày:

B1: Từ thanh trình đơn chính của Trung tâm điều khiển, nhấn Tools > Command Editor trong trình đơn thả xuống. Một cửa sổ soạn thảo lệnh xuất hiện. Sử dụng bộ soạn thảo này để soạn các lệnh DB2 của bạn, thực hiện chúng, sau đó xem các thông báo DB2 hoặc SQL phản hồi.

B2: Trước tiên thêm một cột nữa vào bảng AUTHOR và sau đó bổ sung một khóa chính trên bảng này. Thêm các lệnh tiếp theo và nhấn nút thực hiện màu xanh lục như trong Hình 35.

Hình 19. Bộ soạn thảo lệnh -- Thay đổi bảng

Khi bạn thêm vào một khóa chính, DB2 tạo ra một chỉ mục duy nhất (unique index) bên dưới vì ở đó đã có một chỉ mục duy nhất trên AUTHOR_ID. DB2 sử dụng một chỉ mục hiện có cho khóa chính, vì thế thông báo trả về là SQL0598W.

B3: Từ Bộ soạn thảo lệnh, bạn cũng có thể chọn ghi lưu các lệnh hiện thời này vào một tệp hoặc thay thế chúng bằng các lệnh mới mà bạn muốn soạn thảo hoặc cho chạy tiếp.

B4: Thay thế các lệnh trong cửa sổ Bộ soạn thảo lệnh bằng nội dung sau:

CONNECT TO HWLD; 
CREATE TABLE HWLD.MODULE 
( MODULE_ID INT NOT NULL, 
MODULE_NAME CHAR(20) NOT NULL, 
PRIMARY KEY (MODULE_ID), 
CONSTRAINT MID_UNIQ UNIQUE 
(MODULE_ID, MODULE_NAME), 
CONSTRAINT MID_CHECK CHECK (MODULE_ID >= 0) 
IN TBSP_DATA1 INDEX IN TBSP_INDEX1; 
CONNECT RESET; 

B5: Lệnh CREATE TABLE này tạo ra một ràng buộc khóa chính (primary key constraint), một ràng buộc khóa duy nhất (unique key constraint) và một ràng buộc kiểm tra trong khi tạo lập bảng. Ràng buộc kiểm tra áp đặt các giá trị phải dương trong cột dữ liệu MODULE_ID. Hình 20 thể hiện các kết quả chạy được mong đợi: 

Hình 20. Bộ soạn thảo lệnh -- Tạo bảng

Bạn có thể sử dụng thủ thuật CREATE TABLE để thực hiện cùng một việc.

B6: Giờ thì bạn đã tạo ra được hai bảng. Bảng HWLD.AUTHOR gồm toàn bộ các thông tin về tác giả các môđun Hello World. Bảng HWLD.MODULE bao gồm toàn bộ thông tin về các môđun loạt bài Hello World. Bây giờ hãy tạo một bảng nữa, bảng HWLD.PARTICIPANT để chứa toàn bộ thông tin của các học viên gồm tên, phòng ban (tuỳ chọn), môđun đã học, và kết quả kiểm tra (quiz score).

Bảng HWLD.PARTICIPANT phải có các định nghĩa bảng như sau:

(PAR_NAME VARCHAR(50) NOT NULL, 
PAR_ID BIGINT NOT NULL, 
PAR_AREA CHAR(20), 
MODULE_ID INT, 
PAR_TEST_SCORE INT) 

B7: Chú ý các điều kiện sau:

  • Mỗi người có thể dự sát hạch nhiều môđun nhiều lần.
  • Điểm số sát hạch phải giữa 0 và 100.
  • MODULE_ID trong HWLD.PARTICIPANT phải tham chiếu đến MODULE_ID trong HWLD.MODULE. Khi một môđun được xóa bỏ khỏi bảng HWLD.MODULE, hãy đặt MODULE_ID tương ứng thành NULL trong bảng PARTICIPANT, như vậy MODULE_ID ở đây không bao giờ là một giá trị không hợp lệ.
  • Khi một dòng được chèn vào trong bảng HWLD.PARTICIPANT, nếu MODULE_ID tương ứng không tồn tại trong HWLD.MODULE thì phép chèn thêm thất bại.
  • Khi một mô đun được cập nhật trong bảng HWLD.MODULE, nếu có một bản ghi đang có trong bảng HWLD.PARTICIPANT tham chiếu đến MODULE_ID đó, thì phép cập nhật thất bại.

B8: Hãy bổ sung các ràng buộc sau để áp đặt các điều kiện nói trên:

  • Ràng buộc kiểm tra trên cột PAR_TEST_SCORE để đảm bảo giá trị của nó nằm giữa 0 và 100.
  • Khoá ngoại trên MODULE_ID tham chiếu đến MODULE_ID trong HWLD.MODULE, ON DELETE SET NULL, ON UPDATE RESTRICT (lưu ý, quy tắc chèn 4 đã bị áp đặt theo mặc định).

Các ràng buộc này có thể được tạo ra khi tạo bảng HWLD.PARTICIPANT.

B9: Từ Trung tâm điều khiển, khởi chạy thủ thuật tạo bảng mới (Create New Table) trong khung nhìn Tables. Chọn HWLD làm lược đồ bảng, gõ nhập PARTICIPANT làm tên bảng, và bổ sung một chú thích. Nhấn Next.

B10: Từ trang Columns, nhấn Add để thêm cột đầu tiên. Chỉ rõ PAR_NAME VARCHAR(50) NOT NULL và chọn VARCHAR làm kiểu dữ liệu.

B11: Nhấn OK. Từ trang Columns, thêm một cột thứ hai, PAR_ID BIGINT NOT NULL. Nhấn OK.Bổ sung một cột thứ ba,PAR_AREA CHAR(20). Chú ý cột này cho phép giá trị NULL (rỗng).

B12: Tương tự, bổ sung cột thứ tư MODULE_ID INT rồi cột thứ năm, PAR_TEST_SCORE INT. Cả hai đều có kiểu dữ liệu là INTEGER và cả hai đều cho phép giá trị NULL.

B13: Kiểm tra kỹ các cột bạn đã bổ sung. 

Hình 21. Thủ thuật tạo bảng – Các cột

B14: Nhấn Next. Bỏ qua trang Data Partitions bằng cách nhấn Next một lần nữa.

B15: Tương tự như hai bảng trước đây đã tạo, sử dụng các vùng bảng riêng rẽ đối với dữ liệu bảng và chỉ mục bảng cho HWLD.PARTICIPANT. Chọn TBSP_DATA1 cho vùng bảng và chọn TBSP_INDEX1 làm vùng chỉ mục. Nhấn Next.

B16: Nhấn Add Foreign từ trang Keys. Nhập PMID_FOR làm tên của khoá ngoại. 

Hình 22. Thủ thuật tạo bảng - Bổ sung khóa ngoại

B17: Chọn HWLD.MODULE làm bảng cha (parent table). Chọn MODULE_ID từ danh sách các cột sẵn có (Available columns), và nhấn > để thêm nó như là một khoá ngoại. Chọn SET NULL cho On delete, và chọn RESTRICT cho On update. Nhấn OK. Bạn sẽ thấy ràng buộc sau đã được định nghĩa: 

Hình 23. Thủ thuật tạo bảng – các khóa

Nhấn Next. (Bạn có thể tạo ra các kiểu khoá khác nhau như khoá duy nhất, khoá chính ở đây. Trong bài tập này, bạn chỉ cần tạo ra một khoá ngoại).

B18: Nhấn Next một lần nữa để bỏ qua trang Dimensions.

B19: Từ trang Define Check Constraints (định nghĩa ràng buộc kiểm tra), nhấn Add để khởi động thủ thuật bổ sung ràng buộc kiểm tra (Add Check Constraint wizard).

B20: Nhập vào PAR_SCORE_CHECK làm tên ràng buộc kiểm tra. Bổ sung nội dung sau làm điều kiện kiểm tra (Check condition):

PAR_TEST_SCORE BETWEEN 0 and 100 

Đánh dấu chọn cả hai thuộc tính ràng buộc.

B21: Gõ vào một chú thích. Nhấn OK để bổ sung ràng buộc này. Nhấn Finish. Cửa sổ thông báo DB2 cần phải phản hồi DB20000. Đóng nó lại.

B22: Kiểm tra xem bảng PARTICIPANT mới được tạo ra hiển thị trong Trung tâm điều khiển chưa.

Soát lại HWLD.PARTICIPANT và xem thử bạn có nghĩ đến các điều kiện nào khác có thể sử dụng các ràng buộc để triển khai nữa không. (Gợi ý: triển khai hiện có này không áp đặt tính duy nhất của học viên và ID đã gán cho mỗi học viên; có một vài cách để thực hiện việc này. Một cách là chia bảng HWLD.PARTICIPANT hiện tại thành hai bảng, áp đặt tính duy nhất về ID của học viên, và thiết lập một khóa ngoại để tham chiếu ID học viên. Bạn có thể nghĩ ra các cách khác không?)

Hình sau đây tổng kết lại ba bảng đã được tạo ra cho đến lúc này và các ràng buộc mà bạn đã bổ sung vào các bảng này.

Hình 24. Bảng mới được tạo ra và các ràng buộc

Source: Ibm.com

Không có nhận xét nào:

Đăng nhận xét