138
Trang 1 LỜI NÓI ĐẦU Cơ sở dữ liệu đóng góp vai trò chủ chốt trong quá trình xây dựng và phát triển các hệ thống phần mềm. Ở thế kỷ 21, khi mà Internet nổi lên như là một điều không thể thiếu trong cuộc sống của con người thời hiện đại, nhu cầu con người và các hệ thống máy tính lưu trữ dữ liệu cực kỳ lớn. Vì vậy, môn học cơ sở dữ liệu góp phần cho học viên hiểu rõ về các khái niệm dữ liệu, nguyên lý, cơ chế và phương pháp phân tích, lưu trữ dữ liệu hiệu quả; từ đó tiến tới việc nắm rõ công tác quản lý cũng như sử dụng dữ liệu ở các hệ thống máy chủ phục vụ cho nhu cầu truy xuất dữ liệu ở các dự án phần mềm hoặc các nhu cầu khác. Giáo trình này có nội dung phù hợp với đối tượng học sinh, sinh viên ở các trường đại học, các học viên có công việc liên quan cơ sở dữ liệu và đặc biệt là các học viên của VNPT. Chúng tôi xin cảm ơn đội ngũ biên soạn giáo trình gồm các thầy/cô đã tham gia như: - Tạ Hoàng Thắng - Nguyễn Thị Lương - Cao Thị Nhạn - Nguyễn Thị Thanh Bình Trong quá trình biên soạn, chắc chắn sẽ không tránh sai sót, nếu có xin hãy liên hệ với chúng tôi tại email [email protected] để chúng tôi có thể sửa lỗi và hoàn thiện giáo trình. Xin trân trọng cảm ơn!

Kiến thức công nghệ và ngôn ngữ

  • Upload
    others

  • View
    36

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Kiến thức công nghệ và ngôn ngữ

Trang 1

LỜI NÓI ĐẦU

Cơ sở dữ liệu đóng góp vai trò chủ chốt trong quá trình xây dựng và phát triển các hệ

thống phần mềm. Ở thế kỷ 21, khi mà Internet nổi lên như là một điều không thể thiếutrong cuộc sống của con người thời hiện đại, nhu cầu con người và các hệ thống máytính lưu trữ dữ liệu cực kỳ lớn. Vì vậy, môn học cơ sở dữ liệu góp phần cho học viên

hiểu rõ về các khái niệm dữ liệu, nguyên lý, cơ chế và phương pháp phân tích, lưu trữ

dữ liệu hiệu quả; từ đó tiến tới việc nắm rõ công tác quản lý cũng như sử dụng dữ liệuở các hệ thống máy chủ phục vụ cho nhu cầu truy xuất dữ liệu ở các dự án phần mềmhoặc các nhu cầu khác. Giáo trình này có nội dung phù hợp với đối tượng học sinh,

sinh viên ở các trường đại học, các học viên có công việc liên quan cơ sở dữ liệu vàđặc biệt là các học viên của VNPT.

Chúng tôi xin cảm ơn đội ngũ biên soạn giáo trình gồm các thầy/cô đã tham gia như:

- Tạ Hoàng Thắng

- Nguyễn Thị Lương

- Cao Thị Nhạn

- Nguyễn Thị Thanh Bình

Trong quá trình biên soạn, chắc chắn sẽ không tránh sai sót, nếu có xin hãy liên hệ với

chúng tôi tại email [email protected] để chúng tôi có thể sửa lỗi và hoàn thiện giáotrình. Xin trân trọng cảm ơn!

Page 2: Kiến thức công nghệ và ngôn ngữ

Trang 2

MỤC LỤC

Phần I: Cơ sở dữ liệu

Chương 1: Khái niệm chung về cơ sở dữ liệu ................................................................ 3

Chương 2: Mô hình dữ liệu ...........................................................................................14

Chương 3: Mô Hình Dữ Liệu Quan Hệ ........................................................................ 22

Chương 4: Ngôn Ngữ Đại Số Quan Hệ ........................................................................ 31

Chương 5: Ngôn Ngữ Truy Vấn SQL ......................................................................... 44

Chương 6: Phụ thuộc hàm, khóa và ràng buộc toàn vẹn của lược đồ quan hệ ............ 55

Chương 7: Dạng chuẩn và chuẩn hóa cơ sở dữ liệu ..................................................... 73

Phần II: Hệ quản trị cơ sở dữ liệu Oracle

Chương 8. Các thao tác cơ bản trong Oracle ................................................................84

Chương 9. Quản lý người dùng và đối tượng người dùng.......................................... 103

Chương 10. Lập trình PL/SQL.....................................................................................109

Chương 11. An toàn dữ liệu, quản lý tính hiệu quả, và bảo trì dữ liệu.......................128

Page 3: Kiến thức công nghệ và ngôn ngữ

Trang 3

PHẦN I. CƠ SỞ DỮ LIỆU

Chương 1: Khái niệm chung về cơ sở dữ liệu

1.1 Các khái niệm cơ bản

1.1.1. Định nghĩa cơ sở dữ liệu

Cơ sở dữ liệu (database) là một hệ thống các thông tin có cấu trúc được lưu trữ trên cácthiết bị lưu trữ thứ cấp (băng từ, đĩa từ…) nhằm thoả mãn yêu cầu khai thác thông tinđồng thời của nhiều người sử dụng hay nhiều chương trình ứng dụng với nhiều mụcđích khác nhau.

Ưu điểm của CSDL:

Giảm sự trùng lắp thông tin xuống mức thấp nhất và do đó bảo đảm được tínhnhất quán và toàn vẹn dữ liệu

Dữ liệu có thể được truy xuất theo nhiều cách khác nhau

Khả năng chia xẻ thông tin cho nhiều người sử dụng và nhiều ứng dụng khácnhau

Để đạt được những ưu điểm trên CSDL đặt ra những vấn đề cần giải quyết, đó là:

Tính chủ quyền của dữ liệu. Do sự chia xẻ của CSDL nên tính chủ quyền củadữ liệu có thể bị lu mời và làm mờ nhạt tinh thần trách nhiệm, được thể hiệntrên vấn đề an toàn dữ liệu, khả năng biểu diễn các mối liên hệ ngữ nghĩa củadữ liệu và tính chính xác của dữ liệu. Nghĩa là người khai thác CSDL phải cónghĩa vụ cập nhật các thông tin mới nhất của CSDL.

Tính bảo mật và quyền khai thác thông tin của người sử dụng (NSD). Docó nhiều người cùng khai thác CSDL một cách đồng nên cần phải có một cơchế bảo mật và phân quyền khai thác CSDL.

Tranh chấp dữ liệu. Nhiều người được phép truy cập vào cùng một tài nguyêndữ liệu (data source) của CSDL với những mục đích khác nhau như xem, thêm,xóa, sửa dữ liệu. Như vậy cần phải có cơ chế ưu tiên truy nhập dữ liệu cũng nhưcơ chế giải quyết tình trạnh khoá chết (DeadLock) trong quá trình khai tháccạnh tranh. Cơ chế ưu tiên có thể được thực hiện dựa trên:

Cấp quyền ưu tiên cho người khai thác CSDL, người nào có quyền ưu tiêncao hơn thì được ưu tiên cấp quyền truy nhập dữ liệu trước.

Thời điểm truy nhập, ai có yêu cầu truy xuất trước thì có quyền truy nhập dữliệu trước.

Hoặc dựa trên cơ chế lập lịch truy xuất hay cơ chế khoá.

Đảm bảo dữ liệu khi có sự cố. Việc quản lý tập trung có thể làm tăng khả năngmất mát hoặc sai lệch thông tin khi có sự cố như mất điện đột xuất, một phầnhay toàn bộ đĩa lưu trữ dữ liệu bị hư… Một số hệ điều hành mạng có cung cấpdịch vụ sao lưu đĩa cứng (cơ chế sử dụng đĩa cứng dự phòng - RAID), tự động

Page 4: Kiến thức công nghệ và ngôn ngữ

Trang 4

kiểm tra và khắc phục lỗi khi có sự cố. Tuy nhiên bên cạnh dịch vụ của hệ điềuhành, một CSDL nhất thiết phải có một cơ chế khôi phục dữ liệu khi các sự cốbất ngờ xảy ra để đảm bảo CSDL luôn ổn định.

1.1.2. Các đối tượng sử dụng CSDL

Những người sử dụng không chuyên về lĩnh vực tin học và CSDL, do đó CSDLcần có các công cụ để giúp cho người sử dụng không chuyên có thể khai tháchiệu quả CSDL

Các chuyên viên tin học biết khai thác CSD, đây là những người có thể xâydựng các ứng dụng khác nhau phục vụ cho những yêu cầu khác nhau trênCSDL.

Những người quản trị CSDL, là những người hiểu biết về tin học, các hệ quảntrị CSDL và hệ thống máy tính. Họ là người tổ chức CSDL (khai báo cấu trúcCSDL, ghi nhận các yêu cầu bảo mật cho các dữ liệu cần bảo vệ…), do đó họcần phải nắm rõ các vấn đề về kỹ thuật để có thể phục hồi dữ liệu khi có sự cố.Họ là những người cấp quyền hạn khai thác CSDL nên họ có thể giải quyết cácvấn đề tranh chấp dữ liệu.

1.1.3. Hệ quản trị CSDL

Để giải quyết tốt những vấn đề đặt ra cho một CSDL như đã trình bày trong 1.2 thì cầncó một hệ thống các phần mềm chuyên dụng. Hệ thống này được gọi là hệ quản trịCSDL (Database Management System - DBMS), là công cụ hỗ trợ tích cực cho cácnhà phân tích, thiết kế và khai thác CSDL. Hiện nay có nhiều hệ quản trị CSDL trên thịtrường như: Visual Foxpro, SQL server, DB2, Microsoft Access, Oracle…

Một hệ quản trị CSDL phải có:

Ngôn ngữ giao tiếp giữa NSD và CSDL:

Ngôn ngữ mô tả dữ liệu (Data Definition Language - DDL) để cho phép khaibáo cấu trúc của CSDL, khai báo các mối liên hệ của dữ liệu (DataRelationship) và các quy tắc (Rules, Constraint) quản lý áp đặt trên dữ liệu.

Ngôn ngữ thao tác dữ liệu (Data Manipulaton Language - DML) cho phépNSD có thể thêm, xoá, dữ liệu trong CSDL.

Ngôn ngữ truy vấn dữ liệu (Structured Query Language - SQL) cho phépNSD truy vấn các thông tin cần thiết.

Ngôn ngữ quản lý dữ liệu (Data Control Language - DCL) cho phép nhữngngười quản trị hệ thống thay đổi cấu trúc của các bảng dữ liệu, khai báo bảomật thông tin và cấp quyền khai thác CSDL cho NSD.

Tự điển dữ liệu (Data dictionary) dùng để mô tả các ánh xạ liên kết, ghi nhậncác thành phần cấu trúc của CSDL, các chương trình ứng dụng, mật mã, quyềnsử dụng…

Có biện pháp bảo mật tốt.

Có cơ chế giải quyết tranh chấp dữ liệu.

Có cơ chế sao lưu và phục hồi dữ liệu khi có sự cố xảy ra.

Page 5: Kiến thức công nghệ và ngôn ngữ

Trang 5

Có giao diện tốt, dễ sử dụng.

Bảo đảm tính độc lập giữa dữ liệu và chương trình: khi có sự thay đổi dữ liệu(như sửa đổi cấu trúc lưu trữ các bảng dữ liệu, thêm các chỉ mục,…) thì cácchương trình ứng dụng đang chạy trên CSDL vẫn không cần phải viết lại haycũng không ảnh hưởng đến NSD khác.

1.1.4. Các mức biểu diễn một CSDL

Để hệ thống có thể dùng được thì phải tìm dữ liệu một cách hiệu quả. Điều này dẫnđến việc cần phải thiết kế những cấu trúc dữ liệu phức tạp đối với việc biểu diễn dữliệu trong cơ sở dữ liệu. Vì nhiều người sử dụng các hệ thống cơ sở dữ liệu không phảilà người hiểu biết nhiều về máy tính nên những người phát triển hệ thống phải che dấuđi sự phức tạp khỏi người sử dụng thông qua một số mức trừu tượng, nhằm làm đơngiản hóa sự tương tác của người sử dụng đối với hệ thống.

Có 3 mức biểu diễn dữ liệu, cụ thể như sau:

Mức trong (mức vật lý - Physical level)

Nói đến cách thức dữ liệu được lưu trữ thực sự. Trả lời câu hỏi dữ liệu gì và lưutrữ chúng như thế nào? Cần các chỉ mục gì?

Ví dụ như chỉ mục, B-cây, băm.

Những người thao tác tại mức này là người quản trị CSDL và những NSDchuyên môn.

Mức quan niệm hay mức logic (conception level, logical level)

Trả lời câu hỏi cần phải lưu trữ bao nhiêu loại dữ liệu? Đó là những dữ liệu gì?Mối quan hệ giữa chúng như thế nào?

Như vậy CSDL mức vật lý là sự cài đặt cụ thể của CSDL mức quan niệm.

Mức ngoài hay mức nhìn (view level)

Là mức của NSD và các chương trình ứng dụng.

Làm việc tại mức này là các nhà chuyên môn, kỹ sư tin học, NSD khôngchuyên.

Mỗi NSD hay mỗi chương trình ứng dụng có thể được nhìn CSDL theo một gócđộ khác nhau. Tuỳ thuộc vào vai trò của NSD mà có thể thấy tất cả hoặc mộtphần của CSDL. NSD hay chương trình ứng dụng có thể không được biết vềcấu trúc tổ chức lưu trữ thông tin trong CSDL. Họ chỉ có thể làm việc trên mộtphần CSDL theo cách nhìn do người quản trị hay chương trình ứng dụng quyđịnh, gọi là khung nhìn.

Page 6: Kiến thức công nghệ và ngôn ngữ

Trang 6

MỨCNGOÀI

MỨC QUANNIỆM

KHUNG NHÌNNGOÀI

KHUNG NHÌNNGOÀI

LƯỢC ĐỒ QUAN NIỆM

LƯỢC ĐỒ TRONG

CƠ SỞ DỮ LIỆU LƯU TRỮ

NGƯỜI SỬ DỤNG

MỨCTRONG

Hình 1.1. Ba mức trừu tượng dữ liệu

1.1.5. Sơ đồ tổng quát một hệ quản trị CSDL

Chương trìnhkhai báo (môtả) cấu trúc

Chương trìnhứng dụng A

Ngônngữ môtả dữliệu

Ngônngữ thao

tác dữliệu

Các tựđiển dữ

liệuCSDL

Hình 1.2. Sơ đồ tổng quát của một hệ quản trị CSDL

Hình 1.2 minh họa sơ đồ tổng quát của một hệ quản trị CSDL. Có 3 mức: mức chươngtrình khai báo cấu trúc và chương trình ứng dụng; mức mô tả CSDL, thao tác CSDL vàcác tự điển dữ liệu; mức CSDL.

Mỗi hệ quản trị CSDL có một ngôn ngữ khai báo hay mô tả (Data Definition Language- DDL) cấu trúc CSDL riêng. Những người thiết kế và quản trị CSDL thực hiện cáccông việc khai báo cấu trúc CSDL.

Các chương trình khai báo cấu trúc CSDL được viết bằng ngôn ngữ mà hệ quản trịCSDL cho phép. Hai công việc khai báo cấu trúc logic (là việc khai báo các loại dữ

Page 7: Kiến thức công nghệ và ngôn ngữ

Trang 7

liệu và các mối liên hệ giữa các loại dữ liệu đó, cùng các ràng buộc toàn vẹn dữ liệu)và khai báo vật lý (dữ liệu được lưu trữ theo dạng nào, có bao nhiêu chỉ mục)

Các chương trình ứng dụng được viết bằng ngôn ngữ thao tác CSDL (DataManipulation Langage - DML) với mục đích:

Truy xuất dữ liệu

Cập nhật dữ liệu (thêm, xóa, sửa)

Khai thác dữ liệu

Ngôn ngữ thao tác CSDL còn được sử dụng cho những người sử dụng thao táctrực tiếp với CSDL.

Tự điển dữ liệu (Data Dictionary - DD) là một CSDL của hệ quản trị CSDL sử dụngđể lưu trữ cấu trúc CSDL, các thông tin bảo mật, bảo đảm an toàn dữ liệu và các cấutrúc ngoài. Tự điển dữ liệu còn được gọi là siêu CSDL (Meta-Database)

1.1.6. Tính độc lập giữa dữ liệu và chương trình

Độc lập dữ liệu vật lý

Khả năng cập nhật lược đồ vật lý không làm cho các chương trình ứng dụngphải bị viết lại.

Việc cập nhật ở mức này thường cần thiết để cải tiến hiệu suất.

Độc lập dữ liệu logic

Khả năng cập nhật lược đồ logic mà không làm cho các chương trình ứngdụng phải bị viết lại.

Những cập nhật thường được thực hiện khi cấu trúc logic của cơ sở dữ liệuthay đổi.

1.2 Mô hình trừu tượng 3 lớp

Để hiểu được quá trình thiết kế một hệ thống cơ sở dữ liệu, chúng ta cần xem xét mộtkhái niệm mô hình trừu tượng 3 lớp trong một hệ thống cơ sở dữ liệu. Mô hình ba lớp

này được thể hiện trong hình vẽ dưới đây

Page 8: Kiến thức công nghệ và ngôn ngữ

Trang 8

Mức bên ngoài là mức khung nhìn của người dùng đối với cơ sở dữ liệu, mô tả các

cách nhìn khác nhau, những yêu cầu khác nhau của người dùng đối với hệ thống dữliệu. Ở mức này, mỗi khung nhìn là một cách thể hiện một phần của cơ sở dữ liệu

tương ứng với người sử dụng. Mỗi người sử dụng cần hệ thống theo một cách thứckhác nhau và có một cách khác nhau, quen thuộc với mỗi người để biểu diễn thế giới

thực được mô tả trong hệ thống. Khung nhìn từ bên ngoài bao gồm các thực thể, cácthuộc tính của chúng và mối quan hệ giữa chúng trong thế giới thực mà người sử dụng

đang quan tâm. Các thực thể khác, thuộc tính khác và các mối quan hệ khác có thể tồntại nhưng không liên quan tới thế giới nhỏ đang cần mô tả đó thì người sử dụng sẽ

không cần nhận thức sự tồn tại đó và không cần đưa chúng vào cơ sở dữ liệu.

Thường thì các khung nhìn khác nhau sẽ có cách biểu diễn khác nhau cho cùng một dữ

liệu. Ví dụ một khung nhìn thể dữ liệu ngày dưới dạng (tháng, ngày, năm) trong khimột khung nhìn khác thể hiện ngày dưới dạng (ngày, tháng, năm). Một vài khung nhìn

có thể bao gồm các dữ liệu phái sinh hoặc dữ liệu tính toán từ những dữ liệu khác.Những dữ liệu phái sinh này thực tế không được lưu trữ trong cơ sở dữ liệu mà chúng

được tạo ra khi cần thiết. Ví dụ một khung nhìn có thể cần tuổi của một người.

Tuy nhiên dữ liệu về tuổi không cần thiết phải lưu trữ trong cơ sở dữ liệu vì nó được

cập nhật hàng. Thay vào đó nó có thể được tính toán từ dữ liệu được lưu trữ trong cơsở dữ liệu biểu diễn ngày sinh của người đó và ngày tháng của hệ thống.

Mức khái niệm là khung nhìn của những người thiết kế cơ sở dữ liệu. Mức này sẽ môtả những dữ liệu cần thiết nào sẽ được lưu trữ trong đó và mối quan hệ giữa chúng. Ởmức này, cấu trúc logic của toàn bộ cơ sở dữ liệu, được nhìn thấy bởi người quản trị

Page 9: Kiến thức công nghệ và ngôn ngữ

Trang 9

cơ sở dữ liệu, được xác định. Nó thể một khung nhìn đầy đủ về các yêu cầu dữ liệu củamột tổ chức mà không phụ thuộc vào bất kỳ một cách thức lưu trữ nào. Nói một cách

khác, mức khái niệm không quan tâm tới việ lưu trữ vật lý của dữ liệu trong hệ thống,

chỉ quan tâm tới việc xác định dữ liệu cần lưu trữ.

Mức khái niệm hỗ trợ cho mỗi khung nhìn từ bên ngoài trong đó bất kỳ dữ liệu sẵn cónào tới người sử dụng cũng cần được lưu lại hoặc có khả năng sinh ra dữ liệu khác ở

mức khái niệm. Mức này sẽ không chứa đựng những thông tin liên quan tới sự phụ

thuộc vào cách lưu trữ vật lý trong hệ thống. Ví dụ, một thực thể có thể được xác địnhbằng cách thể hiện nó như một số nguyên tại mức này nhưng số byte mà nó chiếm giữkhông cần được xác định cụ thể tại mức này.

Mức trừu tượng bên trong thể hiện sự biểu diễn vật lý của cơ sở dữ liệu trong máytính. Mức này sẽ mô tả cách thức dữ liệu được lưu trữ trong cơ sở dữ liệu. Mức trừu

tượng này cũng sẽ mô tả sự cài đặt vật lý cần thiết để đạt được công suất chạy tối ưu

và việc sử dụng không gian lưu trữ tốt nhất. Nó sẽ bao gồm cả các cấu trúc dữ liệu vàviệc tổ chức các tệp dữ liệu được sử dụng để lưu dữ liệu trong các thiết bị lưu trữ. Nócung cấp giao diện với các phương thức truy nhập của hệ điều hành ( Đó là các kỹ

thuật quản lý tệp liên quan tới việc lưu trữ và lấy ra các bản ghi dữ liệu) để đưa dữ liệu

vào các thiết bị lưu trữ, xây dựng các tệp chỉ mục, lấy dữ liệu ra và các công việc khác.

Mức trừu tượng vật lý là mức nằm bên dưới mức bên trong, mức này được quản lýbởi hệ điều hành dưới sự chỉ dẫn của hệ quản trị cơ sở dữ liệu. Các chức năng của hệ

quản trị cơ sở dữ liệu và hệ điều hành ở mức vật lý này không có ranh giới rõ ràng vàsẽ thay đổi từ hệ thống này sang hệ thống khác. Một vài hệ quản trị cơ sở dữ liệu tận

dụng các ưu điểm của các phương pháp truy nhập của hệ điều hành, trong khi một sốhệ quản trị khác sẽ chỉ sử dụng các phương pháp cơ bản và tự tạo ra những kiểu tổ

chức tệp của riêng chúng. Mức trừu tượng vật lý dưới hệ quản trị cơ sở dữ liệu baogồm các thành phần mà chỉ được biết đến bởi hệ điều hành, ví dụ như việc tạo chuỗi

thực hiện các công việc được diễn ra thế nào và liệu các trường của một bản ghi trongcơ sở dữ liệu có được lưu trữ thành các byte liền nhau trên đĩa không.

Khái niệm lược đồ, ánh xạ và thể hiện của cơ sở dữ liệu

Lược đồ cơ sở dữ liệu là một mô tả tổng quát toàn bộ cơ sở dữ liệu. Có ba loại lược đồ

khác nhau và chúng được định nghĩa dựa trên các mức độ trừu tượng của kiến trúctrừu tượng ba lớp.

- Ở mức độ cao nhất, có rất nhiều lược đồ mức ngoài. Mỗi lược đồ này được gọilà một lược đồ con dữ liệu, liên quan tới các khung nhìn khác nhau của dữ liệu.

- Ở mức khái niệm có một lược đồ khái niệ, sẽ mô tả tất cả các thực thể, thuộctính và các mối quan hệ cùng với những ràng buộc toàn vẹn của chúng.

- Mức trừu tượng thấp nhất sẽ có một lược đồ trong, sẽ là một mô tả hoàn thiệnở mô hình bên trong, bao gồm định nghĩa các bản ghi lưu trữ, các phương thức

biểu diễn, v.v…

Page 10: Kiến thức công nghệ và ngôn ngữ

Trang 10

Hệ quản trị cơ sở dữ liệu chịu trách nhiệm ánh xạ giữa ba loại lược đồ này. Nó phảikiểm tra tính đồng nhất giữa ba loại đó; nói một cách khác, hệ quản trị cơ sở dữ liệu

phải kiểm tra xem mỗi lược đồ ngoài có thể suy ra từ lược đồ khái niệm và nó phải sử

dụng các thông tin trong lược đồ khái niệm để ánh xạ từ lược đồ ngoài vào các thànhphần trong lược đồ trong.

Lược đồ mức khái niệm có sự gắn kết với lược đồ bên trong thông qua một chuyển đổi

được gọi là phép ánh xạ mức khái niệm/mức trong. Việc ánh xạ này cho phép hệ quản

trị cơ sở dữ liệu tìm thấy bản ghi thực tế hoặc sự kết hợp của các bản ghi trong bộ lưutrữ vật lý đóng góp một bản ghi logic trong lược đồ khái niệm, cùng với các ràng buộcđược gắn vào các phép toán liên quan tới bản ghi đó.

Mỗi lược đồ bên ngoài có liên kết với lược đồ khái niệm với một phép chuyển đổiđược gọi là phép ánh xạ bên ngoài/khái niệm. Phép chuyển đổi này cho phép hệ quản

trị cơ sở dữ liệu ánh xạ các tên trong khung nhìn của người dùng lên các phần liên

quan với lược đồ khái niệm.

Ví dụ về việc chuyển đổi lược đồ giữa các mức trừu tượng đươc thể hiện như:

Sự độc lập dữ liệu:

Page 11: Kiến thức công nghệ và ngôn ngữ

Trang 11

1.3 Các ngôn ngữ cơ sở dữ liệu

Một ngôn ngữ con dữ liệu bao gồm hai phần: một ngôn ngữ định nghĩa dữ liệu (Data

Definition Language) và một ngôn ngữ thao tác dữ liệu (Data Manipulation Language).

Ngôn ngữ định nghĩa dữ liệu được dùng để xác định lược đồ cơ sở dữ liệu chẳng hạndùng để định nghĩa một quan hệ (một thực thể), các thuộc tính của thực thể đó, cáckiểu dữ liệu của mỗi thuộc tính. Ngôn ngữ thao tác dữ liệu được dùng để đọc và cập

nhật dữ liệu. Các ngôn ngữ này được gọi là ngôn ngữ con dữ liệu bởi vì chúng không

bao gồm các cấu trúc lập trình cần thiết cho việc tính toán như cấu trúc điều kiện hoặccâu lệnh lặp, những cấu trúc được cung cấp bởi các ngôn ngữ lập trình bậc cao. Hầuhết các hệ quản trị cơ sở dữ liệu đều có một môi trường cho phép nhúng các ngôn ngữ

con vào ngôn ngữ lập trình mức cao như COBOL, Pascal, C, C++, Java hoặc VisualBasic, những loại ngôn ngữ lập trình bậc cao này được gọi là ngôn ngữ chủ. Hầu hết

các ngôn ngữ con cũng cung cấp một phiên bản tương tác hay không nhúng vào ngônngữ khác mà được đưa vào trực tiếp từ một thiết bị đầu cuối.

Ngôn ngữ định nghĩa dữ liệu là một ngôn ngữ cho phép một quản trị cơ sở dữ liệuDBA hoặc người dùng mô tả và đặt tên các thực thể, các thuộc tính và các mối quan hệ

cần thiết cho ứng dụng, cùng với các ràng buộc về bảo mật và toàn vẹn liên quan. Kếtquả của việc thực thi hay biên dịch một câu lệnh định nghĩa dữ liệu là một tập các

bảng được thu thập lưu trữ trong các tệp đặc biệt được gọi tên là bảng liệt kê các thànhphần của hệ thống (system catalog). Tệp này cũng thường được gọi với cái tên là từ

điển dữ liệu hay thư mục dữ liệu.

Ngôn ngữ thao tác dữ liệu là một ngôn ngữ cung cấp một tập các thao tác hỗ trợ cho

các phép toán thao tác dữ liệu trên các dữ liệu được lưu trữ trong cơ sở dữ liệu. Cácthao tác của một ngôn ngữ thao tác dữ liệu thường bao gồm - Chèn thêm một dữ liệu

Page 12: Kiến thức công nghệ và ngôn ngữ

Trang 12

mới vào cơ sở dữ liệu - Thay đổi dữ liệu được lưu trữ trong cơ sở dữ liệu - Lấy dữ liệutừ cơ sở dữ liệu ra - Xóa dữ liệu từ cơ sở dữ liệu

Ngôn ngữ truy vấn là một phần quan trọng của ngôn ngữ thao tác dữ liệu liên quan

tới việc lấy dữ liệu ra từ cơ sở dữ liệu. Các ngôn ngữ thao tác dữ liệu được phân biệtbởi các cấu trúc lấy dữ liệu bên trong của nó, và được phân chia làm hai loại chính: cóthủ tục và không thủ tục. Loại ngôn ngữ thao tác dữ liệu có thủ tục là các ngôn ngữ

mà trong đó người dùng có thông báo với hệ thống những dữ liệu nào cần thiết và cách

thức chính xác để lấy dữ liệu ra. Loại ngôn ngữ thao tác dữ liệu không có thủ tục làcác ngôn ngữ trong đó người dùng chỉ thông báo cho hệ thống dữ liệu nào được yêucầu và để hệ thống tự xác định cách thức lấy dữ liệu đó ra cho người sử dụng. Thông

thường thì các ngôn ngữ thao tác dữ liệu có thủ tục sẽ được nhúng vào các ngôn ngữlập trình mức cao. Các ngôn ngữ thao tác dữ liệu có thủ tục có xu hướng tập trung vào

từng bản ghi đơn trong khi loại ngôn ngữ không thủ tục có xu hướng thực hiện trên

một tập các bản ghi.

Các ngôn ngữ thế hệ thứ tư

Chúng ta không có khái niệm về cái gì góp phần vào hình thành một ngôn ngữ

thế hệ thứ tư. Cảm giác chung nó là một ngôn ngữ lập trình rất nhanh, những yêu cầu

được thực hiện với hàng trăm dòng lệnh trong ngôn ngữ thế hệ thứ ba sẽ được thể hiệnchỉ trong một vài dòng mã nguồn của ngôn ngữ thế hệ thứ tư. Ngôn ngữ thế hệ thứ balà thuộc loại thủ tục, trong khi ngôn ngữ thế hệ thứ tư là loại không có thủ tục (đặc tính

của không có thủ tục được trình bày rõ ở trên). Loại ngôn ngữ thế hệ thứ tư bao gồmcác ngôn ngữ làm việc trên bảng tính và trên cơ sở dữ liệu. SQL và QBE (hai loại

ngôn ngữ con dữ liệu liên quan tới bài giảng này) là hai ví dụ của ngôn ngữ thế hệ thứtư.

1.4 Thiết kế cơ sở dữ liệu

Thiết kế cơ sở dữ liệu có thể chia thành sáu bước cơ bản sau. Các mô hình ngữ nghĩa

dữ liệu liên quan nhiều tới ba bước đầu tiên.

Bước 1: Phân tích bài toán nghiên cứu

Đây là bước đầu tiên trong quá trình thiết kế một ứng dụng cơ sở dữ liệu để cóthể hiểu được dữ liệu nào cần được lưu trữ trong cơ sở dữ liệu, ứng dụng nào cần được

xây dựng để sử dụng chúng, và các thao tác dữ liệu nào cần được thực hiện thườngxuyên và các yêu cầu về tốc độ thực hiện của hệ thống. Đây thường là tiến trình không

chính thức liên quan tới những trao đổi với các nhóm người dùng và nghiên cứu môitrường hiện tại. Tiến hành tìm hiểu các ứng dụng hiện có cần được thay thế hoặc bổ trợ

cho hệ thống cơ sở dữ liệu.

Bước 2: Thiết kế cơ sở dữ liệu mức khái niệm

Thông tin được thu thập trong bước phân tích yêu cầu được dùng để phát triểnmột bản mô tả mức tổng quát các dữ liệu cần được lưu trữ trong cơ sở dữ liệu, cùng

với các ràng buộc cần thiết trên những dữ liệu này.

Page 13: Kiến thức công nghệ và ngôn ngữ

Trang 13

Bước 3: Thiết kế cơ sở dữ liệu ở mức logic

Một hệ quản trị cơ sở dữ liệu phải được lựa chọn để cài đặt một cơ sở dữ liệu

và để chuyển đôiỉ bản thiết kế cơ sở dữ liệu mức khái 27 niệm sang lược đồ cơ sở dữ

liệu với mô hình dữ liệu của hệ quản trị cơ sở dữ liệu đã được lựa chọn.

Bước 4: Cải thiện các lược đồ

Trong bước nay các lược đồ được phát triển ở bước 3 được phân tích để phát

hiện ra các vấn đề tiềm ẩn. Tại bước này, các lược đồ sẽ được chuẩn hóa. Việc chuẩn

hóa một cơ sở dữ liệu được dựa trên một lý thuyết toán học rất mạnh và đẹp đẽ. Chúngta sẽ bàn luận về việc chuẩn hóa này vào những buổi giảng sau.

Bước 5: Thiết kế cơ sở dữ liệu vật lý

Tại giai đoạn này, khối lượng công việc tiềm ẩn và các cách thức truy nhậpđược mô phỏng để xác định những điểm yếu tiềm ẩn trong cơ sở dữ liệu khái niệm.

Quá trình này thường là nguyên nhân tạo ra các tệp chỉ mục hoặc/và các quan hệ phân

cụm. Trong các tình huống sống còn, toàn bộ mô hình khái niệm sẽ cần được cấu trúclại.

Bước 6: Thiết kế an toàn bảo mật cho hệ thống

Các nhóm người dùng khác nhau được xác định và các vai trò khác nhau của họ

được phân tích sao cho cách thức truy nhập tới dữ liệu có thể xác định được.

Thông thường quá trình phát triển sẽ có bước thứ bảy hay là bước cuối cùng, được gọilà giai đoạn chuốt lại hệ thống. Trong giai đoạn này, hệ thống cơ sở dữ liệu sẽ được

thực hiện (mặc dù có thể nó chỉ được chạy trên chế độ mô phỏng) và sẽ được trauchuốt, cải thiện để đáp ứng được nhu cầu thực thi trong môi trường mong đợi. Hình vẽ

dưới đây sẽ tóm tắt các bước chính trong quá trình thiết kế cơ sở dữ liệu

Page 14: Kiến thức công nghệ và ngôn ngữ

Trang 14

Chương 2: Mô hình dữ liệu

Mô hình dữ liệu thực thể kết hợp (E-R - entity-relationship data model) do PeterPin_Shan Chen đề xuất năm 1976, nhìn thế giới thực như là một tập các đối tượng cănbản được gọi là các thực thể, và các mối quan hệ ở giữa các đối tượng này. Mô hìnhđã được phát triển để làm thuận tiện cho việc thiết kế cơ sở dữ liệu bằng cách đặc tảmột tổ chức. Một lược đồ như vậy biểu diễn một cấu trúc logic tổng quát của cơ sở dữliệu.

1. Mô hình thực thể kết hợp

Những khái niệm căn bản mà mô hình thực thể kết hợp dùng: thực thể, tập thực thể,khóa, mối quan hệ, và thuộc tính.

1.1. Thực thể - Tập thực thể

Một thực thể (an entity) là một “sự vật” hoặc “đối tượng” mà nó tồn tại và có thể phânbiệt được với các đối tượng khác. Ví dụ như một nhân viên trong một tổ chức là mộtthực thể.

Một tập thực thể (an entity set) là một tập hợp các thực thể cùng loại mà chúng chia sẻcùng những tính chất hoặc thuộc tính. Ví dụ như tập hợp tất cả những người mà họ lànhân viên của một tổ chức là một tập thực thể khách hàng.

Mỗi tập thực thể được đặt một tên gọi, thông thường là danh từ. Ví dụ nhưKHACHHANG, HOADON,…

Ký hiệu: hình chữ nhật với tên gọi

Hình 2.1. Tập thực thể

1.2. Thuộc tính

Mỗi một tập thực thể có nhiều đặc trưng riêng được gọi là các thuộc tính. Mỗi mộtthuộc tính được đặt một tên, chẳng hạn như MaKH (mã khách hàng), HoTenKH (họtên khách hàng)…

Ký hiệu: hình oval với tên gọi, có đường nối với thực thể

Hình 2.2.Thuộc tính của tập thực thể

Khi phân tích một thuộc tính, thông thường cần xét đến kiểu dữ liệu và miền giá trịtương ứng của thuộc tính đó. Chẳng hạn các thuộc tính Mã nhân viên (MANV), Họ tên

Page 15: Kiến thức công nghệ và ngôn ngữ

Trang 15

(HoTen), Ðịa chỉ (DiaChi) là những chuỗi ký tự phản ánh những thông tin trên vềnhân viên; Đơn giá là số nguyên dương,…

Có một số loại thuộc tính sau:

Thuộc tính đơn, kết hợp: Thuộc tính đơn là thuộc tính không thể chia ra thànhnhững phần con nhỏ hơn. Còn thuộc tính kết hợp thì có thể chia ra thành nhữngphần con (tức là thành những thuộc tính khác). Ví dụ tên nhân viên có thể cấutrúc như là thuộc tính kết hợp bao gồm tên, chữ lót, và họ. Thuộc tính kết hợpcó thể xuất hiện theo sự phân cấp. Ví dụ thuộc tính địa chỉ nhân viên có cácthuộc tính thành phần là số nhà, đường, thành phố, tỉnh.

Thuộc tính rỗng. Một giá rỗng (null value) được dùng đến khi một thực thểkhông có giá trị đối với một thuộc tính. Ví dụ một nhân viên nào đó không cóngười trong gia đình thì giá trị của thuộc tính tên người trong gia đình đối vớinhân viên đó phải là rỗng. Giá trị rỗng cũng có thể được dùng để chỉ ra rằng giátrị của thuộc tính là chưa biết. Một giá trị chưa biết có thể hoặc là giá trị tồn tạinhưng chúng ta không có thông tin đó, hoặc là không biết được (không biết giátrị thực sự có tồn tại hay không).

Thuộc tính suy ra. Giá trị của loại thuộc tính này có thể được suy ra từ cácthuộc tính hoặc thực thể liên hệ khác. Ví dụ tập thực thể khách hàng có thuộctính số lượng tài khoản vay cho biết bao nhiêu tài khoản vay mà khách hàng cótừ ngân hàng. Chúng ta có thể suy ra giá trị của thuộc tính này bằng cách đếmsố lượng các thực thể tài khoản vay được kết hợp với khách hàng. Một ví dụkhác về tập thực thể nhân viên có các thuộc tính ngày bắt đầu, cho biết ngày bắtđầu làm việc tại ngân hàng của nhân viên, và thuộc tính thời gian làm việc, chobiết tổng số giờ đã làm việc của nhân viên. Giá trị của thời gian làm việc có thểđược suy ra từ giá trị của ngày bắt đầu và ngày hiện thời.

1.3. Mối kết hợp

Quan hệ giữa các tập thực thể được gọi là mối kết hợp. Mỗi mối kết hợp cũng được đặttên thể hiện mối kết hợp, chẳng hạn như mỗi hóa đơn chỉ bán cho một khách hàng,một khách hàng có thể mua hàng nhiều lần (nhiều hóa đơn)

Ký hiệu là hình thoi nối với những thực thể tham gia vào mối kết hợp

Hình 2.3. a. Mối kết hợp không có thuộc tính

Page 16: Kiến thức công nghệ và ngôn ngữ

Trang 16

Hình 2.3.b. Mối kết hợp có thuộc tính

1.4. Bản số

1.4.1. Thể hiện của một thực thể

Trong tập thực thể KHACHHANG có nhiều khách hàng, ví dụ như {KH01, NguyễnTrọng, Vũ, 11 Nguyễn Công Trứ, 063552540} là một khách hàng, đây được gọi là mộtthể hiện của thực thể KHACHHANG.

Một thể hiện của một tập thực thể được nhận biết bằng tập hợp tất cả các giá trị của tấtcả các thuộc tính của thể hiện thuộc tập thực thể, đó chính là dữ liệu của đối tượngtrong thế giới thực.

1.4.2. Thể hiện của một mối kết hợp

Xét mối kết hợp bán giữa HÓA ĐƠN và MẶT HÀNG, trong đó một thể hiện của quanhệ này sẽ tương ứng với việc một hóa đơn bán mặt hàng với số lượng và đơn giá làbao nhiêu.

Như vậy, một thể hiện của một mối kết hợp là tập hợp các thể hiện của các tập thực thểtham gia vào mối kết hợp đó.

1.4.2.1. Bản số

Bản số của một tập thực thể đối với một mối kết hợp là cặp (bản số tối thiểu, bản số tốiđa). Trong đó chúng được định nghĩa như sau:

Bản số tối thiểu: bằng 0 hoặc 1, là số lần tối thiểu mà một thể hiện bất kỳ củamột tập thực thể tham gia vào các thể hiện của mối kết hợp.

Bản số tối đa: bằng 1 hoặc n, là số lần tối đa mà một thể hiện bất kỳ của một tậpthực thể tham gia vào các thể hiện của mối kết hợp.

Ký hiệu:

Hình 2.4. Bản số

Page 17: Kiến thức công nghệ và ngôn ngữ

Trang 17

Ví dụ một nhân viên thuộc về một hoặc nhiều phòng ban, một phòng ban có thể cómột hoặc nhiều nhân viên trực thuộc.

1.5. Khóa

1.5.1. Khóa của một tập thực thể

Khóa của một tập thực thể là một thuộc tính hoặc một số thuộc tính của thực thể, saocho với mỗi giá trị của các thuộc tính này, tương ứng một và chỉ một thể hiện của tậpthực thể (xác định một thực thể duy nhất).Trong nhiều trường hợp khóa của tập thực thể thường là thuộc tính chỉ định của tậpthực thể đó.

Một thực thể có thể có nhiều khóa. Khi đó cần chọn ra một khóa để làm khóa chính.

Ký hiệu: Là thuộc tính được gạch dưới.

Hình 2.5. Khóa

1.5.2. Khóa của một mối kết hợp

Khóa của một mối kết hợp nhận được bằng cách kết hợp khóa của các tập thực thểtham gia vào mối kết hợp đó. Tập hợp tất cả các giá trị của các thuộc tính khóa củamột mối kết hợp xác định duy nhất một thể hiện của mối kết hợp đó.

Trong mô hình, khóa của mối kết hợp ngầm hiểu mà không được ghi ra nếu khôngquan tâm.

1.6. Số chiều (bậc) của một mối kết hợp, mối kết hợp tự thân (đệ quy)

1.6.1. Số chiều của một mối kết hợp

Số chiều của một mối kết hợp là số tập thực thể tham gia vào mối kết hợp đó.

Hình 2.6. Mối kết hợp nhị phân

1.6.2. Mối kết hợp tự thân (đệ quy, vai trò)

Mối kết hợp tự thân là một mối kết hợp từ một tập thực thể đi đến chính tập thực thểđó.

Page 18: Kiến thức công nghệ và ngôn ngữ

Trang 18

Ví dụ một nhân viên có thể không chịu sự quản lý của ai hoặc một người, một ngườicó thể không quản lý ai hoặc nhiều người.

MaNV

NHANVIEN

HoTen DiaChi

Quan Ly

(0, 1)

(0, n)

Hình 2.7. Mối kết hợp đệ quy

1.7. Tổng quát hóa và chuyên biệt hóa

Mặc dù khái niệm bản số của tập thực thể đối với mối kết hợp cho chúng ta nhận biếtmỗi thể hiện của tập thực thể tham gia tối thiểu là bao nhiêu, và tối đa là bao nhiêu vàomối kết hợp. Nhưng trong thực tế, một lớp các đối tượng trong tổ chức có khi tồn tạitình trạng là: một số đối tượng (tập con) của nó tham gia vào một mối kết hợp này, sốcòn lại có thể tham gia hoặc không vào những mối kết hợp khác, trong khi có thể tất cảcác phần tử của chúng lại cùng tham gia vào mối kết hợp khác nữa. Hoặc một tập connày có những đặc tính này, còn những phần tử khác thì có thêm những đặc tính kháchoặc không. Chẳng hạn cùng là nhân viên trong nhà máy, thì công nhân trực tiếp thamgia sản xuất, nhân viên quản lý tham gia công tác quản lý. Ðối với nhân viên quản lýngười ta quan tâm đến chức vụ, còn đối với nhân viên công nhân thì người ta lại quantâm đến bậc. Ðể phản ánh tình trạng đó trong phương pháp mô hình hóa, người tadùng khái niệm chuyên biệt hóa / tổng quát hóa.

Chuyên biệt hóa nghĩa là phân hoạch một thực thể thành các tập (thực thể) con.

Tổng quát hóa là gộp các tập thực thể thành một tập thực thể bao hàm tất cả các thểhiện của các tập thực thể con. Các chuyên biệt được thừa hưởng tất cả các thuộc tínhcủa các tập thực thể mức trên và chính nó có thể có những thuộc tính khác. Các tậpthực thể chuyên biệt có thể có những mối kết hợp khác nhau với những tập thực thểkhác và do đó các xử lý sẽ có thể khác nhau tùy theo từng chuyên biệt thành phần.

Ký hiệu:

MaNV

NHANVIEN

HoTen DiaChi

ISA

QUANLY CONGNHAN

BacBacChuc vu

Page 19: Kiến thức công nghệ và ngôn ngữ

Trang 19

Hình 2.8. Chuyên biệt hóa / tổng quát hóa

1.8. Tập thực thể yếu

Một tập thực thể có thể không có đủ các thuộc tính để cấu thành một khóa chính, đượcgọi là tập thực thể yếu. Một tập thực thể mà nó có khóa chính được gọi là tập thực thểmạnh. Tập thực thể yếu phải tham gia vào mối quan hệ mà trong đó có một tập thựcthể mạnh (tập thực thể mà tập thực thể yếu phụ thuộc)

Coi tập thực thể thân nhân (THANNHAN) có các thuộc tính là tên thân nhân (TenTN),ngày sinh (NTNS), phái (Phai), quan hệ với nhân viên (QuanHe). Như vậy tập thực thểnày không có khóa chính nên nó là tập thực thể yếu.

Mặc dù tập thực thể yếu không có khóa chính nhưng chúng ta cần một phương tiện đểphân biệt trong số những thực thể thuộc tập thực thể này mà chúng phụ thuộc vào mộtthực thể mạnh nào đó.

Phần phân biệt của một tập thực thể yếu là tập hợp các thuộc tính cho phép sựphân biệt nói trên được thực hiện. Ví dụ thuộc tính tên thân nhân (TenTN) làphần phân biệt của tập thực thể yếu thân nhân (THANNHAN).

Phần phân biệt của một tập thực thể yếu cũng còn được gọi là khóa bộ phận củatập thực thể yếu.

Khóa chính của tập thực thể yếu được hình thành bởi khóa chính của tập thựcthể mạnh mà tập thực thể yếu phụ thuộc vào, cộng với phần phân biệt của tậpthực thể yếu. Ví dụ khóa chính của THANNHAN là MaNV, TenTN.

Kí hiệu:

Một tập thực thể yếu được chỉ ra bởi một hộp nét đôi trong lược đồ, và quan hệ địnhdanh tương ứng được vẽ bởi hình thoi nét đôi. Trong hình, phần phân biệt được gạchdưới gián đoạn.

Hình 2.9. Tập thực thể yếu

2. Ví dụ

2.1. Quản lý đề án

Giả sử sau đây là một số yêu cầu dữ liệu đối với một công ty chuyên thực hiện các đềán:

Công ty gồm nhiều nhân viên, mỗi nhân viên được gán mã nhân viên để tiện việc quảnlý, có họ tên, ngày sinh, mức lương được hưởng. Công ty gồm nhiều phòng ban, mỗiphòng ban có chức năng riêng của mình, có mã phòng, tên phòng, có một trưởngphòng. Mỗi nhân viên chỉ thuộc vào một phòng ban và một phòng có thể có nhiều

Page 20: Kiến thức công nghệ và ngôn ngữ

Trang 20

nhân viên. Mỗi nhân viên trong phòng còn có thể chịu sự quản lý trực tiếp từ một nhânviên khác.

Do công ty thực hiện đề án, nên mỗi phòng có thể có nhiều văn phòng giao dịch haylàm việc khác nhau ở tại những địa điểm khác nhau.

Mỗi một đề án khi được xây dựng, có mã đề án, tên đề án, địa điểm thực hiện đề án đóvà do một phòng ban chịu trách nhiệm chủ trì đề án.

Quá trình thực hiện đề án có thể được chia nhỏ thành nhiều công việc và phân côn chocác nhân viên thực hiện, khi đó công ty sẽ ghi nhận lại thời gian phân công công việccho nhân viên (tính bằng số giờ / tuần) để theo dõi tiến độ thực hiện.

Nhằm có thể chăm lo đời sống của nhân viên, công ty có ghi nhận lại những thông tinvề những thân nhân của nhân viên, bao gồm những người như cha mẹ, chồng vợ, vàcon cái.

Từ mô tả tình huống trên, mô hình quan hệ thực thể như sau:

Thuoc

MaNV

NHANVIEN

HoNV

DiaChiTenNV

MaPhg

PHONGBAN

TenPhg

(1,1) (1,n)

Phai

Luong

La truong phong

(1,1) (1,1)

Quan Ly

(1, n)

(0, n)

DiaDiem

DIADIEM

Co

(1,n)

(1,n)

MaDA

DEAN

DDiemDATenDA

Chu tri

(1,n)

(1,1)

Tham gia

ThoiGian

THANNHAN

(1,n)

(1,n)

MaTN

HoTN

TenTN

Phai

NgaySinh

NgayNhanChuc

Moi quan he

Quan he

(1,n)

(1,n)

Page 21: Kiến thức công nghệ và ngôn ngữ

Trang 21

3. Bài tập

Hãy xây dựng mô hình thực thể kết hợp cho tình huống sau:

Giả sử sau đây là một số yêu cầu dữ liệu đối với ví dụ hoạt động ngân hàng:

Ngân hàng được tổ chức thành các chi nhánh. Mỗi chi nhánh tọa lạc tại một thành phốvà được định danh bởi một tên duy nhất. Ngân hàng theo dõi tài sản của mỗi chi nhánh.

Các khách hàng của ngân hàng được định danh bởi số CMND của họ. Ngân hàng lưutrữ các tên khách hàng, đường phố và thành phố mà khách hàng sinh sống. Kháchhàng có thể có tài khoản gởi và tài khoản vay. Một khách hàng có thể được kết hợp vớimột nhân viên ngân hàng. Nhân viên này có thể là nhân viên cho vay hoặc nhân viênbình thường.

Các nhân viên ngân hàng được định danh bởi mã số nhân viên của họ. Bộ phận quản lýngân hàng lưu trữ tên và số phone của mỗi nhân viên, tên của các người phụ thuộcnhân viên và mã số nhân viên của người quản lý nhân viên. Ngân hàng cũng theo dõingày bắt đầu làm việc của nhân viên, và thời gian thuê nhân viên làm việc.

Ngân hàng đưa ra các loại tài khoản gởi, tài khoản tiết kiệm và tài khoản séc. Các tàikhoản gởi có thể được nắm giữ bởi nhiều hơn một khách hàng, và một khách hàng cóthể có nhiều hơn một tài khoản. Mỗi tài khoản gởi được gán bởi một số tài khoản duynhất. Ngân hàng duy trì thông tin về cân đối của mỗi tài khoản gởi và ngày gần nhấtmà tài khoản gởi được truy cập bởi mỗi khách hàng nắm giữ tài khoản đó. Ngoài ra,mỗi tài khoản tiết kiệm còn có mức lãi suất, và tài khoản séc có số tiền rút vượt mức.

Một tài khoản vay đầu tiên xuất phát từ một chi nhánh nào đó, và nó có thể được nắmgiữ bởi một hoặc nhiều khách hàng. Mỗi tài khoản vay được gán bởi một số tài khoảnduy nhất. Với mỗi tài khoản vay ngân hàng theo dõi số tiền vay và số tiền trả. Mặc dùsố thứ tự lần trả tiền vay (gọi tắt là số lần trả) không xác định duy nhất lần trả đối vớicác tài khoản vay của ngân hàng nhưng nó xác định duy nhất lần trả đối với một tàikhoản vay cụ thể. Ngày và số tiền trả đối với mỗi lần trả tiền vay cũng được ngân hàngtheo dõi ghi nhận.

Page 22: Kiến thức công nghệ và ngôn ngữ

Trang 22

Chương 3: Mô Hình Dữ Liệu Quan Hệ

Mô hình dữ liệu quan hệ lần đầu tiên được đề nghị bởi Edgar F. Codd vào năm 1970.Hiện nay mô hình quan hệ là mô hình ưu thế đối với các ứng dụng xử lý dữ liệuthương mại. Chương này sẽ trình bày chi tiết về các khái niệm đã nhắc tới trongchương 1 và coi đó như là những cơ sở nền tảng để tiếp tục nghiên cứu các phần tiếptheo.

1. Các khái niệm cơ bản

1.1. Thuộc tính

Thuộc tính (attribute) là một tính chất riêng biệt của một đối tượng cần được lưu trữtrong CSDL để phục vụ cho việc khai thác dữ liệu về đối tượng.

Ví dụ:

Đối tượng LOPHOC có các thuộc tính mã lớp, tên lớp, khóa, số học viên.

Đối tượng SINHVIEN có các thuộc tính mã sinh viên, họ tên, ngày sinh, quêquán.

Các thuộc tính được đặc trưng bởi một tên thuộc tính, kiểu giá trị (data type) và miềngiá trị (domain).

Trong các ứng dụng thực tế, người phân tích – thiết kế thường đặt tên thuộc tính mộtcách gợi nhớ, tuy nhiên không nên đặt tên quá dài (vì làm cho việc viết câu lệnh truyvấn vất vả hơn) nhưng cũng không nên quá ngắn (vì không thể hiện được ngữ nghĩamột cách rõ ràng).

Ví dụ: nếu có hai đối tượng HỌCVIEN và GIAOVIEN đều có thuộc tính tên thì nênđặt tên một cách rõ ràng là Tên_học_viên và Tên_giáo _viên vì chúng mang ngữ nghĩahoàn toàn khác nhau.

Mỗi một thuộc tính đều phải thuộc một kiểu dữ liệu. Kiểu dữ liệu có thể là vô hướng -là các kiểu dữ liệu cơ bản như chuỗi, số, logic, ngày tháng… hoặc các kiểu có cấu trúcđược định nghĩa dựa trên các kiểu dữ liệu đã có sẵn.

Mỗi hệ quản trị CSDL có thể gọi tên các kiểu dữ liệu nói trên bằng các tên gọi khácnhau, ngoài ra còn bổ sung thêm một số kiểu dữ liệu riêng của mình. Ví dụ, MicrosoftAccess có kiểu dữ liệu text, memo là kiểu chuỗi; SQL Server có kiểu dữ liệu text, char,varchar, nvarchar là kiểu chuỗi.

Mỗi một thuộc tính có thể chỉ chọn lấy những giá trị trong một tập hợp con của kiểudữ liệu. Tập hợp các giá trị mà một thuộc tính A có thể nhận được gọi là miền giá trịcủa thuộc tính A, thường được ký hiệu là MGT(A) hoặc Dom(A).

Ví dụ:

Điểm của sinh viên là một số, nhưng luôn nằm trong đoạn từ 0 đến 10.

Với kiểu dữ liệu cấu trúc thì miền giá trị chính là tích đề các (hoặc tập con của tích đềcác) của các miền giá trị thành phần.

Page 23: Kiến thức công nghệ và ngôn ngữ

Trang 23

Trong nhiều hệ quản trị CSDL, thường đưa thêm vào miền giá trị của các thuộc tínhmột giá trị đặc biệt gọi là giá trị null. Tùy theo ngữ cảnh mà giá trị này có thể là mộtgiá trị không thể xác định được hay một giá trị chưa được xác định ở thời điểm nhậptin và có thể được xác định vào một thời điểm khác.

Nếu thuộc tính có kiểu dữ liệu vô hướng thì nó được gọi là thuộc tính đơn hoặcnguyên tố, nếu thuộc tính có kiểu dữ liệu có cấu trúc thì ta nói rằng nó là thuộc tínhkép.

1.2. Quan hệ n ngôi

Một quan hệ R có n ngôi được định nghĩa trên tập các thuộc tính nAAAU ,..., 21 và

kèm theo nó là một tân từ, để xác định mối quan hệ giữa các thuộc tính Ai , và đượcký hiệu là nAAAR ,..., 21 . Tập thuộc tính của quan hệ R còn được ký hiệu là R+.

Với Ai là một thuộc tính có miền giá trị là MGT(Ai), như vậy nAAAR ,..., 21 là tập con

của tích đề các: MGT(A1)x MGT(A2)x…x MGT(An)

Quan hệ còn được gọi là bảng (table).

Ví dụ:

KHOA(Mã_khoa, Tên_khoa) là một quan hệ 2 ngôi với tân từ : “Mỗi khoa có một mãkhoa duy nhất để phân biệt với các khoa khác, có một tên gọi”.

SINHVIEN (Mã_sinh_viên, Tên_sinh_viên, Ngày_sinh, Quê_quán, Khoa) là mộtquan hệ 5 ngôi với tân từ : “Mỗi sinh viên có một mã sinh viên duy nhất để phân biệtvới các sinh viên khác, có họ tên, ngày tháng năm sinh, quê quán và học tại một khoatrong trường ”.

1.3. Bộ

Một bộ (tuple) giá trị là các thông tin của một đối tượng thuộc quan hệ. Bộ giá trị cũngthường được gọi là một mẫu tin hay bản ghi (record), dòng của bảng (row).

Một bộ q là một vecto gồm n thành phần thuộc tập hợp con của tích đề các miền giá trịcủa các thuộc tính và thỏa mãn tân từ đã cho của quan hệ.

Ví dụ: các bộ giá trị dựa trên các thuộc tính của quan hệ SINHVIEN

q1 = (SV001, Trần Văn Mạnh, 10/10/1980, Lâm Đồng, CTK27)

q2 = (SV002, Nguyễn Thị Hoa Huệ, 25/11/1985, Khánh Hòa, MTK27)

q3 = (SV003, Tăng Thanh Hà, 11/11/1982, Tp. Hồ Chí Minh, NVK27)

Để lấy thành phần Ai – là giá trị thuộc tính Ai của một bộ giá trị q, ký hiệu q.Ai. Đâyđược gọi là phép chiếu một bộ lên thuộc tính Ai

Ví dụ:

q1.Tên_sinh_viên = “Trần Văn Mạnh”

q2.Khoa= “MTK27”

Page 24: Kiến thức công nghệ và ngôn ngữ

Trang 24

1.4. Lược đồ quan hệ

Lược đồ quan hệ (Relation schema) là sự trừu tượng hóa của quan hệ, một sự trừutượng hóa ở mức cấu trúc của một bảng hai chiều. Khi nói đến lược đồ quan hệ tức làđề cập tới cấu trúc tổng quát của một quan hệ; khi nói đến một quan hệ thì hiểu rằngđó là một bảng có cấu trúc cụ thể trên một lược đồ quan hệ với các bộ giá trị của nó.

Lược đồ cơ sở dữ liệu là tập hợp các lược đồ quan hệ con iR , ký hiệu là ζ.

Thể hiện (hay tình trạng) của quan hệ R, ký hiệu là TR, là tập hợp các bộ giá trị củaquan hệ R vào một thời điểm. Như vậy, tại những thời điểm khác nhau thì quan hệ cónhững thể hiện khác nhau.

Thể hiện của các lược đồ quan hệ con TRi gọi là tình trạng của lược đồ CSDL ζ

Ví dụ về thể hiện của quan hệ KHOA và LOPHOC

Bảng 3.1. Thể hiện của quan hệ KHOA

Mã khoa Tên khoa Ngày thành lập

CNTT Công nghệ thông tin 10/10/1994

TH Toán học 20/10/1976

VL Vật lý 20/10/1976

HH Hóa học 20/10/1976

Bảng 3.2. Thể hiện của quan hệ LOPHOC

Mã lớp Tên lớp Số học viên Mã khoa

CTK27 Công nghệ thông tin K27 75 CNTT

HHK18 Hóa học K18 95 HH

THK20 Toán học K20 120 TH

1.5. Khóa của một quan hệ

Quan hệ R định nghĩa trên tập các thuộc tính nAAAU ,...,, 21

Khi đó UK là khóa của quan hệ R nếu thoả:

(i) K xác định được giá trị của jA , với mọi nj ,...,2,1

Page 25: Kiến thức công nghệ và ngôn ngữ

Trang 25

(ii) Không tồn tại KK ' mà 'K có thể xác định được giá trị của jA , với

mọi nj ,...,2,1

Theo định nghĩa trên, K là tập con nhỏ nhất mà giá trị của nó có thể xác định đượcduy nhất một bộ giá trị của quan hệ.

Khóa theo định nghĩa trên gọi là khóa đề nghị (candidate key).

K được gọi là siêu khóa (superkey) của quan hệ R nếu KK ' là một khóa của quan

hệ. Như vậy một quan hệ Q luôn có ít nhất một siêu khóa và có thể có nhiều siêu khóa.

Ví dụ:

Với quan hệ LOPHOC (MaLop, TenLop, SoSV, MaKhoa)

Siêu khoá :

K1 = {MaLop, TenLop}

K2 = {MaLop, SoSV}

K3= {MaLop, TenLop, MaKhoa}

K4= {MaLop, SoSV, MaKhoa}

Ý nghĩa thực tế của khóa là dùng để nhận diện một bộ trong một quan hệ, khi cần thiếttìm thông tin một bộ q nào đó ta chỉ cần biết giá trị của khóa của q là đủ để dò tìm vàhoàn toàn xác định được nó trong quan hệ.

Trong thực tế, đối với các loại thực thể tồn tại khách quan như NHANVIEN,SINHVIEN, MATHANG,… người thiết kế CSDL thường gán thêm một thuộc tính giảlà mã số để làm khóa như MaNV, MSSV, MaHang,… Đối với các lược đồ quan hệbiểu diễn cho sự trừu tượng hóa thường có khóa chỉ định là một tổ hợp của hai haynhiều thuộc tính.

Trong trường hợp lược đồ quan hệ có nhiều khóa đề nghị, khi cài đặt lên một hệ quảntrị CSDL người ta chọn ra một khóa trong số các khoá đề nghị này để sử dụng. Khi đókhóa này được gọi là khóa chính (primary key) và các khóa còn lại là khóa tươngđương. Khóa chính chỉ thật sự có ý nghĩa trong quá trình khai thác CSDL, khóa chínhhoàn toàn không có vai trò gì khác so với các khóa chỉ định còn lại.

Trong các hệ quản trị CSDL có cài đặt cơ chế tự động kiểm tra tính duy nhất của khóachính. Khi người sử dụng thêm một bộ mới q2 có giá trị khóa chính trùng với giá trịkhóa chính của một bộ q1 đã có trong quan hệ thì hệ thống sẽ báo lỗi và yêu cầu nhậplại giá trị khác.

Các thuộc tính tham gia vào một khóa được gọi là thuộc tính khoá. Về mặt ký hiệu,trong lược đồ quan hệ các thuộc tính khóa được gạch dưới.

Trong một bộ của quan hệ, các thuộc tính khóa không chứa giá trị rỗng.

Page 26: Kiến thức công nghệ và ngôn ngữ

Trang 26

Không được phép sửa đổi giá trị của thuộc tính khoá, nếu người sử dụng muốn sửa giátrị thuộc tính khoá của bộ q, cần phải hủy bỏ bộ q sau đó thêm vào bộ q’ với giá trịkhóa đã được sửa đổi.

Ví dụ: Một lược đồ CSDL như sau:

KHOA (MaKhoa, TenKhoa, NgayThanhLap)

LOPHOC (MaLop, TenLop, NienKhoa, SoHocvien, MaKhoa)

MONHOC (MaMon, TenMon, SoTC)

HOCVIEN (MaHV, HoHV, TenHV, NgaySinh, QueQuan, MaLop)

GIAOVIEN (MaGV, HoGV, TenGV, NgaySinh, HocVi, ChuyenNganh)

KQUATHI (MaHV, MaMon, LanThi, NgayThi, DiemThi, GhiChu)

DAY (MaGV, MaLop, MaMon)

Với hai quan hệ R và S, một tập thuộc tính K của quan hệ R được gọi là khóa ngoại(foreign key) của quan hệ R nếu K là khóa của quan hệ S.

Ví dụ:

Trong quan hệ LOPHOC, MaKhoa là khoá ngoại vì MaKhoa là khóa của quanhệ KHOA.

Trong quan hệ HOCVIEN, MaLop là khoá ngoại vì MaLop là khóa của quan hệLOPHOC.

1.6. Ràng buộc toàn vẹn

Ràng buộc toàn vẹn (RBTV) là một quy tắc định nghĩa trên một hay nhiều quan hệ domôi trường ứng dụng quy định. Đó chính là quy tắc để bảo đảm tính nhất quán của dữliệu trong CSDL.

Thông thường mỗi RBTV được định nghĩa bằng một thuật toán trong CSDL.

Ví dụ:

Trong quan hệ KQUATHI, DiemThi là một số nguyên nằm trong khoảng từ 0đến 10.

Trong quan hệ KQUATHI, LanThi là 1 hoặc 2.

2. Các thao tác cơ bản trên quan hệ

Các thao tác cơ bản trên một quan hệ là thêm (insert), xóa (delete), sửa (update) các bộgiá trị của quan hệ.

2.1. Phép thêm

Việc thêm một bộ mới t vào quan hệ nAAAR ,...,, 21 làm cho thể hiện TR tăng thêm

một phần tử mới tRTR

Dạng thức của phép thêm bộ mới là:

Page 27: Kiến thức công nghệ và ngôn ngữ

Trang 27

nn vAvAvARINSERT ,...,,; 2211 ,

với: nAAA ,...,, 21 là các thuộc tính và nvvv ,...,, 21 là giá trị muốn thêm vào (với điều kiện

là các giá trị này thuộc MGT(A1), MGT(A2),… MGT(An) tương ứng)

Trong trường hợp này nếu như các thuộc tính không được liệt kê trong danh sách gángiá trị của bộ t trong câu lệnh INSERT sẽ nhận giá trị null.

Nếu xem thứ tự của các thuộc tính là cố định và các giá trị nvvv ,...,, 21 là hoàn toàn

tương ứng thì phép chèn có thể viết dưới dạng tường minh như sau:

nvvvRINSERT ,...,,; 21

Chú ý rằng có thể phép chèn không được thực hiện hoặc làm mất tính nhất quán củadữ liệu vì các lý do sau:

Giá trị khóa của bộ mới là null hoặc trùng với giá trị khóa của một bộ đã cótrong CSDL. Hệ quản trị CSDL sẽ không cho thêm mới trong trường hợp này.

Bộ mới không phù hợp với lược đồ quan hệ. Trường hợp này xảy ra khi ngườisử dụng thêm mới các giá trị sai thứ tự, sai kiểu hoặc độ lớn của các thuộc tínhtrong lược đồ. Hệ quản trị CSDL có thể sẽ không cho bổ sung nếu không tươngthích kiểu giá trị, hoặc vẫn cho bổ sung bộ mới nhưng tính nhất quán của dữliệu không được đảm bảo.

Một số giá trị của bộ mới không thuộc miền giá trị của thuộc tính tương ứng.Trong trường hợp này, nếu quan hệ đã được đảm bảo tính nhất quán bởi cácRBTV về miền giá trị thì hệ quản trị CSDL sẽ không cho bổ sung; ngược lại,nếu không có RBTV về miền giá trị thì tính nhất quán của CSDL bị vi phạmmà hệ quản trị CSDL không phát hiện được.

2.2. Phép xóa

Phép xóa bộ t của quan hệ sẽ xóa đi một (hoặc nhiều) bộ t khỏi thể hiện của quan hệtRTR \

Dạng thức của phép xóa là:

nn vAvAvARDELETE ,...,,; 2211 ,

với njvA ji ..1; chính là điều kiện thỏa một số thuộc tính của bộ t để loại một bộ t

ra khỏi quan hệ.

Ví dụ: Với quan hệ:

HOCVIEN (MaHV, HoHV, TenHV, NgaySinh, QueQuan, Khoa),

và phép loại bỏ : ""; NhaTrangQueQuanHOCVIENDELETE

thì tất cả các bộ trong thể hiện HOCVIEN có quê quán ở Nha trang sẽ bị loại bỏ.

2.3. Phép sửa

Dạng thức của phép sửa là:

Page 28: Kiến thức công nghệ và ngôn ngữ

Trang 28

nnnn vAvAvAcAcAcARUPDATE ,...,,;,...,,; 22112211 ,

với njcA ji ..1; là điều kiện thỏa tìm kiếm bộ muốn sửa và njvA ji ..1; là giá

trị mới cần cập nhật

Ví dụ: Với quan hệ: HOCVIEN (MaHV, HoHV, TenHV, NgaySinh, QueQuan,MaLop),

Trong thể hiện của HOCVIEN có bộ:

q = {“HV001”, “Nguyễn Văn”, “Mạnh”, 20/10/85, “Nghệ An”, “CNTT”}

và phép cập nhật: ÑoàngLaâm QueQuanHVMaHVHOCVIENUPDATE ;001;

khi đó kết quả đạt được sẽ là bộ q được sửa lại với giá trị :

q = {“HV001”, “Nguyễn Văn”, “Mạnh”, 20/10/85, “Lâm Đồng”, “CNTT”}

3. Các bước chuyển đổi từ mô hình thực thể kết hợp sang mô hình quan hệ

1.2. Biến các tập thực thể chuyên biệt hóa về dạng bình thường

1.2.1. Tập thực thể chuyên biệt không có thuộc tính riêng

Trong trường hợp này, đưa tập thực thể chuyên biệt lên làm thuộc tính của tập thựcthể mức tổng quát, khi đó có thuộc tính mới cho biết loại của thực thể chuyên biệt

MaNV

NHANVIEN

HoTen DiaChi

ISA

QUANLY CONGNHAN

MaNV

NHANVIEN

HoTen DiaChi Loai

Hình 3.1. Biến đổi tập thực thể chuyên biệt không có thuộc tính riêng

Trong ví dụ trên Loai={NV_QL, NV_CN}

1.2.2. Tập thực thể chuyên biệt có thuộc tính riêng

Nếu số lượng thuộc tính riêng ở tập thực thể chuyên biệt ít, gom lên mức tổng quát,và bổ sung thêm ràng buộc.

Page 29: Kiến thức công nghệ và ngôn ngữ

Trang 29

Hình 3.2. Biến đổi tập thực thể chuyên biệt có thuộc tính riêng

Trong ví dụ trên Loai={NV_QL, NV_CN} và các ràng buộc:

RBTV1: “Nếu Loai = NV_QL thì thuộc tính Chucvu mới có giá trị ”

RBTV2: “Nếu Loai = NV_CN thì thuộc tính Bac mới có giá trị ”

1.3. Chuyển tất cả các tập thực thể thành quan hệ

Tập thực thể mạnh

Với mỗi tập thực thể mạnh, chuyển thành quan hệ với khóa là khóa của tập thực thể.

NHANVIEN (MaNV, HoTen, DiaChi)

PHONGBAN (MaPhong, TenPhong)

Tập thực thể yếu

Với mỗi tập thực thể yếu, chuyển thành quan hệ với:

Các thuộc tính là các thuộc tính của tập thực thể yếu và khóa của tập thực thểmạnh mà nó phụ thuộc

Khóa của quan hệ là khóa của tập thực thể mạnh và phần phân biệt của tập thựcthể yếu.

THANNHAN (MaNV, TenTN, NTNS, Phai, QuanHe)

1.4. Mối kết hợp

Mối kết hợp có bản số (1,1) và (1, n), chuyển thành các quan hệ với:

Tập thực thể có sự tham gia (1, n) chuyển như bình thường

Tập thực thể có sự tham gia (1, 1) chuyển thành quan hệ gồm tất cả các thuộctính của thực thể và thuộc tính khóa của thực thể có sự tham gia (1, n).

Page 30: Kiến thức công nghệ và ngôn ngữ

Trang 30

NHANVIEN (MaNV, HoTen, DiaChi, MaPhong)

PHONGBAN (MaPhong, TenPhong)

Mối kết hợp khác, chuyển thành một quan hệ với:

Thuộc tính là khác khóa của các tập thực thể tham gia vào mối kết hợp và mọithuộc tính của mối kết hợp

Khóa là khóa của các tập thực thể tham gia vào mối kết hợp và có thể có thêmthuộc tính của mối kết hợp

THAMGIA (MaNV, MaDA, ThoiGian): Khóa là khóa của các tập thực thể tham giavào mối kết hợp

1.5. Nhập tất cả các quan hệ có cùng khóa

Sau khi thực hiện chuyển đổi, có thể có một số quan hệ có cùng khóa, khi đó thực hiệnviệc nhập tất cả các quan hệ có cùng khóa lại thành một quan hệ.

Page 31: Kiến thức công nghệ và ngôn ngữ

Trang 31

Chương 4: Ngôn Ngữ Đại Số Quan Hệ

Ngôn ngữ đại số quan hệ là ngôn ngữ phi thủ tục. Nó bao gồm tập hợp các phép toánđược áp dụng trên các thể hiện của quan hệ, kết quả của một câu truy vấn là một thểhiện của quan hệ. Ngôn ngữ đại số quan hệ có ưu điểm trong việc thể hiện kế hoạchthực hiện câu truy vấn và các kỹ thuật tối ưu hóa câu truy vấn.

1. Các phép toán cơ sở

1.1. Các phép toán tập hợp

Các phép toán cơ bản được áp dụng trên tập các bộ giá trị của các quan hệ, được hìnhthành từ lý thuyết tập hợp toán học: hợp hay hội (union), hiệu (minus), giao(intersection), tích đề các (cartesian product operation), chia (division), bù(complement). Quan hệ kết quả của các phép toán hợp, hiệu, trừ có cùng tên thuộc tínhvới quan hệ đầu tiên (quy ước).

Giả thiết: nAAAR ,...,, 21 và nBBBS ,...,, 21

Tính khả hợp

Quan hệ nAAAR ,...,, 21 và nBBBS ,...,, 21 được gọi là khả hợp khi:

Số bậc của R và S là bằng nhau, nghĩa là cùng số lượng thuộc tính.

Miền giá trị của thuộc tính phải tương thích niBMGTAMGT ii 1, vôùi

1.1.1. Phép hợp (union)

Hợp (hay còn gọi là hội) của hai quan hệ khả hợp R và S, ký hiệu SR , là quan hệ Qđược định nghĩa như sau:

StRttSRQ |

Ví dụ:

Page 32: Kiến thức công nghệ và ngôn ngữ

Trang 32

A B A B A B

A1 b1 a1 b2 a1 b1

a1 b2 a2 b3 a1 b2

a2 b1 a2 b1

a2 b3

R S SR

Nói cách khác, hợp của hai quan hệ R và S là một quan hệ có cùng ngôi với quan hệ Rvà S, với các bộ giá trị bằng gộp các bộ của cả R và S, những bộ giá trị trùng nhau chỉgiữ lại 1 bộ. Trong ví dụ trên bộ {a1, b2} xuất hiện trong cả R và S, do đó chỉ xuấthiện 1 lần trong SR

1.1.2. Phép trừ (minus)

Phép trừ (hay còn gọi là hiệu) của hai quan hệ khả hợp R và S, ký hiệu SR , là quanhệ Q được định nghĩa như sau:

StRttSRQ |

Ví dụ:

A B A B A B

a1 b1 a1 b2 a1 b1

a1 b2 a2 b3 a2 b1

a2 b1

R S SR

Nói cách khác, hợp của hai quan hệ R và S là một quan hệ có cùng ngôi với quan hệ Rvà S, với các bộ giá trị là các bộ của cả R sau khi đã loại bỏ các bộ có mặt trong S.

1.1.3. Phép giao (intersect)

Giao của hai quan hệ khả hợp R và S, ký hiệu SR , là quan hệ Q được định nghĩanhư sau:

StRttSRQ |

Ví dụ:

A B A B A B

Page 33: Kiến thức công nghệ và ngôn ngữ

Trang 33

a1 b1 a1 b2 a1 b2

a1 b2 a2 b3

a2 b1

R S SR

Nói cách khác, giao của hai quan hệ R và S là một quan hệ có cùng ngôi với quan hệR và S, với các bộ giá trị là các bộ giống nhau trong cả R và S.

1.1.4. Phép tích đề các (Cartesian Product Operation)

Giả thiết: nAAAR ,...,, 21 và mBBBS ,...,, 21

Phép tích đề các của hai quan hệ của hai quan hệ R và S, ký hiệu RxS , là quan hệ Qđược định nghĩa như sau:

SqRttqRxSQ |

Ví dụ:

A B C D A B C D

a1 b1 c1 d2 a1 b1 c1 d2

a1 b2 c2 d3 a1 b1 c2 d3

a2 b1 a1 b2 c1 d2

a1 b2 c2 d3

a2 b1 c1 d2

a2 b1 c2 d3

R S RxS

Vậy tích đề các của hai quan hệ R và S là một quan hệ gồm (n+m) ngôi với n thuộctính đầu là một bộ của R và m thuộc tính sau là một bộ thuộc S.

1.1.5. Phép chia (division)

Giả thiết: nAAAR ,...,, 21 và mBBBS ,...,, 21 ( Smn , ), có m thuộc tính chung.

Khi đó phép chia trên 2 quan hệ R và S, ký hiệu SR , là quan hệ Q có (n-m) ngôiđược định nghĩa như sau:

RutSutSRQ ,,|

Ví dụ 1:

Page 34: Kiến thức công nghệ và ngôn ngữ

Trang 34

A B C D C D A B

a1 b1 c1 d1 C1 d1 a1 b1

a1 b1 c2 d3 C2 d3 a2 b1

a2 b1 c2 d3

a2 b1 c1 d1

a3 b1 c1 d3

R S SR

Nói cách khác, phép chia của quan hệ R cho S đưa ra tất cả các bộ trong quan hệ R,sao cho khớp với tất cả các bộ trong quan hệ S

1.2. Các phép toán quan hệ

Phần này trình bày các phép toán trên quan hệ và ví dụ minh họa dựa trên lược đồ cơsở dữ liệu Quản lý đề án:

NHANVIEN (MaNV, HoNV, tenNV, NgaySinh, DiaChi, Phai, Luong,MaNQL, Phong)

Tân từ: Mỗi nhân viên có Mã nhân viên (MaNV) duy nhất để phân biệt với các nhânviên khác, có họ tên (HoNV, TenNV), ngày sinh (NgaySinh), địa chỉ (DiaChi), pháiNam hoặc Nữ (Phai), mức lương (Luong), người quản lý trực tiếp (MaNQL) và thuộcvề một phòng ban (Phong)

PHONGBAN (MaPhong, TenPhong, TruongPhong, NgayNhanChuc)

Tân từ: Mỗi một phòng ban có một mã phòng duy nhất (MaPhong) để phân biệt vớicác phòng ban khác, có tên phòng (TenPhong), người trưởng phòng (TruongPhong),và ngày nhận chức của trưởng phòng (NgayNhanChuc)

DIADIEMPHONG (MaPhong, DiaDiem)

Tân từ: Mỗi một phòng ban (MaPhong) có thể có nhiều địa điểm làm việc khác nhau(DiaDiem)

DEAN (MaDA, TenDA, DdiemDA, Phong)

Tân từ: Mỗi một đề án có một mã đề án duy nhất (MaDA) để phân biệt với các đề ánkhác, có tên đề án (TenDA), địa điểm thực hiện (DdiemDA), và do một phòng banchủ trì đề án đó (Phong)

PHANCONG (MaNV, MaDA, ThoiGian)

Tân từ: Mỗi một nhân viên (MaNV) được phân công tham gia đề án (MaDA) dướidạng tham gia số giờ trên 1 tuần (ThoiGian)

Page 35: Kiến thức công nghệ và ngôn ngữ

Trang 35

THANNHAN(MaTN, HoTN, TenTN, Phai, NgaySinh)

Tân từ: Mỗi thân nhân có Mã thân nhân (MaTN) duy nhất để phân biệt với các thânnhân khác, có họ tên (HoTN, TenTN), phái (Phai) ngày sinh (NgaySinh)

NVIEN_TNHAN(MaNV, MaTN, QuanHe)

Tân từ:Mỗi nhân viên (MaNV) có thể có nhiều thân nhân (MaTN), được diễn giải bởiquan hệ (QuanHe) như vợ, chồng, con, anh em…

1.2.1. Phép chọn (selection)

Cho phép chọn ra những bộ trong R thỏa mãn biểu thức điều kiện chọn P cho trước.Ký hiệu là )(RP với định nghĩa:

)(|)( tPRttRP

với R là quan hệ được chọn, P là biểu thức logic chứa các phép so sánh ( ,..,,, ),các phép toán logic ( ,, ) dạng:

<Thuộc tính> <phép so sánh> <Thuộc tính> hay <Hằng số>

Như vậy kết quả của phép chọn là một quan hệ có cùng danh sách thuộc tính với quanhệ R.

Ví dụ:

Chọn những nhân viên có lương >= 500000

NHANVIENLuong 500000

Cho biết những nhân viên thuộc phòng số 5 và có lương >= 500000

NHANVIENPhongLuong 5500000

1.2.2. Phép chiếu (projection)

Cho phép trích chọn ra những cột (thuộc tính) trong R chỉ ra trong danh sách thuộctính. Ký hiệu là )(,...,, 21

RkAAA với nAAA ,..,, 21 là danh sách các thuộc tính cần chọn và

R là quan hệ cần trích chọn.

Nhận thấy rằng số lượng các bộ kết quả luôn nhỏ hơn hoặc bằng số lượng các bộtrong R. Các bộ trùng nhau sẽ loại đi và chỉ giữ lại bộ.

Ví dụ:

Cho biết mã nhân viên, họ tên của tất cả các nhân viên

NHANVIENTenNVHoNVMaNV ,,

Cho biết mã nhân viên, họ tên, phòng làm việc và mức lương của tất cả cácnhân viên

NHANVIENLuongPhongTenNVHoNVMaNV ,,,,

Cho biết các đề án cùng với các phòng phụ trách đề án đó

DEANPhongTenDAMaDA ,,

Page 36: Kiến thức công nghệ và ngôn ngữ

Trang 36

1.2.3. Phép gán (assignment)

Khi gặp những truy vấn phức tạp, phép gán cho phép diễn tả một cách rõ ràng hơn câutruy vấn. Khi đó, câu truy vấn chính là một chuỗi các phép gán theo sau đó là mộtbiểu thức có giá trị như là kết quả của câu truy vấn.

Ký hiệu:

Việc gán được thực hiện cho một biến quan hệ tạm và được sử dụng cho các biểu thứctheo sau.

1.2.4. Phép đổi tên:

Vì cho phép đặt tên nên có thể tham chiếu tới kết quả của biểu thức đại số quan hệ, vàcho phép tham chiếu tới một quan hệ bằng nhiều tên

Các phép đổi tên sau:

Đổi tên quan hệ và tên thuộc tính: Cho biểu thức đại số quan hệ E có n thuộctính, biểu thức )(,...,,,1

EnAAA trả về kết quả biểu thức E dưới tên và các tên

của thuộc tính đổi thành nAAA ,...,, 21

Đổi tên quan hệ: Cho biểu thức đại số quan hệ E, biểu thức )(E trả về kết

quả biểu thức E dưới tên

Đổi tên thuộc tính: Cho biểu thức đại số quan hệ E có n thuộc tính, biểu thức

)(,...,,,1E

nAAA trả về kết quả biểu thức E với các tên của thuộc tính đổi thành

nAAA ,...,, 21

1.2.5. Chuỗi các phép toán

Kết hợp các phép toán đại số quan hệ với nhau để tạo ra một quan hệ kết quả theo yêucầu.

Có nhiều cách để thể hiện một truy vấn cho trước.

Ví dụ: Cho biết mã nhân viên, họ tên cùng lương của nhân viên làm việc trong phòngsố 4

Cách 1: NHANVIENPhongLuongTenNVHoNVMaNV 4,,,

Cách 2:

4_

4_

,,,

4

PNVIENKQ

NHANVIENPNVIEN

LuongTenNVHoNVMaNV

Phong

Cách 3:

4_,,,

4_

,,,

4

PNVIENLuongNVTenNVHoNVMaNVKQ

NHANVIENPNVIEN

LuongTenNVHoNVMaNV

Phong

Trong đó có sử dụng phép gán và phép đặt lại tên.

2. Các phép toán khác

Page 37: Kiến thức công nghệ và ngôn ngữ

Trang 37

2.1. Phép kết hai quan hệ

Giả thiết: nAAAR ,...,, 21 và mBBBS ,...,, 21 , việc ghép bộ Raaat n ),...,,( 21 vào

Sbbbv m ),...,,( 21 được định nghĩa như sau:

RA và SB là hai thuộc tính có thể so sánh được.

Gọi là một trong các phép so sánh ,,,,,

Khi đó, phép kết nối hai quan hệ R và S trên các thuộc tính A, B với phép so sánh

được định nghĩa:

R S = BuAtSuRtutv ..,,|,

Có thể nhận thấy rằng phép kết nối được thực hiện qua 2 bước: (1) tích đề các hai quan

hệ R và S, (2) chọn các bộ thỏa điều kiện AB.

Nếu là phép toán so sánh bằng nhau được gọi là phép kết nối bằng (equi join). Nếucác thuộc tính so sánh là giống tên nhau thì trong kết quả của phép nốisẽ loại đi mộtcột (thuộc tính), khi đó phép kết được gọi là phép kết tự nhiên (natural join) và về mặt

ký hiệu bỏ đi AB. Các trường hợp còn lại được gọi là phép kết nối theta ( join)

Ví dụ:

A B C C D E A B C C D E

a1 1 1 1 d1 e1 a1 1 1 1 d1 e1

a2 2 1 2 d2 e2 a2 2 1 1 d1 e1

a3 2 2 3 d3 e3 a2 2 1 2 d2 e2

a3 2 2 1 d1 e1

a3 2 2 2 d2 e2

R S R S

Và kết quả của phép nối tự nhiên (kết bằng trên thụôc tính C) là

A B C D E

a1 1 1 d1 e1

a2 2 1 d1 e1

AB

R.BS.C

Page 38: Kiến thức công nghệ và ngôn ngữ

Trang 38

a3 2 2 d2 e2

2.2. Phép kết nối nội (inner join)

Thực chất của phép kết nối nội là phép kết nối bằng đã nêu trên. Tuy nhiên, ngay cảkhi hai thuộc tính có cùng tên thì kết quả vẫn giữ lại 2 tên thuộc tính đó.

Ví dụ:

A B C A D E A B C A D E

a1 B1 c1 a1 d1 e1 a1 b1 c1 a1 d1 E1

a2 B2 c1 a2 d2 e2 a2 b2 c1 a2 d2 E2

a3 B3 c2 a4 d4 e4 a7 b7 c7 a7 d7 E7

a5 B5 c5 a6 d6 e6

a7 B7 c7 a7 d7 e7

R S R S

2.3. Phép kết nối trái (left join)

Phép kết nối trái hai quan hệ R và S trên các thuộc tính A và B với phép so sánh bằngđược định nghĩa là tất cả các bộ v đạt được bằng cách xếp bộ giá trị của R và S cạnhnhau, nếu có giá trị giống nhau trên hai thuộc tính kết nối; và các bộ v đạt được nhờcách đặt bộ R với các bộ null của S, nếu không tìm được giá trị tương ứng của thuộctính kết nối trên quan hệ S.

R S = BSAtuuRtBuAtSuRtutv null .:,..:,|,

Với S[B] là tập tất cả các giá trị của thuộc tính B của S

Ví dụ:

A B C A D E A B C A D E

a1 b1 c1 a1 d1 e1 a1 b1 c1 a1 d1 e1

a2 b2 c1 a2 d2 e2 a2 b2 c1 a2 d2 e2

R.A=S.B

R.A=S.A

Page 39: Kiến thức công nghệ và ngôn ngữ

Trang 39

R.A=S.A

a3 b3 c2 a4 d4 e4 a3 b3 c2 null null null

a5 b5 c5 a6 d6 e6 a5 b5 c5 null null null

a7 b7 c7 a7 d7 e7 a7 b7 c7 a7 d7 e7

R S R S

Ý nghĩa của phép kết nối này là xác định được các bộ giá trị của quan hệ bên tráinhưng không có bộ giá trị tương ứng trong quan hệ bên phải.

2.4. Phép kết nối phải (right join)

Phép kết nối phải hai quan hệ R và S trên các thuộc tính A và B với phép so sánh bằngđược định nghĩa là tất cả các bộ v đạt được bằng cách xếp bộ giá trị của R và S cạnhnhau, nếu có giá trị giống nhau trên hai thuộc tính kết nối; và các bộ v đạt được nhờcách đặt bộ null của R với các bộ của S, nếu không tìm được giá trị tương ứng củathuộc tính kết nối trên quan hệ R.

R S = ARBuSuttBuAtSuRtutv null .:,,..:,|,

Với R[A] là tập tất cả các giá trị của thuộc tính A của R

Ví dụ:

A B C A D E A B C A D E

a1 b1 c1 a1 d1 e1 a1 b1 c1 a1 d1 e1

a2 b2 c1 a2 d2 e2 a2 b2 c1 a2 d2 e2

a3 b3 c2 a4 d4 e4 null null Null a4 d4 e4

a5 b5 c5 a6 d6 e6 null null Null a6 d6 e6

a7 b7 c7 a7 d7 e7 a7 b7 c7 a7 d7 e7

R S R S

Ý nghĩa của phép kết nối này là xác định được các bộ giá trị của quan hệ bên phảinhưng không có bộ giá trị tương ứng trong quan hệ bên trái.

Chú ý rằng trong một số ngôn ngữ truy vấn CSDL, người ta gọi hai phép kết nối tráivà phải chung lại là phép kết nối ngoài (outer join) vì cho phép giữ lại tất cả các bộcủa hai quan hệ không tìm được bộ giá trị giống nhau trên các thuộc tính kết nối.

2.5. Hàm kết hợp và gom nhóm

R.A=S.B

R.A=S.A

Page 40: Kiến thức công nghệ và ngôn ngữ

Trang 40

Dùng để tính toán các giá trị mang tính chất tổng hợp trong đại số quan hệ. Trong đó:

Hàm kết hợp: đầu vào là một tập giá trị và trả về một giá trị đơn

Avg(): giá trị trung bình

Min(): giá trị nhỏ nhất

Max(): giá trị lớn nhất

Sum(): tính tổng

Count(): đếm số mẫu tin

Gom nhóm: công thức như sau: )()(),...,2(2),1(1,.., 21EAnFnAFAFGGG N

, với:

E là biểu thức đại số quan hệ

Gi là tên thuộc tính gom nhóm (có thể không có)

Fi là hàm gom nhóm

Ai là tên thuộc tính tính toán trong hàm gom nhóm

Ví dụ:

Cho biết số nhân viên trong công ty và mức lương trung bình

)()(),( NHANVIENLuongAVGMaNVCOUNT

Cho biết số lượng nhân viên và lương trung bình của mỗi phòng ban

)()(),( NHANVIENLuongAVGMaNVCOUNTPhong

2.6. Các phép toán cập nhật trên quan hệ

Các thao tác được viết thông qua phép toán gán. Cụ thể như sau:

2.6.1. Thêm

Phép thêm: Err , với r là một quan hệ và E là một biểu thức đại số quan hệ.

Thông thường, đưa ra bộ cần chèn một cách tường minh hoặc viết một câu truy vấnmà kết quả truy vấn chính là một tập các bộ cần chèn.

Ví dụ: Chèn một bộ tường minh

}4,','','01{' Troïng' Ñöùc hoïctin caäp PhoåDADEANDEAN

2.6.2. Xóa

Phép xoá: : Err , với r là một quan hệ và E là một biểu thức đại số quan hệ. Chúý rằng phép xóa thực hiện xóa một hoặc nhiều bộ mà không thể xóa đi giá trị của cácthuộc tính.

Ví dụ:

Xóa tất cả các phân công công tác tham gia đề án của nhân viên mang mã sốNV01

NHANVIENPHANCONGPHANCONG NVMaNV '01'

Page 41: Kiến thức công nghệ và ngôn ngữ

Trang 41

Xóa tất cả các đề án do phòng mang tên ‘Quản Lý’ chủ trì

2

)1(2

1

,,,

''

rDEANDEAN

rr

DEANPHONGBANr

PhongDDiemDATenDAMaDA

QuanLýTenPhong

PhongMaPhong

2.6.3. Sửa

Phép sửa: )(,...,2,1 rr FnFF , với:

Fi là một biểu thức, gồm hằng và thuộc tính của r để đưa ra giá trị mới chothuộc tính này.

Mỗi Fi có giá trị trả về là giá trị mới cho thuộc tính thứ i của r, thuộc tính nàycó thể được giữ nguyên hoặc cập nhật với giá trị mới.

Phép sửa có thể được viết thông qua phép xóa và thêm. Khi đó, phép xóa sẽ xóa đi cácbộ chứa giá trị cũ và phép thêm sẽ thêm những bộ chứa giá trị mới.

Ví dụ:

Cộng thêm lương mỗi nhân viên với số tiền là 120000

NHANVIENNHANVIEN PhongMaNQLLuongPhaiDiaChiNgaySinhTenNVHoNVMaNV ,,120000,,,,,,

Với nhân viên nam, cộng thêm lương với số tiền là 100000; với nhân viên nữ,cộng thêm lương với số tiền là 150000

NHANVIEN

NHANVIENNHANVIEN

NuPhaiPhongMaNQLLuongPhaiDiaChiNgaySinhTenNVHoNVMaNV

NamPhaiPhongMaNQLLuongPhaiDiaChiNgaySinhTenNVHoNVMaNV

'',,150000,,,,,,

'',,100000,,,,,,

3. Bài tập

Bài 1:

Với lược đồ cơ sở dữ liệu Quản lý đề án trong 2.2. Hãy viết các biểu thức đại số quanhệ theo yêu cầu:

1. Cho biết thông tin cá nhân về những nhân viên có tên ‘Mai’

2. Tìm mã nhân viên, họ tên và địa chỉ của tất cả nhân viên làm việc phòng ‘HànhChính’

3. Tìm mã nhân viên, họ tên và địa chỉ của tất cả nhân viên làm việc phòng ‘HànhChính’ và ‘Tài Vụ’

4. Cho biết mã nhân viên , họ tên nhân viên và tên các đề án mà nhân viên thamgia.

5. Tìm mã đề án, tên đề án, tên phòng ban chủ trì đề án cùng mã trưởng phòng, têntrưởng phòng đó.

6. Cho biết mã nhân viên, họ tên của những nhân viên tham gia vào đề án có mã là‘DA01’ và có thời gian làm việc cho đề án trên 30giờ/tuần

Page 42: Kiến thức công nghệ và ngôn ngữ

Trang 42

7. Cho biết mã nhân viên, họ tên của những nhân viên có cùng tên với người thân.

8. Cho biết mã nhân viên, họ tên của những nhân viên có người trưởng phòng cóhọ tên là ‘Nguyễn’ ‘Mai’

9. Cho biết mã nhân viên, họ tên của những nhân viên có người quản lý có họ tênlà ‘Nguyễn’ ‘Mai’

10.Cho biết mã nhân viên, họ tên của những nhân viên tham gia mọi đề án củacông ty.

11.Cho biết mã nhân viên, họ tên của những nhân viên không tham gia đề án nàocủa công ty.

12.Cho biết mức lương trung bình của nhân viên trong công ty.

13.Cho biết mức lương trung bình của nhân viên nam trong công ty.

14.Cho biết tổng số đề án của công ty.

15.Với mỗi đề án, cho biết tổng số nhân viên tham gia vào đề án.

16.Với mỗi đề án, cho biết tổng số nhân viên nữ tham gia vào đề án.

17.Tăng thời gian tham gia đề án của các nhân viên nam thêm 4giờ/tuần

18.Xóa tất cả những nhân viên có mức lương dưới 500000

Bài 2:

Cho lược đồ CSDL Quản lý sinh viên sau:

SINHVIEN (MaSV, HoSV, TenSV, NgaySinh, DiaChi, Phai, Nam, Khoa)

Tân từ: Mỗi sinh viên có Mã sinh viên (MaSV) duy nhất để phân biệt với các sinhviên khác, có họ tên (HoSV, TenSV), ngày sinh (NgaySinh), địa chỉ (DiaChi), pháiNam hoặc Nữ (Phai), năm nhập học (Nam) và thuộc về một khoa (Khoa)

GIANGVIEN (MaGV, HoGV, TenGV, NgaySinh, DiaChi, Phai, ChuyenNganh, Khoa)

Tân từ: Mỗi giảng viên có Mã giảng viên (MaGV) duy nhất để phân biệt với các giảngviên khác, có họ tên (HoGV, TenGV), ngày sinh (NgaySinh), địa chỉ (DiaChi), pháiNam hoặc Nữ (Phai), chuyên ngành (ChuyenNganh) và thuộc về một khoa (Khoa)

MONHOC (MaMH, TenMH, STC, Loai, Khoa)

Tân từ: Mỗi môn học có mã môn học (MaMH) duy nhất để phân biệt với các môn họckhác, có tên môn học (TenMH), số tín chỉ (STC), là loại bắt buộc hay tự chọn (Loai),và do một khoa (Khoa) chịu trách nhiệm giảng dạy.

DIEUKIEN (MaMH, MaMHTruoc)

Tân từ:Một số môn học có điều kiện tiên quyết, sinh viên muốn học môn học (MaMH)thì phải đạt được môn tiên quyết của môn học này (MaMHTruoc)

KHOAHOC (MaKH, MaMH, HocKy, NamHoc, MaGV)

Tân từ: Một môn học (MaMH) được tổ chức trong học kỳ (HocKy) của một năm học(NamHoc) và do một giảng viên chịu trách nhiệm giảng dạy (MaGV). Lưu ý rằng một

Page 43: Kiến thức công nghệ và ngôn ngữ

Trang 43

môn học có thể được mở nhiều lần (chẳng hạn năm học 2007-2008 mở cho khoáCTK29, năm học 2008-2009 mở cho khoá CTK30). Trong quan hệ này, mã khoá học(MaKH) thể hiện việc một lần tổ chức giảng dạy môn học.

KETQUA (MaSV, MaKH, Diem, KetQua)

Tân từ: Khi sinh viên (MaSV) tham gia học môn học tại một khoá học (MaKH) sẽ cóđiểm đánh giá (Diem) của học viên, từ điểm đánh giá sẽ có kết quả (KetQua) đạt haykhông đạt.

Hãy viết các biểu thức đại số quan hệ theo yêu cầu:

1. Cho biết mã sinh viên, họ tên của mọi sinh viên

2. Cho biết mã môn học, tên môn học và số tín chỉ tương ứng

3. Cho biết mã môn học, tên môn học phải học trước môn có mã là ‘CT101’

4. Cho biết mã sinh viên, họ tên sinh viên cùng với các khóa học mà sinh viên đạttrên 5 điểm.

5. Cho biết mã sinh viên, họ tên sinh viên học tất cả các khóa học.

6. Cho biết tổng số sinh viên của mỗi khoa.

7. Cho biết mã sinh viên, họ tên sinh viên đạt điểm cao nhất trong mỗi khóa học

8. Cho biết mã sinh viên, họ tên sinh viên và điểm trung bình của sinh viên trongtừng học kỳ của từng niên học

9. Cho biết mã giáo viên, họ tên giáo viên và chuyên ngành của những giáo viêntham gia dạy năm 2004-2005

10.Tăng số tín chỉ lên 1 cho những môn học được học trong học kỳ 1, năm 2004-2005

11.Từ điểm của sinh viên, hãy điền vào cột KetQua thỏa: nếu điểm>=5: đạt, ngượclại: không đạt.

Page 44: Kiến thức công nghệ và ngôn ngữ

Trang 44

Chương 5: Ngôn Ngữ Truy Vấn SQL

SQL (Structured Query Language) là ngôn ngữ CSDL quan hệ chuẩn dành cho cácCSDL quan hệ thương mại.

Từ những năm 70, SQL được phát triển từ IBM với hệ quản trị CSDL quan hệSYSTEM-R với ngôn ngữ giao tiếp CSDL là Sequel (Structured English QueryLanguage).

Năm 1986, phiên bản chuẩn được chấp nhận bởi ANSI (American National StandardsInstitute) gọi là SQL-86 hay SQL1 và năm 1987 được chấp nhận bởi ISO(International Standards Organization). Từ đó các phiên bản đã được đưa ra vào 1992,1999, 2003.

1. Các lệnh hỏi

Các lệnh hỏi hay còn được gọi là truy vấn rút trích dữ liệu. Lệnh SELECT là lệnh cơbản để rút trích thông tin từ CSDL.

Chú ý rằng lệnh SELECT không hoàn toàn giống như phép toán chọn trong đại sốquan hệ, SQL cho phép một bảng có hai hay nhiều bộ có giá trị giống nhau trên mọithuộc tính cùng tồn tại

1.1. Cú pháp lệnh truy vấn

Cú pháp lệnh truy vấn:

SELECT <danh sách thuộc tính>

FROM <danh sách các bảng>

WHERE <điều kiện>

GROUP BY <các thuộc tính gom nhóm>

HAVING <điều kiện gom nhóm>

ORDER BY <danh sách thuộc tính>

với:

SELECT <danh sách thuộc tính>: tên các thuộc tính được lấy giá trị

FROM <danh sách các bảng>: tên các bảng cần để xử lý câu truy vấn

WHERE <điều kiện>: biểu thức điều kiện chọn và điều kiện kết các bộ trongcác quan hệ được chỉ ra trong mệnh đề FROM

GROUP BY <các thuộc tính gom nhóm>: chỉ ra các thuộc tính gom nhóm

HAVING <điều kiện gom nhóm>: chỉ ra điều kiện để trích chọn các nhóm

ORDER BY <danh sách thuộc tính>: thứ tự hiển thị kết quả câu truy vấn

Trong câu lệnh, SELECT và FROM là bắt buộc, những thành phần còn lại có thểkhông có.

1.2. Phép chiếu

Page 45: Kiến thức công nghệ và ngôn ngữ

Trang 45

Sử dụng mệnh đề SELECT, kết quả gần giống với phép chiếu của đại số quan hệ, liệtkê các thuộc tính cần hiển thị trong kết quả câu truy vấn.

Ví dụ:

Tìm mã nhân viên, họ tên tất cả các nhân viên

SELECT MaNV, HoNV, TenNV

FROM NHANVIEN

Tìm mã đề án, tên các đề án

SELECT MaDA, TenDA

FROM DEAN

1.3. Phép chọn

Sử dụng mệnh đề WHERE, kết quả gần giống với phép chọn của đại số quan hệ, nêuđiều kiện liên quan đến thuộc tính của quan hệ xuất hiện trong mệnh đề FROM.Thường sử dụng AND, OR, NOT, BETWEEN, các phép toán so sánh.

Ví dụ:

Tìm mã nhân viên, họ tên tất cả các nhân viên nam

SELECT MaNV, HoNV, TenNV

FROM NHANVIEN

WHERE Phai=’Nam’

1.4. Phép kết

Trong mệnh đề WHERE thường có điều kiện kết nếu như trong mệnh đề FROM cónhiều hơn hai quan hệ.

Ví dụ:

Tìm mã nhân viên, họ tên tất cả các nhân viên tham gia vào đề án có mã‘DA01’

SELECT MaNV, HoNV, TenNV

FROM NHANVIEN, PHANCONG

WHERE NHANVIEN.MaNV= PHANCONG.MaNV AND MaDA=’DA01’

Tìm mã nhân viên, họ tên tất cả các nhân viên làm việc tại phòng ‘Tài chính’

SELECT MaNV, HoNV, TenNV

FROM NHANVIEN, PHONGBAN

WHERE Phong=MaPhong AND TenPhong = ‘Tài chính’

1.5. Một số lưu ý

Sử dụng *

Page 46: Kiến thức công nghệ và ngôn ngữ

Trang 46

Khi cần lấy thông tin về tất cả các cột của bảng thì sử dụng dấu sao (*) thay vì phảiliệt kê mọi tên thuộc tính.

Ví dụ:

SELECT *

FROM NHANVIEN

Tên bí danh

Khi câu truy vấn cần tham chiếu tới cùng một quan hệ 2 lần thì dùng bí danh cho tênquan hệ. SQL cho phép đổi tên quan hệ và tên thuộc tính được thực hiện bằng AS (cóthể dùng hoặc không) theo quy tắc: Tên cũ [as] tên mới

Ví dụ:

SELECT MaNV, HoNV as Ho, TenNV as Ten

FROM NHANVIEN

WHERE Phai=’Nam’

Biểu thức trong mệnh đề SELECT

Tên thuộc tính có thể kèm theo tên bảng nếu cần làm rõ bằng cách thêm dấu chấm (.)trước tên thuộc tính. Ví dụ: NHANVIEN.MaNV.

Câu lệnh SELECT còn cho phép thực hiện tính toán theo công thức dựa trên các cộtcủa bảng.

Ví dụ:

Tìm mã nhân viên, họ tên và lương nhân viên, trong đó lương được tăng thêm20% cho mọi nhân viên

SELECT MaNV, HoNV, TenNV, Luong*1.2

FROM NHANVIEN

DISTINCT

Như đã trình bày ở trên, SQL cho phép các bộ trùng nhau trong kết quả câu truy vấn.Để loại bỏ các bộ trùng nhau, sử dụng từ khóa DISTINCT sau SELECT.

Ví dụ:

Cho biết những mức lương hiện có trong công ty

SELECT DISTINCT Luong

FROM NHANVIEN

Phép so sánh trên chuỗi

Sử dụng LIKE để so sánh chuỗi, có 2 ký tự đặc biệt sau:

% (hoặc *): thay thế cho mọi ký tự bất kỳ

Page 47: Kiến thức công nghệ và ngôn ngữ

Trang 47

_ (hoặc ?) : thay thế cho một ký tự bất kỳ

Ví dụ:

Tìm tất cả những nhân viên có tên bắt đầu bằng M như Mai, Minh,…

SELECT MaNV, HoNV, TenNV

FROM NHANVIEN

WHERE TenNV LIKE ‘M%’

Thứ tự hiển thị

Mệnh đề ORDER BY sử dụng để sắp xếp các bộ trong kết quả câu truy vấn dựa trêngiá trị các thuộc tính. Trong đó:

Asc: sắp theo thứ tự tăng dần (mặc định)

Desc: sắp theo thứ tự giảm dần

Ví dụ:

Tìm tất cả những nhân viên phòng 1 và lương tương ứng, sắp xếp giảm dầntheo lương

SELECT MaNV, HoNV, TenNV, Luong

FROM NHANVIEN

WHERE Phong = 1

ORDER BY Luong desc

2. Câu truy vấn lồng

Ở các ví dụ đã trình bày, mệnh đề WHERE bao gồm thuộc tính đơn, các phép so sánhhằng số. Phần này giới thiệu câu truy vấn lồng, cho phép lồng các câu truy vấn lại vớinhau. Khi đó câu truy vấn con thông thường được sử dụng để kiểm tra các tập hợpthành viên, so sánh tập hợp, kiểm tra sự tồn tại.

Khi sử dụng truy vấn con trong mệnh đề WHERE của một truy vấn khác, mệnh đềSELECT trong truy vấn con phải phù hợp với số thuộc tính và kiểu dữ liệu của mệnhđề WHERE trong câu truy vấn ngoài.

Truy vấn con trả về giá trị tập hợp trong mệnh đề WHERE có dạng:

<biểu thức> [NOT] IN (<truy vấn con>)

<biểu thức> <phép toán so sánh> ANY (<truy vấn con>)

<biểu thức> <phép toán so sánh> ALL (<truy vấn con>)

Kiểm tra sự tồn tại:

[NOT] EXISTS (<truy vấn con>)

Các câu truy vấn con trong một mệnh đề WHERE có thể được kết hợp bằng cách sửdụng các phép nối logic

Page 48: Kiến thức công nghệ và ngôn ngữ

Trang 48

Ví dụ:

Tìm tất cả những nhân viên nam làm việc trong phòng ‘Tài chính’

SELECT MaNV, HoNV, TenNV

FROM NHANVIEN

WHERE Phong IN (SELECT MaPhong as Phong

FROM PHONGBAN

WHERE TenPhong = ‘Tài chính’)

AND Phai = ‘Nam’

Trong trường hợp điều kiện ở mệnh đề WHERE của câu truy vấn con tham chiếu tớimột thuộc tính của quan hệ được khai báo trong truy vấn cha thì hai câu truy vấn đượcgọi là tương quan. Các tham chiếu tới các quan hệ và các thuộc tính cha xuất hiệnthông qua việc sử dụng bí danh.

Ví dụ:

Tìm tất cả những nhân viên có cùng tên với người thân

SELECT nv.MaNV, nv.HoNV, nv.TenNV

FROM NHANVIEN as nv

WHERE nv.MaNV IN (SELECT MaNV

FROM THANNHAN

WHERE TenTN = nv.TenNV)

Tìm tất cả những nhân viên có lương lớn hơn mọi nhân viên phòng số 5

SELECT MaNV, HoNV, TenNV

FROM NHANVIEN

WHERE Luong > ALL (SELECT Luong

FROM NHANVIEN

WHERE Phong = 5)

Tìm tất cả những nhân viên có lương lớn hơn ít nhất 1 nhân viên phòng số 5

SELECT nv1.MaNV, nv1.HoNV, nv1.TenNV

FROM NHANVIEN as nv1, NHANVIEN as nv2

WHERE nv1.Luong > nv2.Luong AND nv2.Phong = 5

Cụm từ lớn hơn ít nhất một có thể diễn đạt bằng >SOME. Ví dụ trên được viết lại nhưsau:

SELECT MaNV, HoNV, TenNV

FROM NHANVIEN

Page 49: Kiến thức công nghệ và ngôn ngữ

Trang 49

WHERE Luong > SOME (SELECT Luong

FROM NHANVIEN

WHERE Phong = 5)

Hàm EXISTS sử dụng để kiểm tra kết quả của câu truy vấn tương quan có rỗng haykhông. Khi đó

EXISTS (r) mang giá trị true nếu có ít nhất một bộ trong r, false nếu ngược lại.

NOT EXISTS (r) mang giá trị true nếu không có bộ nào trong r, false nếungược lại.

Ví dụ

Cho biết những nhân viên có cùng tên với thân nhân

SELECT nv.MaNV, nv.HoNV, nv.TenNV

FROM NHANVIEN nv

WHERE EXISTS (SELECT *

FROM THANNHAN

WHERE MaNV = nv.MaNV AND TenTN= nv.TenNV)

Giá trị null

SQL cho phép sử dụng các giá trị null để chỉ ra giá trị của thuộc tính không biết haykhông tồn tại.

Chú ý rằng kết quả của điều kiện ở mệnh đề WHERE là false nếu nó liên quan đếnnull.

Trong SQL sử dụng IS NULL hay IS NOT NULL để kiểm tra các giá trị rỗng. Trongđó:

Phép so sánh bằng (=) không dùng được

Các hàm gom nhóm ngoại trừ COUNT() bỏ qua các giá trị null trong tập các dữliệu đầu vào

Nếu có điều kiện kết thì các bộ có giá trị null trên thuộc tính kết sẽ không cótrong kết quả.

3. Hàm kết hợp và gom nhóm

Hàm kết hợp

Hàm kết hợp có đầu vào là một tập giá trị và trả về một giá trị đơn

Avg(): giá trị trung bình

Min(): giá trị nhỏ nhất

Max(): giá trị lớn nhất

Sum(): tính tổng

Page 50: Kiến thức công nghệ và ngôn ngữ

Trang 50

Count(): đếm số mẫu tin

Ví dụ

Cho biết những mức lương trung bình và cao nhất của các nhân viên phòng cómã là 5

SELECT AVG(Luong), MAX(Luong)

FROM NHANVIEN

WHERE Phong = 5

Gom nhóm

Các hàm gom nhóm được áp dụng trên các nhóm bộ cùng thuộc tính trong quan hệ.Mỗi nhóm bộ bao gồm tập hợp các bộ có cùng giá trị trên các thuộc tính gom nhóm.Trong SQL sử dụng cú pháp như sau:

SELECT <danh sách thuộc tính[với hàm kết hợp]>

FROM <danh sách các bảng>

WHERE <điều kiện>

GROUP BY <các thuộc tính gom nhóm>

HAVING <điều kiện gom nhóm>

Mệnh đề GROUP BY chỉ ra các thuộc tính gom nhóm, các thuộc tính trongmệnh đề SELET nằm ngoài một hàm kết hợp phải xuất hiện trong mệnh đềGROUP BY

Mệnh đề HAVING lấy các giá trị của hàm gom nhóm chỉ trên những nhóm nàothỏa điều kiện nhất định. Mệnh đề HAVING chỉ ra điều kiện lọc trên các nhóm,không phải điều kiện lọc trên từng bộ.

Ví dụ

Cho biết tên phòng và lương trung bình của các nhân viên trong phòng ban lớnhơn 100000.

SELECT TenPhong, AVG(Luong)

FROM NHANVIEN, PHONGBAN

WHERE Phong = MaPhong

GROUP BY TenPhong

HAVING AVG(Luong)>100000

4. Các lệnh khai báo cấu trúc CSDL

Kiểu dữ liệu

Chọn hệ quản trị CSDL SQL Server để minh họa, Ta có một số kiểu dữ liệu cơ bản:

Số (number)

Page 51: Kiến thức công nghệ và ngôn ngữ

Trang 51

Chuỗi (text, char, varchar, nvarchar)

Ngày tháng (datetime)

Logic (bit)

Tạo bảng

CREATE TABLE <tên bảng>

(

<thuộc tính 1> <kiểu dữ liệu> [not null][unique] [<RBTV thuộc tính>],

<thuộc tính 2> <kiểu dữ liệu> [not null][unique] [<RBTV thuộc tính>],

<thuộc tính n> <kiểu dữ liệu> [not null][unique] [<RBTV thuộc tính>],

[<RBTV bảng>]

)

Các thuộc tính được xếp theo thứ tự khi tạo bảng. Các ràng buộc cũng có thể được bổsung sau bằng cách dùng ALTER TABLE

Ví dụ

CREATE TABLE PHONGBAN

(

MaPhong char(5) not null,

TenPhong nvarchar(30),

TruongPhong char(5),

NgayNhanChuc datetime,

PRIMARY KEY (MaPhong),

UNIQUE (TenPhong)

FOREIGN KEY (TruongPhong) REFERENCES NHANVIEN (MaNV)

)

RBTV

Một số RBTV trong khi tạo bảng:

Not null: không được chứa giá trị null

Khóa chính: không được chứa giá trị null và được xác định bởi PRIMARYKEY <thuộc tính>

Khóa ngoại: FOREIGN KEY <thuộc tính> REFERENCE <quan hệ> <thuộctính>

Page 52: Kiến thức công nghệ và ngôn ngữ

Trang 52

Tính duy nhất: có thể chứa giá trị null và được xác định bởi UNIQUE <thuộctính>

CHECK <điều kiện>: điều kiện đơn giản, không chứa các câu truy vấn haytham chiếu tới các quan hệ khác

Trong SQL server, mỗi RBTV có thể được đặt tên bằng cách sử dụngCONSTRAINT <tên ràng buộc> <kiểu ràng buộc>. Chú ý rằng tên ràng buộcphải duy nhất trong một lược đồ CSDL.

Ví dụ:

CREATE TABLE PHONGBAN

(

MaPhong char(5) not null,

TenPhong nvarchar(30),

TruongPhong char(5),

NgayNhanChuc datetime,

CONSTRAINT PK_PHONGBAN PRIMARY KEY (MaPhong),

CONSTRAINT U_PHONGBAN UNIQUE (TenPhong)

CONSTRAINT PK_PHONGBAN FOREIGN KEY (TruongPhong)REFERENCES NHANVIEN (MaNV)

)

Xóa bảng

DROP TABLE <tên bảng> xóa bảng

Ví dụ DROP TABLE PHONGBAN

Thay đổi cấu trúc

Thêm cột

ALTER TABLE NHANVIEN ADD ChuyenMon char(40)

Xóa cột

ALTER TABLE NHANVIEN DROP ChuyenMon

Bổ sung, thay đổi RBTV

ALTER TABLE NHANVIEN DROP CONSTRAINT FK_NHANVIEN

ALTER TABLE NHANVIEN ADD CONSTRAINT FK_NHANVIENFOREIGN KEY (MaNQL) REFERENCES NHANVIEN (MaNV)

5. Các thao tác cập nhật dữ liệu

5.1. Thêm

Page 53: Kiến thức công nghệ và ngôn ngữ

Trang 53

Có thể thêm một bộ vào bảng bằng cách sử dụng:

INSERT INTO <bảng> [<thuộc tính 1>, <thuộc tính 2>,…, <thuộc tính n>] VALUES(<giá trị 1>, <giá trị 2>,…,<giá trị n>)

Chú ý rằng thứ tự giá trị trong VALUES là thứ tự các thuộc tính được chỉ ra trongCREATE TABLE

Ví dụ

INSERT INTO PHANCONG VALUES (‘NV01’, ‘DA01’, 10 )

Có thể thêm nhiều bộ vào bảng bằng cách sử dụng:

INSERT INTO <bảng> [<thuộc tính 1>, <thuộc tính 2>,…, <thuộc tính n>]

SELECT … FROM…WHERE…

5.2. Xóa

Có thể xóa một hay nhiều bộ khỏi bảng bằng cách sử dụng

DELETE FROM <bảng>

[WHERE <điều kiện>]

Ví dụ

Xóa những nhân viên có mức lương dưới 100000

DELETE FROM NHANVIEN

WHERE Luong<100000

Xóa những nhân viên làm việc cho phòng ‘Nghiên cứu’

DELETE FROM NHANVIEN

WHERE Phong in (SELECT MaPhong

FROM PHONGBAN

WHERE TenPhong = ‘Nghiên cứu’)

Chú ý rằng các bộ trong bảng khác có thể bị xóa do ràng buộc tham chiếu. Để giảiquyết vấn đề này có thể không cho xóa hoặc xóa luôn những bộ đang tham chiếu đến.

5.3. Cập nhật

Cập nhật các giá trị thuộc tính của một hay nhiều bộ bằng cách sử dụng

UPDATE <bảng>

SET <thuộc tính 1>= <giá trị 1>,

<thuộc tính 2>= <giá trị 2>,

<thuộc tính n>= <giá trị n>

[WHERE <điều kiện>]

Page 54: Kiến thức công nghệ và ngôn ngữ

Trang 54

Các bộ thỏa điều kiện sẽ được cập nhật giá trị cho các thuộc tính. Chú ý rằng các bộtrong bảng khác có thể được cập nhật do ràng buộc tham chiếu. Để giải quyết vấn đềnày có thể không cho thay đổi hoặc thay đổi luôn những giá trị tham chiếu đến.

Ví dụ

Tăng thêm 100000 cho các nhân viên phòng ‘Nghiên cứu’

UPDATE NHANVIEN

SET Luong = Luong +100000

WHERE Phong IN (SELECT MaPhong

FROM PHONGBAN

WHERE TenPhong = ‘Nghiên cứu’)

6. Bài tập

Thực hiện các câu truy vấn trong bài tập chương 4.

Page 55: Kiến thức công nghệ và ngôn ngữ

Trang 55

Chương 6: Phụ thuộc hàm, khóa và ràng buộc toàn vẹn của lược đồ quan hệ

Phụ thuộc hàm (functional dependency) dùng để biểu diễn một cách hình thức cácràng buộc toàn vẹn (RBTV). Phụ thuộc hàm có tầm quan trọng rất lớn trong việc giảiquyết các bài toán tìm khóa, phủ tối thiểu và chuẩn hóa cơ sở dữ liệu. Nội dungchương cũng trình bày ràng buộc toàn vẹn (RBTV), các yếu tố liên quan đến ràngbuộc toàn vẹn nhằm bảo đảm tính đúng đắn của dữ liệu.

1. Phụ thuộc hàm

1.1. Khái niệm phụ thuộc hàm

Xét quan hệ DEAN(MaDA, TenDA, DdiemDA, Phong). Nhận thấy rằng quan hệDEAN có MaDA là khóa, nghĩa là từ MaDA có thể xác định được tất cả các thông tinvề tên đề án, địa điểm thực hiện đề án và phòng ban chủ trì đề án. Có thể phát biểu lạinhư sau:

MaDA xác định TenDA hay TenDA phụ thuộc hàm vào MaDA

MaDA xác định DdiemDA hay DdiemDA phụ thuộc hàm vào MaDA

MaDA xác định Phong hay Phong phụ thuộc hàm vào MaDA

được ký hiệu:

MaDA TenDA

MaDA DdiemDA

MaDA Phong

Một cách tổng quát, ta có:

Định nghĩa phụ thuộc hàm

Q(A1, A2,…, An ) là quan hệ; Q+= {A1, A2,…, An }; X, Y là hai tập con của Q+;

t1, t2 là hai bộ bất kỳ của Q.

Khi đó: XY (t1.X = t2.X t1.Y = t2.Y)

Ta nói X xác định Y hay Y phụ thuộc hàm vào X. X được gọi là vế trái phụ thuộc hàm,Y được gọi là vế phải phụ thuộc hàm.

Phụ thuộc hàm hiển nhiên

X Y gọi là phụ thuộc hàm hiển nhiên nếu XY .

Phụ thuộc hàm nguyên tố

X Y được gọi là phụ thuộc hàm nguyên tố (hoặc nói cách khác Y được gọi là phụthuộc đầy đủ vào X) nếu XX ' đều không có phụ thuộc hàm X’Y.

Như vậy các phụ thuộc hàm MaDA TenDA, MaDA DdiemDA, MaDA Phong là phụ thuộc hàm nguyên tố.

Xét quan hệ CTIETHOADON (SoHD, MaHang, SoLuong, DonGia, ThanhTien) vàcác phụ thuộc hàm như sau:

Page 56: Kiến thức công nghệ và ngôn ngữ

Trang 56

{SoHD, MaHang} SoLuong

{SoHD, MaHang} DonGia

{SoHD, MaHang} ThanhTien

Nhận thấy rằng SoLuong phụ thuộc đầy đủ vào {SoHD, MaHang} nhưng DonGia chỉphụ thuộc vào MaHang (là một thuộc tính khóa) chứ không phụ thuộc đầy đủ vàokhóa {SoHD, MaHang}. Như vậy, trên một lược đồ quan hệ có thể tồn tại nhiều phụthuộc hàm.

Tập các phụ thuộc hàm được ký hiệu F

1.2. Hệ luật dẫn Amstrong

Gọi F là tập phụ thuộc hàm đối với lược đồ quan hệ R định nghĩa trên tập thuộc tính U

và XY là một phụ thuộc hàm; UYX , . Khi đó ta nói rằng XY được suy diễnlogic từ F nếu R thỏa các phụ thuộc hàm của F thì cũng thỏa XY và ký hiệu làF|=XY

Bao đóng của tập phụ thuộc hàm

Bao đóng của tập phụ thuộc hàm F, ký hiệu là F+ là là tập tất cả các phụ thuộc hàmđược duy diễn từ F.

Trong trường hợp F=F+ thì F là họ đầy đủ của các phụ thuộc hàm.

Hệ luật dẫn Amstrong

Amstrong đã đưa ra hệ luật tiên đề còn được gọi là hệ luật dẫn Amstrong sau:

Với UWZYX ,,, , U là tập thuộc tính. Phụ thuộc hàm có các tính chất sau:

(1) Tính phản xạ

Nếu XY thì YX

(2) Tính tăng trưởng

Nếu YX thì YZXZ

(3) Tính bắc cầu

Nếu YX và ZY thì ZX

Từ hệ tiên đề Amstrong suy ra một số tính chất sau:

(1) Tính phân rã sau

Nếu YZX và YX thì ZX

(2) Tính kết hợp

Nếu YX và ZX thì YZX

(3) Tính tựa bắc cầu

Nếu YX và WYZ thì WXZ

Page 57: Kiến thức công nghệ và ngôn ngữ

Trang 57

Ví dụ

Cho lược đồ quan hệ R(A, B, C, D, E, G, H) và tập phụ thuộc hàm

F={ABC, BD, CDE, CEGH, GA}

Chứng tỏ ABE được suy diễn từ F.

(1) ABC

(2) ABAB (tính phản xạ)

(3) ABB (tính phân rã)

(4) BD

(5) ABD (tính bắc cầu 3+4)

(6) ABCD (tính hợp 1+5)

(7) CDE

(8) ABE (tính bắc cầu 6+7)

1.3. Thuật toán tìm bao đóng của tập thuộc tính

Bao đóng của tập thuộc tính

Bao đóng của tập thuộc tính X đối với tập phụ thuộc hàm F, ký hiệu là FX là tập tất cả

các thuộc tính A có thể suy dẫn từ X nhờ tập bao đóng của các phụ thuộc hàm F+

FAXQAX F |

Thuật toán tìm bao đóng của tập thuộc tính

Input: QXFQ ,,

Output: FX

Bước 1: Tính dãy )()1()0( ,...,, iXXX :

XX )0(

)()()1( , iii XYFZYZXX , loại ZY ra khỏi F

Dừng khi )()1( ii XX hoặc khi QX i )(

Bước 2: Kết luận )(iF XX :

Ví dụ 1

Cho lược đồ quan hệ R(A, B, C, D, E, G, H) và tập phụ thuộc hàm

F={ f1: BA ,

f2: DACE,

f3: DH,

f4: GHC,

f5: ACD}

Tìm FAC

Page 58: Kiến thức công nghệ và ngôn ngữ

Trang 58

Bước 1: ACX 0

Bước 2: Từ f1 đến f4 không thoả, f5 thoả nên ACDDACX 1

Lặp lại bước 2:

f1 không thoả, f2 thỏa nên ACDECEACDX 2

f3 thỏa nên ACDEHHACDEX 3

f4 không thỏa, f5 đã thỏa

Lặp lại bước 2: f2, f3 và f5 đã thỏa, f1 và f3 không thỏa. Nên ACDEHXX 34

Vậy ACDEHACF

1.4. Bài toán thành viên

Cho tập thuộc tính Q, tập phụ thuộc hàm F trên Q và một phụ thuộc hàm XY trên Q.

Câu hỏi đặt ra rằng FYX hay không?

Giải quyết: XYFYX

Ví dụ

Cho lược đồ quan hệ R(A, B, C, D, E, G, H) và tập phụ thuộc hàm

F={ f1: BA ,

f2: DACE,

f3: DH,

f4: GHC,

f5: ACD}

Cho biết EAC có thuộc F+ không?

Ta có ACDEHACF

Vì FACE nên FEAC

1.5. Phủ tối thiểu của một tập phụ thuộc hàm

1.5.1. Hai tập phụ thuộc hàm tương đương

Hai tập phụ thuộc hàm F và G tương đương nếu GF . Ký hiệu GF

F được gọi là phủ G nếu GF

Thuật toán xác định F và G có tương đương không

Bước 1:

Với mỗi phụ thuộc hàm FYX

Kiểm tra YX có là thành viên của G không.

Bước 2:

Page 59: Kiến thức công nghệ và ngôn ngữ

Trang 59

Với mỗi phụ thuộc hàm GYX

Kiểm tra YX có là thành viên của F không.

Bước 3:

Nếu cả bước 1 và 2 đều đúng thì kết luận GF

Ví dụ

Cho lược đồ quan hệ R(A, B, C, D, E) và tập phụ thuộc hàm

F={ ABC , AD, CDE}

G={ ABCE , AABD, CDE}

Cho biết F và G có tương đương không?

Bước 1:

GDAGBCAABCDEAG

Hơn nữa ta có GECDFECD

Vậy mọi phụ thuộc hàm trong F đều là thành viên của G

Bước 2:

FABDAFBCEAABCDEAF

Hơn nữa ta có FECDGECD

Vậy mọi phụ thuộc hàm trong G đều là thành viên của F

Bước 3: Kết luận GF

1.5.2. Phủ tối thiểu của tập phụ thuộc hàm

Phụ thuộc hàm có thuộc tính vế trái dư thừa

Cho F là tập các phụ thuộc hàm trên lược đồ quan hệ Q. Khi đó FYZ là phụthuộc hàm có thuộc tính vế trái dư thừa nếu tồn tại ZA mà

YAZYZFF )(

Ngược lại YZ là phụ thuộc hàm có thuộc tính vế trái không dư thừa hay Y phụthuộc đầy đủ vào Z. YZ còn được gọi là phụ thuộc hàm đầy đủ.

Ví dụ

Cho lược đồ quan hệ R(A, B, C, D, E) và tập phụ thuộc hàm

F={ AB , BCD, CD}

Khi đó AB , CD là những phụ thuộc hàm đầy đủ. BCD là phụ thuộc hàm cóthuộc tính vế trái B dư thừa.

Vấn đề là tìm các phụ thuộc hàm đầy đủ tương ứng bằng cách loại bỏ các thuộc tínhdư thừa.

Thuật toán tìm các phụ thuộc hàm đầy đủ tương ứng

Page 60: Kiến thức công nghệ và ngôn ngữ

Trang 60

Thực hiện với mỗi phụ thuộc hàm FYX

Bước 1: X = A1, A2, … An (n>=2, với n=1 thì XY là đầy đủ)

Đặt Z=X

Bước 2: Với mỗi Ai, thực hiện

- Tam = Z \ Ai

- Nếu FYTam thì Z=Tam

Tập phụ thuộc hàm có vế phải một thuộc tính

Mỗi tập phụ thuộc hàm F đều tương đương với một tập phụ thuộc hàm G mà vế phảicủa các phụ thuộc hàm thuộc G chỉ gồm một thuộc tính

Ví dụ:

Cho lược đồ quan hệ R(A, B, C, D, E) và tập phụ thuộc hàm

F={ ABC , AD, CDE}

Khi đó G={ AB, AC , AD, CDE} là tập phụ thuộc hàm có vế phải mộtthuộc tính và GF

Tập phụ thuộc hàm không dư thừa

F là tập phụ thuộc hàm không dư thừa

nếu không tồn tại FF ' sao cho FF ' .

Ngược lại F được gọi là tập phụ thuộc hàm dư thừa.

Thuật toán loại những phụ thuộc hàm dư thừa

Với mỗi phụ thuộc hàm FYX

nếu YX là thành viên của YXF thì loại YX khỏi F.

1.5.3. Phủ tối thiểu của tập phụ thuộc hàm

F được gọi là phủ tối thiểu của tập phụ thuộc hàm (hay tập phụ thuộc hàm tối thiểu)nếu thỏa:

(i) F là tập phụ thuộc hàm có thuộc tính vế trái không dư thừa

(ii) F là tập phụ thuộc hàm có vế phải một thuộc tính

(iii) F là tập phụ thuộc hàm không dư thừa

Thuật toán tìm phủ tối thiểu của tập phụ thuộc hàm

Bước 1: Loại các thuộc tính có vế trái dư thừa của mọi phụ thuộc hàm

Bước 2: Phân rã các phụ thuộc hàm có vế phải nhiều thuộc tính thành các phụ thuộchàm có vế phải một thuộc tính

Bước 3: Loại các phụ thuộc hàm dư thừa khỏi F

Ví dụ

Page 61: Kiến thức công nghệ và ngôn ngữ

Trang 61

Cho lược đồ quan hệ R(A, B, C, D, E, G, H) và tập phụ thuộc hàm

F={ BA , DACE, DH, GHC, ACD}

Tìm phủ tối thiểu của F.

Bước 1:

Với DACE:

o Giả sử D thừa thì FCEA : ta có AAF , FACE nên D không thừa

o Giả sử A thừa thì FCEB : ta có DHDF , FDCE nên A khôngthừa

Với GHC:

o Giả sử G thừa thì FCH : ta có HH F , FHC nên G không thừa

o Giả sử H thừa thì FCG : ta có GGF , FGC nên H không thừa

Với ACD:

o Giả sử A thừa thì FDC : ta có CCF , FCD nên A không thừa

o Giả sử C thừa thì FDA : ta có AAF , FAD nên C không thừa

Vậy mọi phụ thuộc hàm đều là đầy đủ.

Bước 2: Phân rã vế phải ta có F={ BA , DAC, DAE, DH, GHC, ACD}

Bước 3: Loại các phụ thuộc hàm dư thừa:

Với BA: ta có BB ABF \ ,

ABFBA \ nên BA là không thừa

Với DAC: ta có DAEHDA CDAF \ ,

CDAFDAC \ nên DAC là không

thừa

Với DAE: ta có DACHDA EDAF \ ,

EDAFDAE \ nên DAE là không

thừa

Với DH: ta có DD HDF \ ,

HDFDH \ nên DH là không thừa

Với GHC: ta có GHGH CGHF \ ,

CGHFGHC \ nên GHC là không thừa

Với ACD: ta có ACAC DACF \ ,

DACFACD \ nên ACD là không thừa

Vậy phủ tối thiểu của F: PTT(F) = { BA , DAC, DAE, DH, GHC,ACD}

2. Khóa

2.1. Định nghĩa

Cho lược đồ quan hệ Q(A1, A2, …, An), Q+ là tập thuộc tính của quan hệ Q, F là tậpphụ thuộc hàm trên Q, K là tập con của Q+. Khi đó K gọi là một khóa của Q nếu:

(i) K+F = Q+

(ii) Không tồn tại KK ' sao cho K’+F = Q+

Page 62: Kiến thức công nghệ và ngôn ngữ

Trang 62

Thuộc tính A được gọi là thuộc tính khóa nếu KA , trong đó K là khóa của Q.Ngược lại thuộc tính A được gọi là thuộc tính không khóa.

K’ được gọi là siêu khóa nếu 'KK .

2.2. Thuật toán tìm khóa

2.2.1. Thuật toán tìm một khóa

Sử dụng đồ thị có hướng để tìm khóa như sau:

Bước 1:

Mỗi nút của đồ thị là tên một thuộc tính của lược đồ quan hệ R

Cung nối hai thuộc tính A và B thể hiện phụ thuộc hàm A B

Thuộc tính chỉ có các mũi tên đi ra (nghĩa là chỉ nằm trong vế trái của phụthuộc hàm) được gọi là nút gốc

Thuộc tính chỉ có các mũi tên đi tới (nghĩa là chỉ nằm trong vế phải của phụthuộc hàm) được gọi là nút lá

Bước 2:

Xuất phát từ tập các nút gốc (X), dựa trên tập các phụ thuộc hàm F, tìm baođóng

FX .

Nếu QX F thì X là khóa, ngược lại bổ sung một thuộc tính không thuộc nútlá vào X rồi thực hiện tìm bao đóng của X. Dừng khi tìm được một khóa của R.

Ví dụ

Cho lược đồ quan hệ R(A, B, C, D, E, G, H) và tập phụ thuộc hàm

F={ BA , DACE, DH, GHC, ACD}

Tìm một khóa của R.

Phân rã vế phải ta có F ={ BA , DAC, DAE, DH, GHC, ACD}

A

F1

B

F2

C

D

F3

E

F4H

GF5

F6

Page 63: Kiến thức công nghệ và ngôn ngữ

Trang 63

Nhận thấy từ đồ thị trên, nút B và G là nút gốc. Khóa của R phải chứa thuộc tính Bhoặc G, trong ví dụ này chọn B.

BABF , Vì QBF nên B không là khóa. Nhận thấy D là thuộc tính ở vế trái của ba

phụ thuộc hàm trong F nên bổ sung thuộc tính D vào để xét khóa.

BDACEHBDF , vì QBDF nên BD không là khóa. Bổ sung thuộc tính G.

BDGACEHBDGF , vì QBDGF nên BDG là khóa.

2.2.2. Thuật toán tìm tất cả các khóa

Tập thuộc tính nguồn, ký hiệu là N, là tập chứa những thuộc tính chỉ xuất hiện ở vếtrái, không nằm bên vế trái và vế phải của mọi phụ thuộc hàm

Tập thuộc tính trung gian, ký hiệu là TG, là tập chứa những thuộc tính vừa xuất hiện ởvế trái, vừa xuất hiện ở vế phải trong các phụ thuộc hàm

Thuật toán

Bước 1: Tính tập nguồn N. Nếu QN F thì chỉ có 1 khoá là N, ngược lại qua bước 2

Bước 2: Tính tập trung gian TG. Tính tập tất cả các tập con Xi của tập TG.

Bước 3: Tìm tập S chứa mọi siêu khóa Si:

Với mỗi Xi, nếu QXN Fi thì ii XNS

Bước 4: Loại các siêu khóa không tối tiểu:

SSS ji , , nếu ji SS thì jSSS

Ví dụ. Cho lược đồ quan hệ R(A, B, C) và tập phụ thuộc hàm

F={ ABC, CA}

Tìm mọi khóa của R.

Bước 1: N = {B}, QBN F

Bước 2: TG = {AC}, tập các tập con trung gian là ACCACTG ,,,

Bước 3:

N Xi iXN iXN ? QXN i

B B B Sai

B A BA BAC Đúng

B C BC BCA Đúng

B AC BAC BAC Đúng

Page 64: Kiến thức công nghệ và ngôn ngữ

Trang 64

Như vậy tập siêu khoá BACBCBAS ,,

Bước 4: Loại các siêu khóa không tối tiểu:

Nhận thấy rằng BACBA nên loại siêu khóa BAC. Tập các khóa còn lại là BCBAS ,

Cải tiến thuật toán

Nhận thấy rằng ở bước 3, khi xét tập một con Xi, nếu QXN i , khi đó iXN

là một khoá. Trong trường hợp này nếu xét tiếp các tập XjXiXj : , thì hiển nhiên

QXjN , và cuối cùng siêu khoá jXN cũng sẽ bị loại ở bước 4.

Hơn nữa, bước tính tập con đầu tiên là rỗng cũng không cần tính.

Do đó, khi tính bao đóng của tập thuộc tính, không tính Xi và nếu QXN i ,

thực hiện loại bỏ các tính toán cho các trường hợp XjXiXj : . Khi đó kết thúc thuật

toán tại bước 3, không cần thực hiện bước 4 vì tất cả các khoá nhận được ở bước 3 đềulà tối tiểu.

3. Ràng buộc toàn vẹn

3.1. Ràng buộc toàn vẹn – các yếu tố của ràng buộc toàn vẹn

Trong CSDL luôn tồn tại nhiều mối liên hệ giữa các thuộc tính, các bộ, các bảng vớinhau. Các mối liên hệ này là những điều kiện bất biến mà tất cả các bộ của nhữngquan hệ có liên quan đều phải thỏa mãn tại mọi thời điểm. Những điều kiện bất biếnđó được gọi là ràng buộc toàn vẹn.

Ràng buộc toàn vẹn (Intergrity constraint) viết tắt tiếng việt là RBTV, là một điều kiệnđược định nghĩa liên quan đến một hay nhiều quan hệ khác nhau. Các mối liên hệ ràngbuộc là những điều kiện bất biến mà mọi thể hiện của quan hệ đều phải thỏa mãn trongmọi thời điểm.

Trong thực tế, RBTV là các quy tắc quản lý trong thế giới thực.

Mục đích của RBTV là bảo đảm tính nhất quán của dữ liệu, bảo đảm rằng dữ liệu luônbiểu diễn đúng ngữ nghĩa trong thực tế.

Ví dụ: với giao dịch chuyển tiền, thực hiện qua các bước sau:

Tại tài khoản của người gởi: trừ tiền

Tại tài khoản của người nhận: thêm tiền

Nếu cả hai việc trên đều thành công thì hoàn tất giao dịch, ngược lại quay luigiao dịch.

Qua ví dụ trên, giao dịch thực hiện trừ tiền và tăng tiền trong tài khoản của người gởivà người nhận, nếu không thì không thực hiện gì cả. Việc thực hiện giao dịch cần phảibảo đảm tính đúng của dữ liệu.

Page 65: Kiến thức công nghệ và ngôn ngữ

Trang 65

Mỗi một RBTV có các yếu tố sau:

Bối cảnh

Bối cảnh là một hay nhiều quan hệ cần phải sử dụng để kiểm tra RBTV. Hay nói cáchkhác bối cảnh của RBTV là những quan hệ có khả năng bị vi phạm RBTV khi thựchiện các thao tác cập nhật dữ liệu (thêm, xóa, sửa các bộ)

Biểu diễn: điều kiện hay nội dung

Điều kiện được kiểm tra trên mọi thay đổi của thể hiện của các quan hệ cơ sở. Điềukiện của một RBTV có thể được biểu diễn bằng nhiều cách khác nhau, chẳng hạn nhưngôn ngữ tự nhiên, ngôn ngữ hình thức (thuật toán, đại số quan hệ,..).

Khi một RBTV bị vi phạm, có thể xử lý bằng cách thông báo cho NSD biết RBTV đãbị vi phạm như thế nào, hoặc từ chối thực hiện thao tác cập nhật dữ liệu và thông báocho NSD biết thao tác cập nhật bị từ chối trên các quan hệ nào và tại các bước nào.

Tầm ảnh hưởng

Trong quá trình phân tích thiết kế CSDL, cần thiết phải lập bảng tầm ảnh hưởng choRBTV nhằm xác định thời điểm cần kiểm tra RBTV, và khi kiểm tra cần kiểm tra trênquan hệ nào.

Bảng tầm ảnh hưởng của một RBTV có dạng sau:

Tên RBTV Thêm Xóa Sửa

R1 + - +(A)

R2 + - +(B)

… … … …

Rn - - +

Trong đó:

Dấu + thể hiện thao tác có thể gây ra vi phạm RBTV. Trong trường hợp +(A) cho biếtthao tác sửa có thể gây vi phạm trên thuộc tính A. Dấu - thể hiện thao tác không viphạm RBTV.

3.2. Các loại ràng buộc toàn vẹn

Trong quá trình phân tích thiết kế CSDL, yêu cầu cần thiết là phải tìm được nhữngRBTV tiềm ẩn trong CSDL. Việc phân loại RBTV cho phép người phân tích tìm kiếmđầy đủ, tránh bỏ sót những RBTV. Các loại RBTV được phân thành hai dạng chínhnhư sau:

RBTV có bối cảnh là một quan hệ

RBTV có bối cảnh là nhiều quan hệ

Page 66: Kiến thức công nghệ và ngôn ngữ

Trang 66

3.2.1. Ràng buộc toàn vẹn có bối cảnh là một quan hệ

RBTV có bối cảnh là một quan hệ được chia thành ba loại: RBTV miền giá trị, RBTVliên bộ và RBTV liên thuộc tính

3.2.1.1. Ràng buộc toàn vẹn miền giá trị

Quy định rõ về miền giá trị của một thuộc tính.

Ví dụ. Thời gian phân công tham gia đề án của một nhân viên không quá 40h/tuần

Bối cảnh: quan hệ PHANCONG

Biểu diễn: 40. ThoiGianpcPHANCONGpc

Bảng tầm ảnh hưởng:

RB1 Thêm Xóa Sửa

PHANCONG + - +(ThoiGian)

Ví dụ. Điểm của môn học phải là thang điểm 10

Bối cảnh: quan hệ KETQUA (MaMH, MaLop, MaKH, Diem )

Biểu diễn: 10.0. DiemkqDiemkqKETQUAkq

Bảng tầm ảnh hưởng:

RB2 Thêm Xóa Sửa

KETQUA + - +(Diem)

3.2.1.2. Ràng buộc toàn vẹn liên thuộc tính

Quy định các ràng buộc giữa các thuộc tính khác nhau trong cùng một quan hệ

Ví dụ. Ngày trả sách phải là bằng hoặc sau ngày mượn sách

Bối cảnh: quan hệ MUONSACH(MaSach, MaDocGia, NgayMuon,NgayHenTra, NgayThucTra)

Biểu diễn: aNgayThucTrmsNgayMuonmsNgayHenTramsNgayMuonmsMUONSACHms ....

Bảng tầm ảnh hưởng:

RB3 Thêm Xóa Sửa

MUONSACH + - +(NgayMuon, NgayHenTra, NgayThucTra)

3.2.1.3. Ràng buộc toàn vẹn liên bộ

Page 67: Kiến thức công nghệ và ngôn ngữ

Trang 67

Quy định sự tồn tại của một hoặc nhiều bộ phụ thuộc vào sự tồn tại của một hoặcnhiều bộ khác trong cùng quan hệ.

RBTV khóa chính là RBTV liên bộ

Ví dụ. Mỗi đề án trong công ty có một mã duy nhất để phân biệt với các đề án khác

Bối cảnh: quan hệ DEAN

Điều kiện: MaDAdaMaDAdadadaDEANdada .2.121:2,1

Bảng tầm ảnh hưởng:

RB4 Thêm Xóa Sửa

DEAN + - +(MaDA)

RBTV về số lượng các bộ trong một quan hệ.

Ví dụ. Mỗi sinh viên trong một học kỳ được đăng ký không quá 8 môn học

Bối cảnh: quan hệ DANGKY(MaSV, MaMH)

Biểu diễn: 8.1.2|2:1 MaSVdkMaSVdkDANGKYdkcountDANGKYdk ,trong đó count() là hàm đếm số bộ của một quan hệ thỏa điều kiện trong ngoặc().

Bảng tầm ảnh hưởng:

RB4 Thêm Xóa Sửa

DANGKY + - +(MaSV)

3.2.2. Ràng buộc toàn vẹn có bối cảnh là nhiều quan hệ

RBTV có bối cảnh là nhiều quan hệ được chia thành năm loại:

RBTV tham chiếu

RBTV liên bộ - liên quan hệ

RBTV liên thuộc tính - liên quan hệ

RBTV do thuộc tính tổng hợp

RBTV do chu trình

3.2.2.1. RBTV tham chiếu

Quy định giá trị xuất hiện của một tập thuộc tính trong một quan hệ phải xuất hiệntrong một tập thuộc tính trong một quan hệ khác. RBTV này còn được gọi là RBTVtham chiếu, RBTV phụ thuộc tồn tại hay RBTV khóa ngoại.

Page 68: Kiến thức công nghệ và ngôn ngữ

Trang 68

Ví dụ RBTV trên 2 quan hệ

Một nhân viên phải thuộc về một phòng trong công ty, nghĩa là trong quan hệNHANVIEN, nếu một mã phòng (Phong) mà nhân viên trực thuộc xuất hiện, thì mãphòng này phải xuất hiện trong quan hệ PHONGBAN, cụ thể là thuộc tính (MaPhong).Như vậy:

Bối cảnh: NHANVIEN, PHONGBAN

Biểu diễn: MaPhongpbPhongnvPHONGBANpbNULLPhongnvNHANVIENnv ...

Bảng tầm ảnh hưởng:

RB5 Thêm Xóa Sửa

NHANVIEN + - +(Phong)

PHONGBAN - + +(MaPhong)

Ví dụ RBTV trên 1 quan hệ

Người quản lý (MaNQL) của một nhân viên cũng phải là một nhân viên trong công ty

Bối cảnh: NHANVIEN

Điều kiện: MaNVnvMaNQLnvNHANVIENnvNULLMaNQLnvNHANVIENnv .1.1.

Bảng tầm ảnh hưởng:

RB6 Thêm Xóa Sửa

NHANVIEN + - +(MaNV, MaNQL)

Ảnh hưởng của RBTV đối với các thao tác thêm, xóa, sửa dữ liệu

Giả sử r2 có một khóa ngoại tham chiếu đến K trong r1, khi đó: )()( 12 rr K

Thêm

Khi thêm một bộ t2 vào r2 thì phải bảo đảm tồn tại t1 trong r1 sao cho ][][ 21 tKt

Xóa

Giả sử xóa t1 khỏi r1. Khi đó cần xử lý các bộ trong r2 tham chiếu tới t1, nghĩa là

)( 2][1 rs Kt . Nếu s thì

Không thực hiện hành động xóa dữ liệu, hoặc

Xóa dây chuyền, nghĩa là xóa tất cả các bộ trong s

Page 69: Kiến thức công nghệ và ngôn ngữ

Trang 69

Sửa

Trường hợp cập nhật t2 trong r2

Cập nhật t2 trong r2, sửa khóa ngoại

Tương tự như trường hợp thêm dữ liệu

Kiểm tra )(][ 1'2 rt K

Trường hợp cập nhật t1 trong r1

Cập nhật t1 trong r1

Tương tự như trường hợp xóa dữ liệu

Kiểm tra )( 2][1 rKt

3.2.2.2. RBTV liên bộ - liên quan hệ

Quy định về từng nhóm các bộ của nhiều quan hệ bối cảnh khác nhau.

Ví dụ Một hóa đơn bán hàng phải có ít nhất một mặt hàng, nghĩa là một chi tiết hóađơn bán hàng phải có ít nhất một mặt hàng.

Bối cảnh: HOADON, CTIETHD

Biểu diễn: MaHDcthdMaHDhdCTIETHDcthdHOADONhd ..

Bảng tầm ảnh hưởng:

RB7 Thêm Xóa Sửa

HOADON + - +(MaHD)

CTIETHD - + +(MaHD)

3.2.2.3. RBTV liên thuộc tính - liên quan hệ

Quy định về mối liên hệ giữa các thuộc tính trên nhiều quan hệ bối cảnh khác nhau.

Ví dụ Giả sử cho phép thanh toán tiền nhiều lần và thanh toán sau khi mua hàng, khiđó ngày thanh toán tiền theo một hóa đơn mua hàng phải bằng hoặc sau ngày muahàng.

Bối cảnh: HOADON(MaHD, MaKH, NgayHD, TriGia),THANHTOAN(MaHD, NgayTToan, LanTToan, SoTienTToan)

Biểu diễn:

NgayTToanttNgayHDhdMahDttMaHDhdTHANHTOANttHOADONhd ....

Bảng tầm ảnh hưởng:

Page 70: Kiến thức công nghệ và ngôn ngữ

Trang 70

RB8 Thêm Xóa Sửa

HOADON + - +(MaHD, NgayHD)

THANHTOAN + - +(MaHD, NgayTToan)

3.2.2.4. RBTV do thuộc tính tổng hợp

Quy định về mối liên hệ giữa các thuộc tính do sự có mặt của thuộc tính tính toán.

Ví dụ Điểm trung bình của sinh viên bằng trung bình của các môn mà sinh viên theohọc

Bối cảnh: SINHVIEN(MaSV, HoSV, TenSV, Khoa, DTB)KETQUA (MaSV, MaMon, Diem)

Biểu diễn:

DiemkqAVGDTBsvMaSVkqMaSVsvKETQUAkqSINHVIENsv ....

Bảng tầm ảnh hưởng:

RB9 Thêm Xóa Sửa

SINHVIEN + - +(MaSV, DTB)

KETQUA + + +(MaSV, Diem)

3.2.2.5. RBTV do chu trình

Xảy ra khi có sự hiện diện của chu trình. Để nhận diện chu trình, người ta biểu diễnlược đồ CSDL như sau:

Nút thể hiện lược đồ

Nút thuộc tính kết

Cung nối giữa nút lược đồ và nút thuộctính kết

Ví dụ Một nhân viên chỉ được phân công vào các đề án do phòng mình chủ trì

Bối cảnh: NHANVIEN, DEAN, PHANCONG

Đồ thị thể hiện chu trình như sau:

PHANCON NHANVIEN

MaNV=MaNV

NHANVIEN

NHANVIEN

MaNV=MaNV

MaNV=MaNV

Page 71: Kiến thức công nghệ và ngôn ngữ

Trang 71

Biểu diễn:

MaDApcMaDAnvdaMaNVpcMaNVnvdaDANVnvdaPHANCONGpc ...._ với: DEANNHANVIENDANV MaPhongPhong _

Bảng tầm ảnh hưởng:

RB10 Thêm Xóa Sửa

NHANVIEN - + +(MaNV, Phong)

DEAN - + +(MaDA, Phong)

PHANCONG + - +(MaDA, MaNV)

4. Bài tập

Bài tập 1

Hãy chứng minh 3 tính chất phân rã, kết hợp và tựa bắc cầu.

Hãy tìm hiểu các tính chất của bao đóng tập thuộc tính, phủ tối thiểu

Bài tập 2

Cho lược đồ quan hệ R(A, B, C, D, E, G) và tập phụ thuộc hàm

F={AC , AEG, BD, GE }

Tìm FFF ACGDAB ,,

Bài tập 3

Cho lược đồ quan hệ R(A, B, C, D, E, G) và tập phụ thuộc hàm

F={BC , AEG, BA, GE }

Tìm FFF ACGDAB ,,

Bài tập 4

Cho lược đồ quan hệ R(A, B, C, D, E) và tập phụ thuộc hàm

F={AC , BCD, DE, EA }

Tìm FFF DBDAB ,,

Bài tập 5

Cho lược đồ quan hệ R(A, B, C, D, E) và tập phụ thuộc hàm

Page 72: Kiến thức công nghệ và ngôn ngữ

Trang 72

F={BC , ACD, DG, AGE }

Cho biết EAC có thuộc F+ không?

Cho biết ADBD có thuộc F+ không?

Với các bài tập 7, 8, 9:

Tìm một khóa (theo thuật toán tìm một khóa)

Tìm mọi khóa (theo thuật toán tìm mọi khóa)

Tìm phủ tối thiểu

Bài tập 7

Cho lược đồ quan hệ R(A, B, C, D) và tập phụ thuộc hàm

F={ABCD, BC,CD}

Bài tập 8

Cho lược đồ quan hệ R {ABCDEFGHKLM} và tập phụ thuộc hàm

F={ A B, CD, E F, GAHK, AH G, GLCM }

Bài tập 9

Cho lược đồ quan hệ R {ABCDEFGHKL} và tập phụ thuộc hàm

F={AB, ACD, F G, FK LEH, E FH}

Bài tập 10

Với hai bài toán tình huống là quản lý đề án và quản lý ngân hàng, ngoại trừ các ràngbuộc khoá chính và khoá ngoại, hãy tìm tất cả các RBTV theo yêu cầu: bối cảnh, biểudiễn, tầm ảnh hưởng. Với những RBTV tìm được, hãy phân theo từng loại RBTV.

Page 73: Kiến thức công nghệ và ngôn ngữ

Trang 73

Chương 7: Dạng chuẩn và chuẩn hóa cơ sở dữ liệu

Chương này giới thiệu các dạng chuẩn, phân rã bảo toàn thông tin, bảo toàn phụ thuộchàm, qua đó cũng trình bày cách phân rã bảo toàn bảo toàn thông tin và bảo toàn phụthuộc.

1. Dạng chuẩn của lược đồ quan hệ

Để dễ dàng trình bày các dạng chuẩn, cần nắm rõ các khái niệm:

Thuộc tính khoá:

Cho lược đồ quan hệ nAAAQ ,...,, 21 , thuộc tính B được gọi là thuộc tính khoá nếu B

là một thuộc tính thành phần trong một khoá nào đó của Q, ngược lại B được gọi làthuộc tính không khoá

Ví dụ: R(A, B, C, D), F={ABC, BD, BCA}

Trong ví dụ trên, lược đồ R có 2 khoá là AB, BC. Khi đó A, B, C là thuộc tính khoá, Dlà thuộc tính không khoá.

Giá trị nguyên tố

Giá trị nguyên tố là giá trị không phân nhỏ được nữa.

Ví dụ: Giá trị ChiTietMua: “Bánh Orion 1 gói, Kẹo mút 2 cây” không phải là giá trịnguyên tố vì có thể phân thành: tên hàng, số lượng, đơn vị tính.

1.1. Dạng chuẩn 1

Lược đồ Q ở dạng chuẩn 1 nếu mọi thuộc tính đều mang giá trị nguyên tố.

Trong bài toán xét dạng chuẩn, dạng chuẩn thấp nhất là dạng chuẩn 1.

Ví dụ. Cho lược đồ HOADON(MaHD, MaKH, NgayHD, CtietMua, SoTien), và cóthể hiện như sau

MaHD MaKH NgayHD CtietMua SoTien

Tên hàng Số lượng ĐVT

HD01 KH01 15-10-05 Bánh Orion 1 Gói 25.000

Kẹo mút 2 Cây 2.000

HD02 KH01 18-10-05 Gạo 2 Kg 30.000

HD03 KH02 24-10-05 Đường 1 Kg 15.000

Bánh AFC 2 Gói 24.000

Page 74: Kiến thức công nghệ và ngôn ngữ

Trang 74

Nhận thấy rằng CTiếtMua không mang giá trị nguyên tố, do đó HOADON không đạtdạng chuẩn 1.

1.2. Dạng chuẩn 2

1.2.1. Định nghĩa

Lược đồ Q ở dạng chuẩn 2 nếu thoả:

(1) Q đạt dạng chuẩn 1

(2) Mọi thuộc tính không khóa của Q đều phụ thuộc đầy đủ vào khóa

1.2.2. Kiểm tra dạng chuẩn 2

Để kiểm tra dạng chuẩn 2 thực hiện:

Bước 1: Tìm mọi khóa của Q

Bước 2: Với mỗi khóa K, tìm bao đóng của tập tất cả các tập con thực sự Si của K

Bước 3: Nếu tồn tại bao đóng Si+ chứa thuộc tính không khóa thì Q không đạt dạngchuẩn 2, ngược lại Q đạt dạng chuẩn 2.

Ví dụ 1. Cho Q1 (A, B, C, D), F={AB, BDC}

Lược đồ chỉ có một khóa là A, nên mọi thuộc tính đều phụ thuộc đầy đủ vào khóa. Dovậy Q1 đạt dạng chuẩn 2.

Ví dụ 2. Cho Q2 (A, B, C, D), F={ABD, CD}

Lược đồ có khóa là ABC, ngoài ra còn có CABC mà CD, trong đó D là thuộc tínhkhông khóa (nghĩa là thuộc tính D không phụ thuộc đầy đủ vào khóa). Do vậy Q2không đạt dạng chuẩn 2.

Ví dụ 3:

Xem ví dụ đơn giản bằng CSDL gồm 2 quan hệ MONHOC, SINHVIEN như sau:

MONHOC (MaMH, TenMH, STC, Loai)

Tân từ: Mỗi môn học có mã môn học (MaMH) duy nhất để phân biệt với các môn họckhác, có tên môn học (TenMH), số tín chỉ (STC), và loại bắt buộc hay tự chọn (Loai)

MaMH TenMH STC Loai

CT101 Nhập môn tin học 4 BB

CT102 TH kỹ năng máy tính 5 BB

TN311 Xác suất thống kê 3 BB

CT103 Thiết kế Web 4 TC

CT110 Nguyên lý lập trình 2 5 BB

Page 75: Kiến thức công nghệ và ngôn ngữ

Trang 75

SINHVIEN (MSSV, MaMH, TenSV, DiaChi, Diem)

Tân từ: Mỗi sinh viên (MSSV) khi thi một môn học (MaMH) được ghi nhận lại điểm(Diem), ngoài ra còn có thông tin liên quan đến sinh viên như họ tên (TenSV), địa chỉ(DiaChi)

MSSV MaMH TenSV DiaChi Diem

0310677 CT101 Nguyễn Thị Hoa 11 Nguyễn Công Trứ, Đà Lạt 6

0310678 CT101 Trần Hoàng 20 Bùi Thị Xuân, Đà Lạt 4

0310679 CT101 Lê Thanh Sơn 2 Nhà Chung, Đà Lạt 7

0310677 CT102 Nguyễn Thị Hoa 11 Nguyễn Công Trứ, Đà Lạt 8

0310678 CT102 Trần Hoàng 20 Bùi Thị Xuân, Đà Lạt 8

0310678 TN311 Trần Hoàng 20 Bùi Thị Xuân, Đà Lạt 3

0310679 TN311 Lê Thanh Sơn 2 Nhà Chung, Đà Lạt 6

0310677 CT103 Nguyễn Thị Hoa 11 Nguyễn Công Trứ, Đà Lạt 9

0310678 CT103 Trần Hoàng 20 Bùi Thị Xuân, Đà Lạt 7

0310000 CT110 Nguyễn Ngọc 1 Lê Hồng Phong, Đà Lạt 9

Ở quan hệ SINHVIEN có thể nhận thấy các phụ thuộc:

MSSV, MaMH Diem

MSSVTenSV, DiaChi

Vậy quan hệ SINHVIEN không đạt dạng chuẩn 2 vì thuộc tính TenSV, DiaChi làthuộc tính không khoá chỉ phụ thuộc vào MSSV: như vậy không phụ thuộc đầy đủ vàokhoá.

Trong quá trình cập nhật và lưu trữ dữ liệu xuất hiện những vấn đề sau:

Ở quan hệ SINHVIEN, việc lưu trữ thông tin một sinh viên bị lặp lại (tên, địachỉ)

Quá trình cập nhật:

o Sửa đổi: Khi cần sửa đổi địa chỉ của một sinh viên (ví dụ như Nguyễn ThịHoa) cần phải sửa đổi 3 lần vì trùng lắp thông tin, hơn nữa, khi sửa đổithông tin của về một sinh viên lại không liên quan đến thông tin về thi cử.

Page 76: Kiến thức công nghệ và ngôn ngữ

Trang 76

o Thêm: Nếu chèn thêm một bộ vào quan hệ SINHVIEN mà sinh viên chưathi môn nào thì không được vì khoá MSSV, MaMH là không đầy đủ. Vấnđề này chỉ được khắc phục khi loại bỏ những thông tin về kết quả thi cử rakhỏi quan hệ.

o Xoá: Giả sử rằng cần xóa bỏ môn CT110 mà danh sách sinh viên vẫn giữnguyên. Khi đó xóa bộ {‘CT110’, ‘Nguyên lý lập trình 2’, 5, ‘BB’} trongquan hệ MONHOC và xoá bộ {‘0310000’, ‘CT110’, ‘Nguyễn Ngọc’, ‘1Lê Hồng Phong, Đà Lạt’, 9} trong quan hệ SINHVIEN. Khi đó thông tinvề sinh viên sẽ bị mất.

Để khắc phục những bất lợi trên, quan hệ SINHVIEN có thể tách thành 2 quan hệSINHVIEN (MSSV, TenSV, DiaChi) và KETQUATHI (MSSV, MaMH, Diem). Nhưvậy, 3 quan hệ trên đều đã ở dạng chuẩn thứ 2.

1.3. Dạng chuẩn 3

1.3.1. Định nghĩa

Định nghĩa 1

Với một lược đồ Q; X, Y là hai tập con của Q+; A là một thuộc tính. Khi đó A đượcgọi là phụ thuộc bắc cầu vào X nếu thỏa:

(1) XY, YA

(2) Y X

(3) A XY

Lược đồ Q ở dạng chuẩn 3 nếu mọi thuộc tính không khóa đều không phụ thuộc bắccầu vào khóa.

Việc kiểm tra dạng chuẩn 3 theo định nghĩa trên sẽ khó cài đặt. Ta có thể thực hiệnkiểm tra dạng chuẩn 3 theo định nghĩa sau:

Định nghĩa 2

Lược đồ Q ở dạng chuẩn 3 nếu mọi phụ thuộc hàm XAF+, với A X đều có:

(1) X là siêu khóa, hoặc

(2) A là thuộc tính khóa

1.3.2. Kiểm tra dạng chuẩn 3

Từ định nghĩa 2, để kiểm tra dạng chuẩn 3 thực hiện các bước sau:

Bước 1: Tìm mọi khóa của Q

Bước 2: Phân rã vế phải của mọi phụ thuộc hàm trong F để tập F trở thành tập phụthuộc hàm có vế phải một thuộc tính

Bước 3: Nếu mọi phụ thuộc hàm XA F, mà A X đều thỏa

(1) X là siêu khóa (vế trái chứa một khóa), hoặc

(2) A là thuộc tính khóa (vế phải là tập con của khóa)

thì Q đạt dạng chuẩn 3, ngược lại Q không đạt dạng chuẩn 3.

Page 77: Kiến thức công nghệ và ngôn ngữ

Trang 77

Ví dụ. Cho Q (A, B, C, D), F={ABD, CD}

Bước 1: Q có một khóa là ABC

Bước 2: Mọi phụ thuộc hàm trong F đều đã có vế phải một thuộc tính.

Bước 3: Với ABD, nhận thấy rằng D ABC có

Vế trái (AB) không phải là siêu khóa.

Hơn nữa vế phải (D) không là thuộc tính khóa

Vậy Q không đạt dạng chuẩn 3.

1.4. Dạng chuẩn BC (Boyce Codd)

1.4.1. Định nghĩa

Lược đồ Q ở dạng chuẩn BC nếu mọi phụ thuộc hàm XAF+, với A X đều có Xlà siêu khóa.

1.4.2. Kiểm tra dạng chuẩn BC

Từ định nghĩa, để kiểm tra dạng chuẩn BC thực hiện các bước sau:

Bước 1: Tìm mọi khóa của Q

Bước 2: Phân rã vế phải của mọi phụ thuộc hàm trong F để tập F trở thành tập phụthuộc hàm có vế phải một thuộc tính

Bước 3: Nếu mọi phụ thuộc hàm XA F, mà A X đều thỏa X là siêu khóa (vế tráichứa một khóa), thì Q đạt dạng chuẩn BC, ngược lại Q không đạt dạng chuẩn BC.

Ví dụ. Cho Q (A, B, C, D, E, I), F={ACDEBI, CEAD}

Bước 1: Q có hai khóa là {ACD, CE}

Bước 2: Phân rã vế phải của các phụ thuộc hàm trong F, ta có:

F={ACDE, ACDB, ACDI, CEA, CED}

Bước 3: Mọi phụ thuộc hàm trong F đều có vế trái là một siêu khóa

Vậy Q đạt dạng chuẩn BC.

1.5. Kiểm tra dạng chuẩn

Kiểm tra dạng chuẩn của lược đồ quan hệ Q

Bước 1: Tìm mọi khóa của Q

Bước 2: Kiểm tra dạng chuẩn BC, nếu đúng thì Q đạt dạng chuẩn BC,

ngược lại qua bước 3.

Bước 3: Kiểm tra dạng chuẩn 3, nếu đúng thì Q đạt dạng chuẩn 3,

ngược lại qua bước 4.

Bước 4: Kiểm tra dạng chuẩn 2, nếu đúng thì Q đạt dạng chuẩn 2,

Page 78: Kiến thức công nghệ và ngôn ngữ

Trang 78

ngược lại Q đạt dạng chuẩn 1.

Kiểm tra dạng chuẩn của lược đồ CSDL

Dạng chuẩn của một lược đồ CSDL là dạng chuẩn thấp nhất trong các dạng chuẩn củacác lược đồ quan hệ con.

2. Phép phân rã

Mục tiêu của việc thiết kế CSDL quan hệ là tạo ra một tập các lược đồ quan hệ chophép chúng ta lưu trữ thông tin không có những dư thừa không cần thiết và truy tìmthông tin một cách dễ dàng, chính xác. Việc phân rã một lược đồ thành những lược đồcon đều mong muốn đạt được bảo toàn thông tin và bảo toàn phụ thuộc.

2.1. Phân rã bảo toàn thông tin

Cho lược đồ quan hệ Q (TenNCC, DiaChiNCC, SanPham, DonGia)

Phân rã Q thành Q1 và Q2 như sau:

Q1 (TenNCC, SanPham, DonGia)

Q2 (TenNCC, DiaChiNCC)

Khi đó ta có các thể hiện sau:

Q TenNCC DiaChiNCC SanPham DonGia

Nguyễn Mai 10 Nguyễn Công Trứ Bánh xốp 10.000

Nguyễn Mai 10 Nguyễn Công Trứ Kẹo mè 20.000

Nguyễn Mai 20 Nguyễn Văn Trỗi Kẹo mè 20.000

Q1 TenNCC SanPham DonGia

Nguyễn Mai Bánh xốp 10.000

Nguyễn Mai Kẹo mè 20.000

Q2 TenNCC DiaChiNCC

Nguyễn Mai 10 Nguyễn Công Trứ

Nguyễn Mai 20 Nguyễn Văn Trỗi

Page 79: Kiến thức công nghệ và ngôn ngữ

Trang 79

21 QQ TenNCC DiaChiNCC SanPham DonGia

Nguyễn Mai 10 Nguyễn Công Trứ Bánh xốp 10.000

Nguyễn Mai 10 Nguyễn Công Trứ Kẹo mè 20.000

Nguyễn Mai 20 Nguyễn Văn Trỗi Bánh xốp 10.000

Nguyễn Mai 20 Nguyễn Văn Trỗi Kẹo mè 20.000

Như vậy kết quả thể hiện Q và 21 QQ là khác nhau, khi đó ta nói phép phân rã gọi

là không bảo toàn thông tin (mất mát thông tin).

Định nghĩa

Q là lược đồ quan hệ, Q1, Q2 là hai lược đồ con có:

QQQ

XQQ

21

21

Khi đó Q được phân rã thành hai lược đồ con Q1, Q2 là phép phân rã bảo toàn thôngtin nếu với r là thể hiện bất kỳ của Q ta có:

21 .. QrQrr

(r là kết quả của phép kết tự nhiên của các hình chiếu của nó trên Q1, Q2)

2.2. Phân rã bảo toàn phụ thuộc hàm

Một vấn đề cần quan tâm khi phân rã lược đồ Q thành các lược đồ con Qi với tập cácFi tương ứng được tính từ tập phụ thuộc hàm F. Phép phân rã bảo toàn phụ thuộc (giữlại phụ thuộc) nếu với ri là thể hiện của Qi thoả điều kiện: ri chỉ thoả những phụ thuộc

hàm XY F+ với XYQi+

Định nghĩa

Gọi Q1, Q2,…, Qn là phân rã của lược đồ quan hệ Q, tập phụ thuộc hàm F trên Q.

Hình chiếu của F trên một tập các thuộc tính Qi+ ký hiệu Qi+(F) là tập các phụ thuộc

hàm XY F+ với XYQi+

Qi+(F) = Fi+={XY | XY F+ và XYQi+ }

Khi đó phân rã là bảo toàn tập phụ thuộc hàm F nếu

F Qi+(F)

3. Thiết kế CSDL bằng cách phân rã

3.1. Phân rã thành dạng chuẩn BC (hoặc dạng chuẩn 3) bảo toàn thông tin

3.1.1. Thuật toán

Page 80: Kiến thức công nghệ và ngôn ngữ

Trang 80

Bước 1: Tìm tất cả các khóa của Q

Bước 2: Tìm phụ thuộc hàm XY F có X không là siêu khóa và Y không chứathuộc tính khóa.

Nếu tìm thấy thì tách Q thành Q1 và Q2 theo cách:

o Q1 = Q[XY]; F1 Q1(F) (tìm bao đóng của tất cả các tập con của XY đểtính F1). Tiếp tục phân rã (Q1, F1).

o Q2 = Q[Q+ - Y]; F2 Q2(F) (tìm bao đóng của tất cả các tập con của (Q+ -Y) để tính F2). Tiếp tục phân rã (Q2, F2).

Nếu không tìm thấy thì xét dạng chuẩn Qi:

o Nếu mọi phụ thuộc hàm trong Fi đều có vế trái là siêu khóa thì Qi đạt dạngchuẩn BC

o Nếu có phụ thuộc hàm trong Fi có vế trái không là siêu khóa và vế phải làthuộc tính khóa thì Qi đạt dạng chuẩn 3

3.1.2. Ví dụ

Ví dụ 1

Cho Q (SDIM), F={SID, SDM}

Bước 1: Q có một khóa là {SI}

Bước 2: Phụ thuộc hàm SDM có SD không là siêu khóa nên tách:

Q1 = (SDM); F1 = {SDM}

Q2 = (SDI); F2 = {SID}

Để tìm tập phụ thuộc hàm F1, F2 cần tính bao đóng của mọi tập con.

Tìm F1: với Q1 = (SDM): bao đóng của mọi tập con

SSF

DDF

MM F

SDMSDF

SMSM F

DMDM F

SDMSDM F

F1 = Q1(F) = {SDM, SDSM, SDDM, SDSDM }

F1 = {SDM}

Tìm F2: với Q2= (SDI): bao đóng của mọi tập con

Page 81: Kiến thức công nghệ và ngôn ngữ

Trang 81

SSF

DDF

II F

SDMSDF

SIDMSI F

DIDI F

SDIMSDI F

F2 = Q2(F) = {SID, SISD, SIDI, SISDI }

F2 = {SID}

Bước 3: Mọi phụ thuộc hàm trong F1và F2 đều có vế trái là một siêu khóa nên Q1 vàQ2 đạt dạng chuẩn BC.

Ví dụ 2

Cho Q (ABCDE), F = {BCA, CD, AEB, BD, BE}

Bước 1: 2 khóa là {CB, CAE}

Bước 2: Từ C D tách thành:

Q1(CD), F1= {CD}, Khóa C. Đạt dạng chuẩn BC.

Q2(CABE), F2= {BE, CBA, AEB}

Chi tiết tính F1, F2 như sau:

Tìm F1: với Q1 = (CD)

CDCF

DDF

CDCDF

Vậy F1 = {CD}

Tìm F2: với Q2(CABE):

CDCF

AAF

BDEBF

EEF

CADCAF

Page 82: Kiến thức công nghệ và ngôn ngữ

Trang 82

CBADECBF

CEDCEF

ABDEABF

AEBDAEF

BEDBEF

CABDECABF

CAEBDCAEF

CBEADCBEF

ABEDABEF

CABEDCABEF

F2= {BE, CBAE, ABE, AEB, CABE, CAEB, CBEA}

Vậy F2= {BE, CBA, AEB}

Xét dạng chuẩn Q2:

Khoá Q2: {CB, CAE}. Vậy Q2 đã đạt dạng chuẩn 3.

3.1.3. Cải tiến thuật toán

Nhận thấy rằng trong tìm phụ thuộc hàm hình chiếu trên Qi, xét tập một con Xi, nếu

QX Fi , khi đó nếu tiếp tục xét các tập XjXiXj : , thì hiển nhiên QXFj , và

cuối cùng thì phụ thuộc hàm có vế trái Xj cũng sẽ bị loại để chỉ chọn phụ thuộc hàmcó vế trái Xi.

Do đó, khi tìm phụ thuộc hàm hình chiếu trên Qi, xét tập một con Xi, nếu QX Fi ,

thực hiện loại bỏ các tính toán cho các trường hợp XjXiXj : .

Ví dụ: với tìm F2 như ví dụ trên:

Q2(CABE), F = {BCA, CD, AEB, BD, BE}

CDCF

AAF

BDEBF

EEF

CADCAF

CBADECBF , loại các tập CAB, CBE, CABE

CEDCEF

Page 83: Kiến thức công nghệ và ngôn ngữ

Trang 83

ABDEABF

AEBDAEF

BEDBEF

ABEDABEF

F2= {BE, CBAE, ABE, AEB}

Vậy F2= {BE, CBA, AEB}

3.2. Phân rã thành dạng chuẩn 3 vừa bảo toàn thông tin vừa bảo toàn phụthuộc hàm

Bước 1: Tìm phủ tối thiểu của F.

Bước 2: Loại bỏ tất cả các thuộc tính của Q không liên quan đến một phụ thuộc hàmnào của PTT(F).

Bước 3: Nếu có một phụ thuộc hàm trong PTT(F) liên quan đến mọi thuộc tính của Qthì không thể phân rã. Ngược lại, qua bước 4.

Bước 4: Gom nhóm những phụ thuộc hàm có cùng vế trái. Với mỗi nhóm phụ thuộchàm có cùng vế trái, tạo thành một lược đồ con.

Bước 5: Kiểm tra các lược đồ con có thoả dạng chuẩn 3 chưa, nếu chưa thì áp dụngbước 4 để phân rã tiếp.

Ví dụ. Cho Q (CTHRSG), F={CT, HRC, HTR, CSG, HSR}

PTT(F) = F = {CT, HRC, HTR, CSG, HSR}

Ta có kết quả phân rã Q1(CT), Q2(HRC), Q3(HTR), Q4(CSG), Q5(HRS)

4. Bài tập

Bài tập 7, 8, 9 trong chương 7, với yêu cầu:

- Phân rã thành dạng chuẩn BC hoặc dạng chuẩn 3 bảo toàn thông tin

- Phân rã thành dạng chuẩn 3 bảo toàn thông tin và bảo toàn phụ thuộc hàm

Page 84: Kiến thức công nghệ và ngôn ngữ

Trang 84

PHẦN 2. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU ORACLE

Chương 8. Các thao tác cơ bản với Oracle1. Cài đặt phần mềm Oracle 11gCơ sở dữ liệu Oracle (có tên khác Oracle RDBMS hay đơn giản là Oracle) là một hệquản trị cơ sở dữ liệu quan hệ phổ biến nhất thế giới, được sản xuất và phân phối bởitập đoàn Oracle, với lịch sử phát triển hơn 50 năm. Cơ sở dữ liệu Oracle chứa nhiềutính năng, dành cho các dự án phần mềm có quy mô từ nhỏ đến rất lớn và được rấtnhiều hãng công nghệ trên giới sử dụng để làm hệ thống quản trị cơ sở dữ liệu.

1.1. Các phiên bản cài đặtTùy theo nhu cầu sử dụng, bạn có thể cài đặt các phiên bản cơ sở dữ liệu Oracle khácnhau, chủ yếu bao gồm 4 phiên bản chính:

- Phiên bản Enterprise: Đây là phiên bản mở rộng và chứa nhiều tính năng nhấttrong các phiên bản cơ sở dữ liệu Oracle. Phiên bản này bao gồm cơ sở dữ liệuFlashback, cho phép thêm các chức năng có bản quyền, như Oracle Spatial,Oracle Spatial, Oracle OLAP, Oracle Label Security, và Oracle Data Mining.

- Phiên bản Standard: Phiên bản này chứa một tập các tính năng của phiên bảnEnterprise, chủ yếu bao gồm các tính năng dành cho các dự án có quy mô vừavà nhỏ.

- Phiên bản Express: Phiên bản Expression cho phép các thao tác tải về, cài đặtvà quản lý nhanh, đơn giản và dễ sử dụng. Phiên này này có thể nâng cấp thànhcác phiên bản khác rất thuận tiện, chứa tối đa 4GB dữ liệu và sử dụng bộ nhớlên đến 1GB và chỉ dùng 1 CPU làm máy chỉ.

- Phiên bản Personal: Đây là phiên bản cá nhân, cho phép phát triển các ứngdụng chạy trên phiên bản Enterprise và Standard. Phiên bản này không thể sửdụng trên môi trường sản phẩm thực tế.

1.2. Hướng dẫn cách cài đặt phiên bản Oracle Database 11g Release 2Để tải về phiên bản Oracle 11g cần thiết cho môn học này, trước hết hãy đăng ký 1 tàikhoản ở website http://www.oracle.com và tải về phiên bản 64 bit hoặc 32 bit ở địa chỉrút gọn https://goo.gl/6t88wj. Khi tải về xong phiên bản, giải nén hai tập tinwin64_11gR2_database_1of2.zip và win64_11gR2_database_2of2.zip. Sau đó, nhấnchuột lên tập tin Setup.exe ở thư mục win64_11gR2_database_1of2 để tiến hành càiđặt (thư mục win64_11gR2_database_2of2 sẽ được chương trình hỏi trong lúc cài đặt).

Ở phần Installation Option, ghi địa chỉ email của người dùng (không bắt buộc), sau đónhấn Next. Nếu không điền địa chỉ email thì sẽ có 1 hộp thoại cảnh báo, hãy nhấn Yesđể bỏ qua hộp thoại này.

Page 85: Kiến thức công nghệ và ngôn ngữ

Trang 85

Tiếp theo chọn Create and Configure a database, chọn Next.

Đến đây, có 2 tùy chọn để cài đặt hệ thống cở dữ liệu Oracle.- Desktop class: dùng cho nhu cầu học tập và hoặc sử dụng database Oracle nhỏ

và trung bình.- Server class: dùng cho nhu cầu sử dụng database cao như triển khai hệ thống

Oracle cho tập đoàn hay tổ chức, doanh nghiệp lớn.Ở nội dung môn học này, hãy chọn Desktop class để tiếp tục.

Để có thể lưu trữ được nhiều loại ngôn ngữ (bao gồm cả tiếng Việt), hãy chọnUnicode (AL32UTF8), theo đó phần Character Set chọn Unicode (AL32UTF8). Sauđó đặt tên database toàn cục là orcl và mật khẩu 123456 và nhấn Next.

Page 86: Kiến thức công nghệ và ngôn ngữ

Trang 86

Vì mật khẩu tương đối đơn giản là 123456, cho nên Oracle sẽ hỏi lần nữa xác nhậnmật khẩu này, lúc này nhấn Yes, rồi nhấn Finish để bắt đầu cài đặt. Nếu Windowscảnh báo có chặn hoạt động của Oracle, hãy nhấn Allow Access để cho phép Oraclehoạt động. Khi cài gần xong, hộp thoại Database Configuraton Assistant sẽ hiển thị,hãy kiên nhẫn thêm để đợi phần này cài đặt.

Sau khi cài đặt xong, có 3 dịch vụ (service) của Oracle tự động được khởi động (Start).- OracleDBConsole<sid>- OracleOra<Sid>_home1TNSListener- OracleService<SID>

Tiếp theo, tiến hành kiểm tra xem các dịch vụ có chạy hay chưa ở phần Service củaWindows. Chọn chuột phải lên biểu tượng This-PC ở màn hình Desktop, chọn Manage,ở thanh Panel bên trái chọn Services and Application, chọn Services.

Page 87: Kiến thức công nghệ và ngôn ngữ

Trang 87

Ở bước này, bạn hãy kết nối Web Console để xem tổng quát giao diện quản lý củaOracle trên giao diện Web. Mở trình duyệt, chạy địa chỉ https://localhost:1158/em, nếutrình duyệt Chrome cảnh báo bảo mật thì hãy chọn tiếp tục duyệt trang. Sau đó, điềnusername là sys, mật khẩu 123456 (như lúc cài đặt), và chọn tư cách kết nối làSYSDBA để có thể quản lý toàn bộ cơ sở dữ liệu.

Cuối cùng, giao diện quản lý Web Oracle sẽ được hiển thị, đa số thao tác công việc vớiOracle đều được thực hiện thông qua giao diện này.

Page 88: Kiến thức công nghệ và ngôn ngữ

Trang 88

2. Tạo cơ sở dữ liệuOracle chứa nhiều database với tên thường giống với SID (System DB Identify-Nhậndạng DB hệ thống). Chẳng hạn, ở phần cài đặt trước, chúng ta có database là orcl thìsid cũng là orcl. Mỗi database chứa nhiều schema (lược đồ) với tên truy cập vàoschema trùng tên. Thông thường, người ta chỉ thêm mới schema chứ không thêm mớidatabase. Nếu trong quá trình cài đặt Oracle chưa có cài đặt database hoặc database bịlỗi thì có thể tạo mới database.

Để cho dễ hình dung, chúng ta có thể xem xét hình sau về sự so sánh giữa cách tạodatabase ở Oracle và SQL Server. Trong SQL Server, mỗi database được xem là riêngbiệt, ví dụ chúng ta có 3 database với tên là HR, Sales và DW. Tuy nhiên, Oracle lạixem các dữ liệu này tương ứng với 3 Schema thuộc 1 database mặc định lúc cài đặt làorcl.

2.1. Công cụ Database Configuration AssistantĐể tạo 1 database mới, chọn công cụ Database Configuration Assistant ở phầnRecently added hoặc vào Start -> Oracle - OraDb11g_home1.

Sau đó nhấn Next, chọn Create a Database, nhấn Next, chọn General Purpose orTransaction Processing và lại chọn Next.

Page 89: Kiến thức công nghệ và ngôn ngữ

Trang 89

Đến bước này, đặt tên cơ sở dữ liệu mới là dlu và SID là dlu, số SID bạn có thể đặttên khác, tuy nhiên để dễ nhớ, hãy lấy tên trùng với tên cơ sở dữ liệu, sau đó nhấnNext.

Nếu muốn mở tính năng cảnh báo thông qua server SMTP hoặc địa chỉ email thì chọnEnable Alert Notifications; hoặc nếu muốn backup database hàng ngày thì bật tínhnăng Enable Daily Disk…, sau đó nhấn Next tiếp tục.

Tiếp theo, tiến hành đặt mật khẩu cho các tài khoản kết nối với database, sở dĩ có việcnày là vì Oracle muốn tính năng bảo mật cho database mới chặt chẽ hơn. Chúng ta cóthể đặt mật khẩu riêng lẻ cho từng tài khoản khác nhau hoặc đặt chung 1 mật khẩu.Trong môn này, để thuận tiện, hãy chọn tính năng đặt chung mật khẩu với mật khẩu là123456.

Page 90: Kiến thức công nghệ và ngôn ngữ

Trang 90

Do mật khẩu đơn giản, cho nên Oracle sẽ hỏi xác nhận lần nữa, nhấn Yes để tiếp tục.Tiếp theo, có 2 dạng tập tin cho database là File System và Automatic StorageManagement (ASM) với ASM là tính năng của Oracle để phép đơn giản hóa việc quảnlý cơ sở dữ liệu, tập tin hệ thống và log. Phần này chọn File System để tìm hiểu kỹ hơnvề Oracle và nhấn Next.

Tiếp tục, bước này sẽ chọn khu vực ở lưu trữ nhanh cơ sở dữ liệu, hãy để mặc định vànhấn Next.

Chọn Sample Schemas để có những lược đồ ví dụ cho database dlu mới vừa tạo, nếumuốn tạo thêm các bảng thông qua script sql, hãy chọn Custom Scripts, còn không hãybỏ qua phần này.

Page 91: Kiến thức công nghệ và ngôn ngữ

Trang 91

Kế đến, chọn Memory, Sizing cho database, bật qua Tab Character Sets, chọnDatabase Character Set là AL32UTF8 để database có thể hiển thị tiếng Việt. Phầnphía dưới chọn như trong hình, sau đó nhấn Finish.

Nhấn OK để bắt đầu tạo database mới và đợi cho đến khi database mới được tạo xong.

Page 92: Kiến thức công nghệ và ngôn ngữ

Trang 92

2.2. Công cụ SQL PlusMột phương pháp khác tạo cơ sở dữ liệu đó là sử dụng SQL Plus thông qua các dònglệnh. Lưu ý phương pháp này hơi phức tạp và khó hiểu, nhất là với những người đangbắt đầu làm quen với Oracle. Các bước được giản lược được trình bày sau đây.

Bước 1: Mở SQL PlusĐầu tiên, mở công cụ SQL Plus ở Start -> Oracle - OraDb11g_home1, chọn SQL Plus.

Bước 2: Đăng nhập vào database với tên user-name sys với quyền SYSDBA và mậtkhẩu là 123456.SQL>Enter user-name: sys AS SYSDBASQL>Password:

Bước 3: Chạy câu lệnh CREATE DATABASE để tạo cơ sở dữ liệu.CREATE DATABASE mynewdb

USER SYS IDENTIFIED BY sys_passwordUSER SYSTEM IDENTIFIED BY system_passwordLOGFILE GROUP 1

('/u01/app/oracle/oradata/mynewdb/redo01.log') SIZE 100M,GROUP 2

('/u01/app/oracle/oradata/mynewdb/redo02.log') SIZE 100M,GROUP 3

('/u01/app/oracle/oradata/mynewdb/redo03.log') SIZE 100M

Page 93: Kiến thức công nghệ và ngôn ngữ

Trang 93

MAXLOGFILES 5MAXLOGMEMBERS 5MAXLOGHISTORY 1MAXDATAFILES 100CHARACTER SET US7ASCIINATIONAL CHARACTER SET AL16UTF16EXTENT MANAGEMENT LOCALDATAFILE '/u01/app/oracle/oradata/mynewdb/system01.dbf' SIZE

325M REUSESYSAUX DATAFILE

'/u01/app/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSEDEFAULT TABLESPACE users

DATAFILE '/u01/app/oracle/oradata/mynewdb/users01.dbf'SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED

DEFAULT TEMPORARY TABLESPACE tempts1TEMPFILE '/u01/app/oracle/oradata/mynewdb/temp01.dbf'SIZE 20M REUSE

UNDO TABLESPACE undotbsDATAFILE '/u01/app/oracle/oradata/mynewdb/undotbs01.dbf'SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

Giải thích một số lưu ý câu lệnh trên:- mynewdb là tên cơ sở dữ liệu mới sẽ được tạo- sys_password và system_password là mật khẩu của tài khoản SYS và SYSTEM- LOG FILE GROUP 1, GROUP 2, GROUP 3 là 3 vị trí ghi file log.

MAXLOGFILES, MAXLOGMEMBERS, and MAXLOGHISTORY là 3 thamsố định nghĩa các tập tin log.

- CHARACTER SET US7ASCII là định dạng kiểu mã US7ASCII dùng để lưutrữ database, nếu muốn dùng định dạng lưu trữ tiếng Việt thì hãy sử dụng kiểumã AL32UTF8.

Đối với các bước tham khảo đầy đủ, bạn có thể tham khảo thêm ở:https://goo.gl/frSCix.

3. Giao diện làm việc với cơ sở dữ liệuĐể làm việc với cơ sở dữ liệu, chúng ta có thể sử dụng công cụ SQL Plus và các côngcụ trực quan như Oracle SQL Developer, Toad và PL/SQL Developer.

3.1. SQL PlusĐể khởi động SQL Plus, chọn Start -> Oracle - OraDb11g_home1, chọn SQL Plus.Giao diện SQL Plus là giao diện dòng lệnh Console, đây là giao diện mặc định để quảnlý database Oracle. Người sử dụng cần nắm vững các câu lệnh SQL để có thể tươngtác tốt với database.

Page 94: Kiến thức công nghệ và ngôn ngữ

Trang 94

Sau khi cửa sổ SQL Plus hiện ra, hãy đăng nhập vào cơ sở dữ liệu Oracle với user-name là sys as SYSDBA (gán quyền SYSDBA để có tất cả quyền can thiệp vào hệthống) và mật khẩu 123456 (như lúc cài đặt).

Tiếp đến, chúng ta có thể gõ các câu lệnh truy vấn sql thông thường để tương tác vớidatabase.

3.2. SQL DeveloperSQL Developer là giao diện quản lý dựa trên nền Java. Để chạy được công cụ này,trước hết, chúng ta phải cài đặt Java Development Kit (JDK) bản 32 bit hoặc 64 bit tùytheo cấu hình máy tính. Một số đường dẫn để cài đặt JDK như sau:

- Java SE Development Kit 8 (32 bit và 64 bit):http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

- Java SE Development Kit 9 (64 bit):http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html

Sau khi cài đặt JDK, chúng ta có thể mở SQL Developer ở thanh Start -> Oracle -OraDb11g_home1, chọn SQL Developer. Đến bước này nếu chương trình có yêu cầutập tin java.exe thì hãy trỏ đến thư mục Oracle chứa tập tin này, chẳng hạn như đườngdẫn F:\app\TGDD\product\11.2.0\dbhome_1\jdk\jre\bin.

Page 95: Kiến thức công nghệ và ngôn ngữ

Trang 95

Với Windows 10 64 bit, SQL Developer phải được tải về và sử dụng riêng biệt (khôngphải SQL Developer kèm theo gói Oracle lúc cài đặt). Địa chỉ tải về SQL Developer17.3 là https://goo.gl/rQFXHu. Giao diện chương trình SQL Developer cũng chứa cácthành phần cơ bản như thanh Toolbar (đầu), Browser (duyệt các đối tượng bảng, quanhệ, …) và phần xem nội dung chính.

3.3 ToadToad là một phần mềm thương mại bên thứ 3 giúp làm việc với cơ sở dữ liệu Oracletrực quan hơn và được quản trị viên Oracle đánh giá khá tốt. Để cài đặt phần mềm, hãytải về ở địa chỉ, sau đó tiến hành cài đặt: https://goo.gl/Yaf8pj. Lưu ý đây là phần mềmthương mại vì vậy chúng ta chỉ có thể sử dụng phần mềm có thời hạn (trial) hoặc bỏtiền mua phần mềm nếu muốn sử dụng lâu dài. Giao diện phần mềm Toad cũng khá dễhiểu với Toolbar (1), phần Navigator (2) dùng để duyệt database, table, … và phầnEditor (3) chứa các câu lệnh sql và kết quả hiển thị.

Page 96: Kiến thức công nghệ và ngôn ngữ

Trang 96

3.4 PL/SQL DeveloperPL/SQL Developer cũng là 1 phần mềm thương mại bên thứ 3 và là phần mềm cực kỳphổ biến đối với các quản trị viên. Địa chỉ tải về phần mềm là https://goo.gl/XaUgr6và phiên bản mới nhất là PL/SQL Developer 12.0. Về cách cài đặt PL/SQL Developervà kết nối tới Oracle, hãy tham khảo mục riêng về PL/SQL Developer ở phần nội dungtiếp theo. Giao diện làm việc của PL/SQL Developer cũng có kết cấu tương tự cácchương trình khác, gồm thanh Ribbon, phần Panel trái và nội dung chính.

4. Quản lý cơ sở dữ liệuSau khi tạo cơ sở dữ liệu xong, chúng ta tiến hành sẽ tạo các schema (tương ứng 1database ở các hệ thống quản trị cơ sở liệu khác), tiếp đến là tạo bảng trong cácschema, mối quan hệ giữa các bảng, thực hiện một số truy vấn cơ bản và các thao tácliên quan. Trong phần này, trước hết hãy sử dụng công cụ SQL Plus để làm quen vớicác dòng lệnh, trong lúc thực hành các bài Lab, học viên có thể sử dụng các công cụtrực quan khác, chẳng hạn như SQL Server để quản lý cơ sở dữ liệu.

4.1. Tạo schema mớiĐể tạo 1 schema mới, trước hết chúng ta cần nắm khái niệm của schema và user. Userlà tài khoản người dùng được tạo bằng lệnh CREATE USER, tài khoản có thể đăngnhập vào Oracle và sở hữu 1 schema. Schema là được quản lý bởi 1 user chứa các đối

Page 97: Kiến thức công nghệ và ngôn ngữ

Trang 97

tượng như table, view, stored procedures, index, sequence,... Các đối tượng này củaschema lưu trữ ở Tablespace (không gian bảng). Một tablespace có thể lưu dữ liệu củanhiều schema và các đối tượng dữ liệu trong 1 schema có thể được lưu trữ trong nhiềutablespace khác nhau tùy theo mô hình dữ liệu. Mối quan hệ giữa user và schema làmối quan hệ 1-1. Schema sẽ được tạo tự động cùng với user khi chúng ta thực thi lệnhCREATE USER.

Sau khi đăng nhập vào Oracle thông qua công cụ SQL Plus (sys as sysdba), thì tiếnhành tạo schema mới. Ví dụ tạo 1 user mới với tên là myuser (đây cũng là tên schema)và mật khẩu 123456.

CREATE USER myuser IDENTIFIED BY 123456DEFAULT TABLESPACE usersTEMPORARY TABLESPACE tempQUOTA UNLIMITED ON users;QUOTA 100M ON my_data;

Ở câu lệnh trên, tablespace mặc định là users, còn tablespace tạm thời là temp. Chúngta cũng định nghĩa hạn mức sử dụng cho users là không giới hạn, còn quota là 100Mtrên tablespace my_data với tài khoản my_user. Lưu ý chúng ta phải tạo tablespacemy_data trước khi sử dụng câu lệnh trên, xem hướng dẫn phần tiếp theo.

Tiếp theo chúng ta phải cấp quyền cho usermyuser vừa tạo.

-- Cấp quyền login và tạo sessiongrant create session to myuser;

-- Cấp quyền cơ bảngrant create table to myuser;grant create trigger to myuser;grant create sequence to myuser;GRANT CREATE VIEW TO myuser;

-- Cấp quyền Admin/DBAgrant all PRIVILEGES on myuser to myuser;

-- hoặc cách thứ hai để cấp quyền Admin/DBAGRANT dba, connect to myuser;

4.2. Tạo tablespaceTablespace là việc cấp phát vùng dữ liệu làm việc cho user. Một số thao tác vớitablespace như tạo mới tablespace, mở rộng và thêm mới datafile.

Lệnh tạo tablespace và gán quyền sử dụng cho user

Page 98: Kiến thức công nghệ và ngôn ngữ

Trang 98

create tablespace myspacelogging

datafile '/u03/oradata/userdata02.dbf'size 32mautoextend onnext 32m maxsize 2048mextent management local;

Cấp quyền cho user sử dụng tablespaceGRANT UNLIMITED TABLESPACE TO <username>-- ORALTER USER <username> QUOTA 100M ON <tablespace name>-- ORALTER USER <username> DEFAULT TABLESPACE <tablespace name>

Mở rộng tablespace theo dung lượng datafile thêm 200MBALTER DATABASEDATAFILE '/u03/oradata/userdata02.dbf'RESIZE 200M;

Mở rộng tablespace bằng datafile mới. Nếu trên phân vùng đĩa đã hết dung lượng thìcó thể thêm một datafile mới ở phân vùng khác cho riêng tablespace cần mở rộng.ALTER TABLESPACE app_dataADD DATAFILE ‘/u01/oradata/userdata03.dbf’SIZE 200M;

4.3. Tạo bảngSau khi tạo user, schema và tablespace, chúng ta có thể tiến hành tạo bảng. Cú phápcâu lệnh tạo bảng sql là:CREATE TABLE table_name(column1 datatype [ NULL | NOT NULL ],column2 datatype [ NULL | NOT NULL ],...column_n datatype [ NULL | NOT NULL ]

);

Ví dụ tạo bảng customersCREATE TABLE customers( customer_id number(10) NOT NULL,customer_name varchar2(50) NOT NULL,city varchar2(50)

);

Tạo bảng customers với khóa chính là customer_id

Page 99: Kiến thức công nghệ và ngôn ngữ

Trang 99

CREATE TABLE customers( customer_id number(10) NOT NULL,customer_name varchar2(50) NOT NULL,city varchar2(50),CONSTRAINT customers_pk PRIMARY KEY (customer_id)

);

Tạo bảng departments với khóa chính là department_idCREATE TABLE departments( department_id number(10) NOT NULL,department_name varchar2(50) NOT NULL,CONSTRAINT departments_pk PRIMARY KEY (department_id)

);

Tạo bảng employees với khóa chính là employee_number và khóa ngoại làdepartment_id, liên kết với bảng departments.CREATE TABLE employees( employee_number number(10) NOT NULL,employee_name varchar2(50) NOT NULL,department_id number(10),salary number(6),CONSTRAINT employees_pk PRIMARY KEY (employee_number),CONSTRAINT fk_departments

FOREIGN KEY (department_id)REFERENCES departments(department_id)

);

4.4. Các câu lệnh xem, thêm, xóa, sửa dữ liệu trong bảngĐể làm việc với dữ liệu trên Oracle, chúng ta cũng sử dụng các câu lệnh sql quenthuộc như select, insert, update và delete.

Cú pháp InsertINSERT INTO table_name (column1, column2, column3, ...)VALUES (value1, value2, value3, ...);

Cú pháp SelectSELECT column1, column2, ...FROM table_name;

Cú pháp DeleteDELETE FROM table_nameWHERE condition;

Cú pháp UpdateUPDATE table_name

Page 100: Kiến thức công nghệ và ngôn ngữ

Trang 100

SET column1 = value1, column2 = value2, ...WHERE condition;

Ví dụ, thêm 2 trường dữ liệu mới vào bảng customersinsert into customers (customer_id, customer_name, city) values('1', 'thang', 'dalat');insert into customers (customer_id, customer_name, city) values('2', 'phuong', 'hanoi');

Ví dụ, xem nội dung bảng customersselect * from customers

5. Cấu trúc lưu trữMột cơ sở dữ liệu Oracle cơ bản có 3 cấu trúc đó là:

- Cấu trúc bộ nhớ (memory structure)- Cấu trúc process (process structure)- Cấu trúc về lưu trữ (storage structure)

Phần lưu trữ cơ sở dữ liệu gọi là instance (thể hiện) được tạo thành từ cấu trúc bộ nhớvà các tiến trình. Đối với hệ thống cơ sở dữ liệu dạngkhông gom cụm (nonclustered)thì mỗi database sẽ chạy trên 1 instance. Vì vậy nếu có 2 database thì sẽ có 2 instance,với mỗi database được chạy trên 1 instance. Đối với hệ thống cơ sở dữ liệu gom cụm(clustered), mỗi database sẽ chạy trên nhiều instance. Chẳng hạn, nếu có 3 server cùngchạy 1 database, mỗi server là 1 instance.

Kiến trúc bộ nhớ là phần quan trọng nhất trong mô hình hoạt động của Oracle. Kiếntrúc bộ nhớ gồm 2 phần:

- System Global Area (SGA): phần bộ nhớ chia sẻ, bao gồm nhiều phần bộ nhớnhỏ bên trong, chứa thông tin về hoạt động database, thông tin về các session,process, code thực thi, dữ liệu đọc từ phần lưu trữ lên…

- Program Global Area (PGA): phần bộ nhớ riêng cho mỗi server process (usersession) hay background process.

5.1 System Global Area (SGA)SGA là phần bộ nhớ cực kỳ quan trọng trong Oracle instance. SGA chứa các dữ liệu,thông tin hoạt động của database, và được dùng chung cho các server/backgroundprocesses. Trong SGA chia ra làm nhiều phần bộ nhớ nhỏ hơn, bao gồm Shared pool.Shared pool bao gồm 1 số phần bộ nhớ nhỏ như sau:

- Library cache: chứa những câu lệnh SQL, PL/SQL của các user, cũng như parsetree, execution plan của các câu lệnh. Do là bộ nhớ chia sẻ, nên có thể chứa cáccâu lệnh giống nhau của các session, cũng như khi đã có execution plan cho 1câu lệnh, lần tiếp theo câu lệnh đó được chạy sẽ có execution plan để chạy luôn,tiết kiệm thời gian phân tích.

-

Page 101: Kiến thức công nghệ và ngôn ngữ

Trang 101

- Data dictionary: chứa các database table của user SYS và SYSTEM, là cáctable chứa các thông tin về database, cấu trúc database, thông tin về user… đểhỗ trợ trong việc thực thi các câu lệnh. Nếu phần này nhỏ, việc đọc thông tin từdata dictionary sẽ tốn thêm I/O, gọi là recursive calls.

- Server Result Cache: gồm SQL query result cache và PL/SQL function resultcache, chứa 1 số kết quả thực thi để có thể dùng lại cho các câu lệnh tương tự.

- Database Buffer Cache: Database buffer cache là phần bộ nhớ để chứa cácblock dữ liệu đọc từ đĩa lưu trữ lên. Khi 1 session cần dữ liệu, Oracle sẽ kiểmtra có trong Database buffer cache chưa. Nếu có rồi (cache hit), thì đọc luôntrong buffer cache. Nếu chưa có (cache miss), Oracle sẽ phải đọc từ thiết bị lưutrữ lên. Buffer trong Database buffer cache được quản lý theo thuật toán LRU(Least Recently Used). Những buffer cũ ít xài sẽ được xóa dữ liệu đi để lấy chỗcho dữ liệu mới cần thiết. Ngoài Database buffer cache, phần KEEP buffer poolđược dùng để chứa những dữ liệu cần sử dụng lâu hơn, phần RECYCLE bufferpool được dùng để chứa những dữ liệu cần xóa nhanh hơn, phần nK buffercache sẽ dùng để chứa dữ liệu từ những block khác size mặc định (vd 16k, 32k).

- Redo Log Buffer: Redo log buffer là phần bộ nhớ chứa những thay đổi trêndatabase, do các câu lệnh DML, DDL hay do các hoạt động nội bộ trongdatabase. Khi Redo log buffer đầy 1/3 hoặc cứ sau mỗi 3 giây, Log writerprocess sẽ ghi vào Redo log files, để lấy chỗ cho những nội dung thay đổi mới.Do Redo log buffer chứa những thay đổi trên database, nên để đảm bảo toànvẹn dữ liệu, 1 transaction chỉ được coi là đã commit khi đã ghi những thay đổitrong Redo log buffer vào Redo log files, đảm bảo nếu có sự cố có thể recoverđược những thay đổi gần nhất.

- Large Pool: Large pool có khả năng cấp phát 1 lượng lớn block buffer, dùngcho các hoạt động lớn trong database, như các transaction liên quan tới nhiềudatabase, các parallel query, backup/restore, các hoạt động I/O của server

Page 102: Kiến thức công nghệ và ngôn ngữ

Trang 102

process, Advanced Queuing memory table… Large pool không dùng thuật toánLRU để quản lý.

- Java Pool: Phần bộ nhớ này được dùng để lưu tất cả những code và data Javatrong session của user, cũng như của máy ảo Java (JVM). Khi chạyexport/import chẳng hạn, phần bộ nhớ này sẽ được sử dụng.

- Streams Pool: Streams Pool phục vụ cho Oracle Streams. Nếu cấu hình StreamsPool bằng 0, phần bộ nhớ cho các hoạt động Streams set được cấp phát từShared pool và tối đa là 10% Shared pool.

5.2. Program Global Area (PGA)Có 1 phần bộ nhớ trong hệ thống chứa thông tin về session, gọi là User Global Area(UGA). Trong trường hợp instance dùng cấu hình shared server, UGA sẽ nằm trongSGA luôn. Còn trường hợp instance cấu hình dedicated server, UGA sẽ nằm trongPGA. PGA là phần bộ nhớ riêng cho mỗi server process.

Ngoài UGA, PGA còn chứa Private SQL Area và SQL Work Areas.- Private SQL Area: chứa các bind variables, thông tin về câu query (ví dụ như số

dòng khi thực hiện full table scan)…- SQL Work Areas: vùng bộ nhớ này dùng cho các hoạt động khác liên quan đến

câu query như: sort area dùng cho việc sắp xếp, hash area dùng cho thao táchash join, bitmap merge area cho thao tác merge bitmap từ bitmap index scan…

Page 103: Kiến thức công nghệ và ngôn ngữ

Trang 103

Ngoài SGA và PGA, Oracle instance còn sử dụng Software code area, là 1 phần bộnhớ riêng biệt, chứa code thực thi của Oracle. Phần bộ nhớ này là read-only, thường cốđịnh và chỉ thay đổi khi update/reinstall software.

Chương 9. Quản lý người dùng và đối tượng người dùng trong Oracle1. Quản lý người dùng1.1. TablespaceMột CSDL Oracle được chia thành những đơn vị lưu trữ luận lý được gọi là cáctablespace, nhằm mục đích gom nhóm các cấu trúc luận lý có liên quan với nhau. MỗiCSDL có 1 hoặc nhiều các tablespace. Mỗi tablespace chứa 1 hoặc nhiều các datafile.Datafile là các cấu trúc vật lý tương thích với hệ điều hành bên dưới, dùng để lưu trữdữ liệu của các cấu trúc luận lý trong tablespace chứa nó.

Kích thước tổng cộng của các datafile chính là dung tích lưu trữ tổng cộng củatablespace đó. Một CSDL có 2 tablespace SYSTEM và USERS. Tablespace SYSTEMchứa 2 datafile là DATA1.ORA và DATA2.ORA. Một tablespace chứa 2 datafile. Bêntrong các datafile là các đối tượng, như là table và index. Các đối tượng trongtablespace có thể nằm trên vài datafile. Có 2 loại tablespace:

- System tablespace: Mọi CSDL Oracle đều có 2 system tablespace là SYSTEMvà SYSAUX, được tạo ra một cách tự động. Chứa thông tin về các data

Page 104: Kiến thức công nghệ và ngôn ngữ

Trang 104

dictionary views, các định nghĩa của stored procedures, packages, và cácdatabase triggers dưới dạng PL/SQL program units, SYSTEM rollbacksegment,… Không nên chứa dữ liệu người dùng trong tablespace này mặc dùcó thể.

- Non-system tablespace: Dùng để chứa các loại dữ liệu còn lại, đặc biệt là cácdữ liệu của người dùng.

Một cách phân loại khác của tablespace- Temporary tablespace: được sử dụng để dành riêng cho các thao tác sắp xếp dữ

liệu.- Permanent tablespace: Các tablespaces không phải là temporary tablespaces

được gọi là các permanent tablespaces. Các permanent tablespace được sử dụngđể lưu trữ dữ liệu trong database.

1.2. SchemaSchema là một tập hợp các đối tượng cơ sở dữ liệu (vd: table, view, index,…). Mỗischema được sở hữu bởi một user và có cùng tên với user. Không có mối quan hệ nàogiữa schema và tablespace. Các đối tượng thuộc 1 schema có thể nằm trên cáctablespace khác nhau và 1 tablespace có thể chứa các đối tượng thuộc nhiều schemakhác nhau.2. Quản lý đối tượng người dùng2.1 Quản lý người dùng OracleMỗi database Oracle có 1 danh sách người dùng hợp lệ. Để truy cập 1 database, 1người dùng phải chạy ứng dụng database và kết nối vào thể hiện database (databaseinstance) bằng cách sử dụng 1 tên người dùng hợp lệ được định nghĩa trong database.

2.1.1 Tạo người dùng mớiĐể tạo người dùng mới, chúng ta sử dụng mệnh đề CREATE USER và phải có quyềntạo user. DBA hoặc admin bảo mật (security administrator) mới có quyền tạo user. Vídụ tạo 1 user mới tên là jward.

CREATE USER jwardIDENTIFIED BY AZ7BC2DEFAULT TABLESPACE data_tsQUOTA 100M ON test_tsQUOTA 500K ON data_tsTEMPORARY TABLESPACE temp_tsPROFILE clerk;

GRANT create session TO jward;

User mới tạo không thể kết nối databse cho đến khi được gán đặc quyền hệ thốngCREATE SESSION.

Page 105: Kiến thức công nghệ và ngôn ngữ

Trang 105

2.1.2 Thay đổi người dùngNgười dùng có thể thay đổi mật khẩu. Tuy nhiên, để thay đổi bất kỳ tùy chọn trênvùng bảo mật người dùng, chúng ta phải dùng lệnh ALTER USER và admin bảo mậtmới có quyền này.

Ví dụ thay đổi quyền của người dùng có tên là avyrros.

ALTER USER avyrrosIDENTIFIED EXTERNALLYDEFAULT TABLESPACE data_tsTEMPORARY TABLESPACE temp_tsQUOTA 100M ON data_tsQUOTA 0 ON test_tsPROFILE clerk;

Giải thích ý nghĩa trên:- IDENTIFIED EXTERNALLY có nghĩa là tài khoản phải được chứng thực bởi hệthống điều hành (operating system) hoặc dịch vụ mạn (network service).- Thay đổi thiết lập tablespace mặc định và tạm thời cho user avyrros là data_ts vàtemp_ts- User avyrros có hạn mức 100M cho tablespace data_ts và hạn mức của tablespacetest_ts bị thu hồi- avyrros được gán vào hồ sơ clerk.

2.1.3 Hủy người dùngKhi 1 người dùng bị hủy (drop), người dùng đó và các schema liên kết bị xóa khỏi thưmục data và tất cả đối tượng schema chứa trong schema người, nếu có, ngay lập tức bịhủy. Người dùng hiện đang kết nối database thì không thể bị hủy.

Do đó cần phải dừng phiên làm việc người dùng bằng cách dùng mệnh đề ALTERSYSTEM với KILL SESSION.

Ví dụ, thực hiện các lệnh xem các session hiện tại như trong hình sau, sau đó tìm sidvà serial để thực hiện lệnh KILL SESSION.

Page 106: Kiến thức công nghệ và ngôn ngữ

Trang 106

SQL> ALTER SYSTEM KILL SESSION 'sid,serial#';

Nếu người dùng chưa kết nối database nào hiện tại, chúng ta dùng lệnh DROP USERđể hủy người dùng. Để thực hiện lệnh này, chúng ta cũng cần có quyền admin bảo mật.Nếu schema người dùng chứa các đối tượng schema phụ thuộc, chúng ta cần dùng tùychọn CASCADA để loại bỏ luôn tất cả phụ thuộc này.

Ví dụ sau hủy người dùng và loại bỏ tất cả đối tượng phụ thuộc và khóa ngoại dựa trênbảng sở hữu bởi jones.

DROP USER jones CASCADE;

2.2 Xem thông tin người dùngBảng liệt kê 1 số thông tin và hồ sơ người dùng như sau:

Xem Mô tảDBA_USERS Mô tả tất cả người dùngALL_USERS Liệt kê các người dùng nhìn thấy được bởi người

dùng hiện tại, nhưng không có thông tin mô tảUSER_USERS Mô tả người dùng hiện tạiDBA_TS_QUOTASUSER_TS_QUOTAS

Mô tả hạn mức tablespace cho người dùng

USER_PASSWORD_LIMITS Mô tả các tham số hồ sơ mật khẩu được gán chongười dùng

USER_RESOURCE_LIMITS Hiển thị các giới hạn tài nguyên

Page 107: Kiến thức công nghệ và ngôn ngữ

Trang 107

DBA_PROFILES Hiển thị hồ sơ và các giới hạnRESOURCE_COST Hiển giá cost cho mỗi tài nguyênV$SESSION Liệt kê thông tin phiên làm việc cho mỗi phiên hiện

tại, bao gồm user nameV$SESSTAT Liệt kê thống kế phiên làm việc người dùngV$STATNAME Hiển thị các tên thống kê được giải mã ở

V$SESSTAT viewPROXY_USERS Mô tả người dùng có thể nhận diện người dùng

khác

Ví dụ hiển thị tất cả người dùng và thông tin liên quan.

SELECT USERNAME, PROFILE, ACCOUNT_STATUS FROM DBA_USERS;

Kết quả:

USERNAME PROFILE ACCOUNT_STATUS--------------- --------------- ---------------SYS DEFAULT OPENSYSTEM DEFAULT OPENUSERSCOTT DEFAULT OPENJFEE CLERK OPENDCRANNEY DEFAULT OPEN

2.3 Đặc quyền người dùngĐặc quyền người dùng là quyền thực thi 1 dạng mệnh đề SQL nào đó, hoặc quyền truycập 1 đối tượng thuộc về người dùng khác, hay chạy 1 gói PL/SQL,... Các dạng đặcquyền được định nghĩa bởi database Oracle. Các vai trò được tạo bởi người dùng(thường là admin) để gom nhóm các đặc quyền hay các vai trò khác với nhau.

2.3.1 Đặc quyền hệ thốngCó hơn 100 đặc quyền hệ thống, mỗi đặc quyền cho phép người thực thi 1 hành độngnào đó hoặc tập các hành động.

2.3.2 Đặc quyền đối tượngMỗi dạng đối tượng có các đặc quyền khác nhau liên quan đến nó. Chúng ta có thểdùng ALL [PRIVILEGES] để gán/thu hồi các đặc quyền đối tượng cho 1 đối tượng.Tượng tự, các đặc quyền được gán có thể bị thu hồi bằng lệnh ALL. Ví dụ nhưREVOKE ALL, tuy nhiên cần xem xét các ràng buộc trước khi thu hồi, khi đó dùngtùy chọn CASCADE CONSTRAINTS ở mệnh đề REVOKE.

Page 108: Kiến thức công nghệ và ngôn ngữ

Trang 108

2.4 Vai trò người dùng2.4.1 Tạo 1 vai tròĐể tạo 1 vai trò, dùng mệnh đề CREATE ROLE, nhưng chúng ta cần có đặc quyềnCREATE ROLE để làm và đặc quyền này chỉ thuộc về admin bảo mật.

Ví dụ tạo vai trò clerk (thư ký), được chứng thực với mật khẩu là "bicentennial".

CREATE ROLE clerk IDENTIFIED BY bicentennial;

Có thể dùng ALTER ROLE để thay đổi vai trò, ví dụ thay đổi vai trò clerk cần chứngthực bởi 1 tài nguyên bên ngoài trước khi kích hoạt vai trò.

ALTER ROLE clerk IDENTIFIED EXTERNALLY;

2.4.2 Hủy vai tròĐể hủy vai trò, chúng ta dùng mệnh đề DROP ROLE và cần có đặc quyền DROPANY ROLE của admin hệ thống. Ví dụ drop vai trò của clerk như sau.

DROP ROLE clerk;

2.5 Gán/thu hồi đặc quyềnĐể gán một đặc quyền hệ thống, chúng ta cần phải được gán đặc quyền này vớiADMIN OPTION hoặc GRANT ANY PRIVILEGE. Để gán 1 vai trò, cũng cần có đặcquyền ADMIN OPTION hoặc GRANT ANY PRIVILEGE.

Ví dụ gán đặc quyền CREATE SESSION và vai trò accts_pay cho người dùng jward.

GRANT CREATE SESSION, accts_pay TO jward;

Để thu hồi đặc quyền hệ thống và các vai trò, chúng ta có thể dùng mệnh đề REVOKEvới ADMIN OPTION và các đặc quyền hệ thống hay vai trò phù hợp.

Ví dụ, thu hồi đặc quyền CREATE TABLE và vai trò accts_rec từ user tsmith.

REVOKE CREATE TABLE, accts_rec FROM tsmith;

Page 109: Kiến thức công nghệ và ngôn ngữ

Trang 109

Chương 10. Lập trình PL/SQL1. PL/SQLTrong phần này, chúng ta sẽ tìm hiểu cách cài đặt và sử dụng công cụ PL/SQLDeveloper, cũng như cách lập trình PL/SQL thông qua công cụ này.

1.1. Cài đặt PL/SQL DeveloperĐẩu tiên, tải gói cài đặt ở địa chỉ http://www.allroundautomations.com/plsqldev.html,gói này sẽ ở dạng dùng thử, nếu bạn muốn sử dụng lâu dài hãy mua bản quyền phầnmềm này. Sau khi tải xong thì tiến hành cài đặt, nhấn vào tập tin *.msi để tiến hành càiđặt.

Sau khi cài đặt, chúng ta mở biểu tượng PL/SQL Developer trên Desktop để tiến hànhkết nối với Server Oracle. Ở màn hình kết nối, chọn username là sys, mật khẩu 123456và các thông tin như hình sau.

Page 110: Kiến thức công nghệ và ngôn ngữ

Trang 110

Nếu có xảy ra lỗi trong quá trình kết nối với server Oracle, trước hết hãy xem xét cáctrường hợp sau từ đó đưa ra giải pháp sửa lỗi phù hợp.

- PL/SQL Developer kết nối vào Oracle Database 32bit trên cùng một máy tính.- PL/SQL Developer kết nối vào Oracle Database 64bit trên cùng một máy tính.- PL/SQL Developer kết nối vào Oracle Database trên máy tính khác (máy tính

của bạn có cài Oracle).- PL/SQL Developer kết nối vào Oracle Database trên máy tính khác (máy tính

của bạn không cài Oracle).Giáo trình này sẽ không trình bày các bước sửa lỗi, học viên sẽ được tìm hiểu cách sửalỗi trong các giờ thực hành tại phòng máy.

1.2. Lập trình PL/SQLPL/SQL (Procedural Language/Structured Query Language) là một ngôn ngữ lập trìnhlập trình hướng thủ tục sử dụng cho Oracle SQL và là một mở rộng của Oracle SQL.PL/SQL bao gồm các thành phần ngôn ngữ hướng thủ tục bao gồm điều kiện và vònglặp. Nó cho phép khai báo hằng số và biến, thủ tục và các hàm, kiểu dữ liệu và biếncủa các kiểu dữ liệu, và các trigger. Nó có thể sử lý các ngoại lệ (lỗi tại thời gian chạy).Mảng cũng được hỗ trợ nâng cấp để sử dụng cho các tập hợp trong PL/SQL.

Từ phiên bản 8 trở đi nó bao gồm thêm các tính năng hướng đối tượng. Nó có thể tạomột đơn vị PL/SQL như thủ tục, hàm, package, kiểu dữ liệu, triggers, những thứ đượclưu trữ trong database được tái sử dụng bởi các ứng dụng bất kỳ giao tiếp với ứngdụng Oracle.

Một số lưu ý cần nắm trước khi lập trình với PL/SQL đó là:- Mỗi lệnh SQL kềt thúc bằng dấu chấm phẩy (;)- Các lệnh thuộc "ngôn ngữ định nghĩa dữ liệu" (Data Definition Language -

DDL) không được sử dụng trong PL/SQL

Page 111: Kiến thức công nghệ và ngôn ngữ

Trang 111

- Lệnh SELECT.. INTO trả về nhiều dòng có thể gây ra exception ( > 1 dòng).- Lệnh SELECT .. INTO không trả về dòng nào có thể gây ra exception- Các lệnh thuộc "ngôn ngữ thao tác trên dữ liệu" (Data Manipulation Language- DML) có thể tác động trên nhiều dòng dữ liệu.- Sử dụng toán tử := để giá giá trị cho một biến.

Ví dụ một đoạn mã lập trình PL/SQL như sau:-- Lệnh gán giá trị cho biếnx := 1;-- Lệnh Insert:Insert into Department (Dept_Id, Dept_No, Dept_Name, Location)values (1, 'D1', 'HR', 'Chicago');-- Bắt ngoại lệ:BeginSelect Dept.Dept_Idinto v_Dept_Idfrom Department Dep;

Exception when too_many_rows thenDbms_Output.put_line('Error:'||Sqlerrm);

End;......

PL/SQL được tổ chức theo từng khối lệnh, Một khối lệnh có thể có các khối lệnh conbên trong.

Declare

-- Phần khai báo - Không bắt buộc-

-- Khai báo các biến sử dụng trong phần thânv_Location Varchar2(100);

Begin-- Phần thân của khối lệnh-- Đoạn lệnh thực hiệnv_Location := 'Chicago';-- ....

Exception-- Phần xử lý lỗi - Không bắt buộc-- Bắt để sử lý các ngoại lệ khác nhau.When No_Data_Found Then

-- Ngoại lệ khi câu lệnh SELECT .. INTO không trả về dòngnào

-- (Không bắt buộc phải bắt)-- Sử lý gì đó tại đây.-- Hoặc để lệnh null nếu không cần sử lý.Null;

When Too_Many_Rows Then

Page 112: Kiến thức công nghệ và ngôn ngữ

Trang 112

-- Ngoại lệ khi câu lệnh SELECT .. INTO trả về nhiều dòng-- (Không bắt buộc phải bắt)Null;

When Others Then-- Các ngoại lệ khácNull;

End;

1.2.1 Lệnh If/ElseCú pháp như sau:IF <điều kiện 1> THEN

Công việc 1;[ELSIF <điều kiện 2> THEN

Công việc 2;][ELSE

Công việc n + 1;]END IF;

Ví dụ với v_option là 1 thì thực thi trạng thái Run, là 2 thì BackUp, là 3 thì Stop,ngược lại không có điều kiện nào phù hợp thì Invalid.If v_Option = 1 Then

v_Action := 'Run';Elsif v_Option = 2 Then

v_Action := 'Backup';Elsif v_Option = 3 Then

v_Action := 'Stop';Else

v_Action := 'Invalid';End If;

1.2.2 Vòng lặp không định trước (LOOP)Cú pháp:LOOP-- Làm gì đó tại đây.EXIT WHEN <Điều kiện thoát khỏi vòng lặp>;END LOOP;

Ví dụ:x := 0;Loopx := x + 1;y := y - x;Exit When x > y;

Page 113: Kiến thức công nghệ và ngôn ngữ

Trang 113

End Loop;

1.2.3 Vòng lặp có định trước (FOR LOOP)Cú pháp:FOR v_Index IN <Cận dưới> .. <Cận trên>LOOP-- Làm gì đó tại đây.END LOOP;

Ví dụ:x := 0;For v_Idx In 1 .. 100 Loopx := x + 1;End Loop;

1.2.4 Vòng lặp while (WHILE)Cú pháp:WHILE <Điều kiện> LOOP-- Làm gì đó tại đâyEND LOOP;

Ví dụ:v_Text Varchar2(100);...

While Length(v_Text) < 50 Loopv_Text := v_Text || '00';

End Loop

1.2.5 Sử dụng công cụ PL/SQL Developer để lập trình PL/SQLMở công cụ PL/SQL Developer, sau đó thêm mới 1 cửa sổ SQL Windows, sau đó tiếnhành thêm các đoạn mã ở cửa số này.

Page 114: Kiến thức công nghệ và ngôn ngữ

Trang 114

Ví dụ viết đoạn mã đơn giản tính tổng hai số và in kết quả ra màn hình Console.Declarev_Result Number;-- Khai báo một biến có giá trị 50v_a Number := 50;-- Khai báo một biến có giá trị 100v_b Number := 100;

Begin-- In ra màn hình ConsoleDbms_Output.Put_Line('v_a= ' || v_a);-- In ra màn hình ConsoleDbms_Output.Put_Line('v_b= ' || v_b);-- Tính tổngv_Result := v_a + v_b;-- In ra màn hình ConsoleDbms_Output.Put_Line('v_Result= ' || v_Result);

End;

Sau khi viết xong đoạn mã, hãy nhấn F8 để thực thi (hoặc biểu tượng hình tam giácmàu xanh ở thanh menu) và bật sang tab Output để xem kết quả.

1.2.6. Các kiểu dữ liệu thông dụng và khai báoa. Kiểu số

Data Type Mô tả

PLS_INTEGER Số tự nhiên có dấu 32 bit nằm trong khoảng -2,147,483,648tới 2,147,483,647.

BINARY_INTEGER

Số tự nhiên có dấu 32 bit nằm trong khoảng -2,147,483,648tới 2,147,483,647.

BINARY_FLOAT Kiểu dấu chấm động số thực với độ chính xác đơn (Single-precision)

BINARY_DOUBLE

Kiểu dấu chấm động số thực với độ chính xác gấp đôi(Double-precision)

NUMBER(prec,scale)

Kiểu dấu chấm cố định (Fixed-point) với giá trị tuyệt đối từ1E-130 tới (không bao gồm) 1.0E126. Một biến NUMBERcũng có thể mô tả 0.

Page 115: Kiến thức công nghệ và ngôn ngữ

Trang 115

DEC(prec, scale) Kiểu dấu chấm cố định, tiêu chuẩn ANSI với độ chính xác tốiđa 38 số thâp phân.

DECIMAL(prec,scale)

Kiểu dấu chấm cố định, tiêu chuẩn IBM với độ chính xác tốiđa 38 số thập phân.

NUMERIC(pre,secale)

Loại số thực (Floating type) với độ chính xác tối đa 38 số thậpphân.

DOUBLEPRECISION

Loại số chấm động, số thực, tiêu chuẩn ANSI với độ chínhxác 126 số nhị phân (khoảng 38 số thập phân).

FLOAT Loại số chấm động, số thực tiêu chuẩn ANSI và IBM với độchính xác tối đa 126 số nhị phân (khoảng 38 số thập phân).

INT Kiểu số nguyên, tiêu chuẩn ANSI với độ chính xác tối đa 38chữ số thập phân

INTEGER Kiểu số nguyên, tiêu chuẩn ANSI và IBM với độ chính xác 38chữ số thập phân

SMALLINT Số nguyên từ -32768 --> 32767

REAL Kiểu số chấm động, số thực, với độ chính xác tối đa 63 số nhịphân (Khoảng 18 số thập phân).

b. Các kiểu số thông dụng

Kiểu số Khai báo sử dụng

Number v_Amount Number(15,2)v_Salary Number;

Integer v_Age Integer;

Float v_Amount Float;

Double

Real

c. Kiểu text

Page 116: Kiến thức công nghệ và ngôn ngữ

Trang 116

Kiểu text Khai báo sử dụng

Varchar2 v_First_Name Varchar2(32);

d. Kiểu date/time

Kiểu dữ liệu Khai báo sử dụng

Date v_Birthday Date;

e. Kiểu dữ liệu một cột (%type)

Cột First_Name trong bảng Employee có kiểu dữ liệu Varchar2 và có độ dài 20 ký tự.Để khai báo một biến có thể chứa giá trị của cột này bạn có thể khai báo theo cáchdưới đây:

-- Khai báo một biến varchar2 độ dài 20.-- Biến này có thể lưu giá trị cho cột First_Namev_First_Name Varchar2(20);

-- Gán giá trị vào biến v_First_Name lấy từ câu truy vấn.-- Ngoại lệ có thể xẩy ra khi độ dài lưu trữ của biến nhỏ-- hơn độ dài giá trị truyền vào.Select Emp.First_Nameinto v_First_NameFrom Employee EmpWhere Emp.Emp_Id = 1;

Page 117: Kiến thức công nghệ và ngôn ngữ

Trang 117

-- Khai báo một biến Varchar2 độ dài 30-- Biến này cũng có thể lưu giá trị cho cột First_Namev_First_Name2 Varchar2(30);

-- Cách khai báo an toàn:v_First_Name Employee.First_Name%Type;

Ví dụ:Declarev_Emp_Id Employee.Emp_Id%Type := 1;v_First_Name Employee.First_Name%Type;

BeginSelect Emp.First_NameInto v_First_NameFrom Employee EmpWhere Emp.Emp_Id = v_Emp_Id;----Dbms_Output.Put_Line('v_First_Name= ' || v_First_Name);

ExceptionWhen No_Data_Found Then

-- Trường hợp câu lệnh SELECT .. INTO không trả về bản ghinào

Dbms_Output.Put_Line('No data with emp_id= ' || v_Emp_Id);End;

f. Kiểu dữ liệu một dòng (%Rowtype)Cú pháp:-- Khai báo một biến.-- Là kiểu dữ liệu một dòng.

v_Variable_name Table_Name%Rowtype;

-- Ví dụ:v_Emp Employee%Rowtype;

Ví dụ:Declarev_Emp_Id Employee.Emp_Id%Type := 1;-- Khai báo một biến-- Là kiểu dữ liệu 1 dòng của bảng Employee.v_Emp Employee%Rowtype;

BeginSelect * Into v_Emp From Employee Emp Where Emp.Emp_Id =

v_Emp_Id;----Dbms_Output.Put_Line(' First_Name= ' || v_Emp.First_Name);

Page 118: Kiến thức công nghệ và ngôn ngữ

Trang 118

Dbms_Output.Put_Line(' Last_Name= ' || v_Emp.Last_Name);ExceptionWhen No_Data_Found Then-- Trường hợp câu SELECT không trả về bản ghi nàoDbms_Output.Put_Line('No data with emp_id= ' || v_Emp_Id);

End;

g. Kiểu dữ liệu RecordChúng ta có thể định nghĩa ra kiểu dữ liệu Record, kiểu dữ liệu này chứa một vài cột.Cú pháp:-- Khai báo một kiểu dữ liệu của bạn.TYPE Ten_kieu_Record IS

RECORD (Col1 Kieu_Du_Lieu1 [NOT NULL{:=|DEFAULT} Bieu_Thuc],Col2 Kieu_Du_Lieu2 [NOT NULL{:=|DEFAULT} Bieu_Thuc],

...);

-- Khai báo biến sử dụng kiểu dữ liệu trên:Ten_Bien Ten_kieu_Record;

Ví dụ:Declarev_Emp_Id Employee.Emp_Id%Type := 1;-- Định nghĩa một kiểu Record có 3 cột.Type Emp_Name_Type Is Record(

Emp_First_Name Employee.First_Name%Type,Emp_Last_Name Employee.Last_Name%Type,Emp_Full_Name Varchar2(50));

------ Định nghĩa một biến có kiểu dữ liệu Emp_Name_Typev_Emp Emp_Name_Type;

BeginSelect Emp.First_Name

,Emp.Last_Name,Emp.First_Name || ' ' || Emp.Last_Name

Into v_EmpFrom Employee EmpWhere Emp.Emp_Id = v_Emp_Id;----Dbms_Output.Put_Line(' First_Name= ' || v_Emp.Emp_First_Name);Dbms_Output.Put_Line(' Last_Name= ' || v_Emp.Emp_Last_Name);Dbms_Output.Put_Line(' Full_Name= ' || v_Emp.Emp_Full_Name);

ExceptionWhen No_Data_Found Then-- Trường hợp câu SELECT không trả về bản ghi nàoDbms_Output.Put_Line('No data with emp_id= ' || v_Emp_Id);

Page 119: Kiến thức công nghệ và ngôn ngữ

Trang 119

End;

h. Kiểu dữ liệu TableChúng ta có thể định nghĩa một kiểu dữ liệu mới, có thể lưu trữ nhiều phần tử, đó làkiểu TABLE. Các đặc điểm của kiểu TABLE:

- Kiểu dữ liệu TABLE giống như một mảng, nhưng có số phần tử không giới hạn.- Chỉ số của kiểu TABLE không nhất thiết liên tục. Ví dụ TABLE có 3 phần tử

tại chỉ số 1, 3, 5

Cú pháp:-- Khai báo một kiểu table.TYPE <Table_Name>IS TABLE OF <Data_Type> [NOT NULL]INDEX BY BINARY_INTEGER;

-- Ví dụ:-- Định nghĩa một kiểu TABLE chứa các phần tử kiểu Varchar2(50)TYPE My_TblIS TABLE OF Varchar2(50)INDEX BY BINARY_INTEGER;

Ví dụ:Declare-- Định nghĩa một kiểu TABLE.Type My_Tbl Is Table Of Varchar2(50) Index By Binary_Integer;-- Khai báo một biến sử dụng kiểu dữ liệu khai báo ở trên.v_Emps My_Tbl;

Beginv_Emps(1) := 'One';v_Emps(2) := 'Two';v_Emps(3) := 'Three';----Dbms_Output.Put_Line('Element Count = ' || v_Emps.Count);---For i In v_Emps.First .. v_Emps.Last Loop

Dbms_Output.Put_Line('Element at ' || i || ' = ' ||v_Emps(i));End Loop;

End;

Các hàm của kiểu TABLE:

Tênhàm/Thuộctính

Ý nghĩa Ví dụ sử dụng

Page 120: Kiến thức công nghệ và ngôn ngữ

Trang 120

• DELETE Xóa các dòng trong bảng v_tbl.delete(3);

• EXISTS Trả về TRUE nếu tồn tại phần tử chỉ định trongTable.

v_e:=v_tbl.exists(3);

• COUNT Trả về số lượng phần tử trong table. v_count:=v_tbl.count;

• FIRST Trả về chỉ số của phần tử đầu tiên trong table. v_first_idx:=v_tbl.first;

• LAST Trả về chỉ số phần tử cuối cùng trong table. v_last_idx:=v_tbl.last;

• NEXT Trả về chỉ số của phần tử tiếp theo trong bảng sovới chỉ số được chỉ định.

v_idx:=v_tbl.next(2);

• PRIOR Trả về chỉ số phần tử đứng trước so với phần tửđược chỉ định.

v_idx:=v_tbl.prior(2);

Ví dụ:Declare-- Định nghĩa kiểu TABLE.Type t_City_Type Is Table Of Varchar2(30) Index By

Binary_Integer;-- Khai báo biến sử dụng kiểu TABLE định nghĩa ở trên.t_City t_City_Type;v_City_Index Binary_Integer;v_e Boolean;

Begint_City(100) := 'Chicago';t_City(101) := 'Chicago';t_City(200) := 'Hanoi';t_City(301) := 'Tokyo';Begin

-- Kiểm tra xem có tồn tại phần tử có chỉ số 500 không.v_e := t_City.Exists(500);If v_e Then

Dbms_Output.Put_Line('Exists element At 500');Else

Dbms_Output.Put_Line('Not Exists element At 500');End If;---- Xóa đi phần tử tại chỉ số 101t_City.Delete(101);---- Chỉ số đầu tiên

Page 121: Kiến thức công nghệ và ngôn ngữ

Trang 121

v_City_Index := t_City.First;Dbms_Output.Put_Line('First= ' || v_City_Index);--Loop

Dbms_Output.Put_Line('Element at ' || v_City_Index || '= ' ||

t_City(v_City_Index));Exit When v_City_Index = t_City.Last;

-- Lấy chỉ số tiếp theo của chỉ số cho bởi tham số.v_City_Index := t_City.Next(v_City_Index);

End Loop;-- Ném ra ngoại lệ No_data_foundRaise No_Data_Found;

ExceptionWhen No_Data_Found Then

Dbms_Output.Put_Line('the Last City Has Been Reached.');End;

End;

i. Kiểu dữ liệu mảng (Array)Cú pháp:-- Khai báo một kiểu mảngTYPE <varray_type_name>IS VARRAY(n)OF <element_type>;

-- Ví dụ khai báo một mảng 5 phần tử, và phẩn tử có kiểuVarchar2(10);TYPE cityarrayIS VARRAY(5)OF Varchar2(10);

Ví dụ:Declare-- Định nghĩa kiểu dữ liệu Array-- chứa các dữ liệu kiểu VARCHAR2(50)Type Emp_Array Is Varray(5) Of Varchar2(50);-- Định nghĩa kiểu dữ liệu Array chứa các số Integer.Type Salary_Array Is Varray(5) Of Integer;---v_Names Emp_Array;v_Salaries Salary_Array;v_Count Integer;Begin-- Khởi tạo giá trị các phần tử của mảng.v_Names := Emp_Array('KING'

Page 122: Kiến thức công nghệ và ngôn ngữ

Trang 122

,'JONES','FORD','SMITH','BLAKE');

-- Khởi tạo giá trị các phần tử của mảng.v_Salaries := Salary_Array(5000

,2975,3000,800,2850);

-- Số phần tử.v_Count := v_Names.Count;Dbms_Output.Put_Line('Count = ' || v_Count);---For i In 1 .. v_Count Loop

Dbms_Output.Put_Line('Employee = ' || v_Names(i) || ',Salary = ' ||

v_Salaries(i));End Loop;End;

j. Thủ tục (Procedure)Một nhóm các lệnh thực hiện chức năng nào đó có thể được gom lại trong một thủ tục(procedure) nhằm làm tăng khả năng xử lý,khả năng sử dụng chung, tăng tính bảo mậtvà an toàn dữ liệu, tiện ích trong phát triển. Thủ tục có thể được lưu giữ ngay trongdatabase như một đối tượng của database, sẵn sàng cho việc tái sử dụng. Thủ tục lúcnày được gọi là Stored procedure. Với các thủ tục, ngay khi lưu giữ (save), chúng đãđược biên dịch thành dạng p-code vì thế có thể nâng cao khả năng thực hiện. Thủ tụckhông trả về giá trị trực tiếp như hàm.

Cú pháp tạo một thủ tục:-- procedure_name: Tên thủ tục-- argument: Tên tham số-- mode: Loại tham số: IN hoặc OUT hoặc IN OUT, mặc định là IN-- datatype: Kiểu dữ liệu của tham số

CREATE [OR REPLACE] PROCEDURE <procedure_name>[(argument1 [mode1] datatype1,argument2 [mode2] datatype2,...)

]IS | AS

BEGIN-- PL/SQL Block;

Page 123: Kiến thức công nghệ và ngôn ngữ

Trang 123

END;

Ví dụ:-- Ví dụ một thủ tục không tham số.CREATE OR REPLACE Procedure Do_Something AS

-- Khai báo biến tại đây.Begin-- Làm gì đó tại đây.

End;

-- Ví dụ một thủ tục có tham số-- Vừa tham số đầu vào, vừa tham số đầu ra.CREATE OR REPLACE Procedure Do_Something(p_Param1 Varchar2,

v_Param Out Varchar2)AS

-- Khai báo biến tại đây.Begin-- Làm gì đó tại đây.

End;

Hủy thủ tục (drop procedure):?123-- Hủy một thủ tục:DROP PROCEDURE <Procedure_Name>

Ví dụ tạo một thủ tục với công cụ PL/SQL, chọn New Procedure ở phần Objects.

Đặt tên thủ tục là Get_Employee_Infos và nhấn OK, như vậy chúng ta đã tạo 1 thủ tụcrỗng không có tham số nào. Sau đó, cửa số thủ tục sẽ hiển thị.

Page 124: Kiến thức công nghệ và ngôn ngữ

Trang 124

Điền nội dung sau vào thủ tục này:-- Thủ tục truyền vào p_Emp_Id-- Và trả về v_First_Name, v_Last_Name, v_Dept_Id.Create Or Replace Procedure Get_Employee_Infos(p_Emp_Id Number,v_First_Name Out Varchar2,v_Last_Name Out Varchar2,v_Dept_Id Out Number) IsBegin-- Ghi ra màn hình console.-- Dành cho người lập trình biết chương trình chạy thế nào.Dbms_Output.Put_Line('Parameter p_Emp_Id = ' || p_Emp_Id);---- Nếu câu lệnh Select này nếu không có bản ghi nào-- nó sẽ ném ra Exception NO_DATA_FOUND:---- Câu lệnh Select ở này sẽ không trả về-- nhiều hơn 1 bản ghi vì Emp_Id là duy nhất-- trong bảng EMPLOYEE.-- Do vậy không xẩy ra ngoại lệ TOO_MANY_ROWS--Select Emp.First_Name

,Emp.Last_Name,Emp.Dept_Id

Into v_First_Name,v_Last_Name,v_Dept_Id

From Employee EmpWhere Emp.Emp_Id = p_Emp_Id;---- Ghi ra màn hình Console.--Dbms_Output.Put_Line('Found Record!');Dbms_Output.Put_Line(' v_First_Name= ' || v_First_Name);Dbms_Output.Put_Line(' v_Last_Name= ' || v_Last_Name);Dbms_Output.Put_Line(' v_Dept_Id= ' || v_Dept_Id);

ExceptionWhen No_Data_Found Then

Page 125: Kiến thức công nghệ và ngôn ngữ

Trang 125

-- Ghi ra màn hình Console.Dbms_Output.Put_Line('No Record found with p_Emp_Id = ' ||

p_Emp_Id);End Get_Employee_Infos;

Cuối cùng nhấn F8 để thực thị và kiểm tra lỗi nếu đoạn mã trong thủ tục chưa chínhxác nếu có.

k. Test thủ tục trên PL/SQL DeveloperSau khi xây dựng xong thủ tục, để test xem thủ tục hoạt động như thế nào, bạn nhấnphải chuột vào thủ tục Get_Employee_Infos chọn Test. Sau đó nhập tham số đầu vàocho thủ tục (nếu có) để test từng trường hợp khác nhau.

l. Hàm (Function)Tương tự như thủ tục, hàm (function) cũng là nhóm các lệnh PL/SQL thực hiện chứcnăng nào đó. Khác với thủ tục, các hàm sẽ trả về một giá trị ngay tại lời gọi của nó.Hàm cũng có thể được lưu giữ ngay trên database dưới dạng Stored procedure.Với việc sử dụng hàm, trong một số trường hợp bạn có thể thấy được các lợi điểm nhưsau:

- Cho phép thực hiện các thao tác phức tạp(các phép tìm kiếm, so sánh phứctạp)ngay trong mệnh đề của câu lệnh SQL mà nếu không sử dụng hàm bạn sẽkhông thể nào thực hiện được

- Tăng tính độc lập của dữ liệu do việc phân tích và xử lý dữ liệu được thực hiệnngay trên Server thay vì trả về dữ liệu trực tiếp cho ứng dụng dưới Client đểchúng tiếp tục xử lý.

- Tăng tính hiệu quả của câu lệnh truy vấn bằng việc gọi các hàm ngay trong câulệnh SQL

- Bạn có thể sử dụng hàm để thao tác trên các kiểu dữ liệu tự tạo. Cho phép thựchiện đồng thời các câu lệnh truy vấn

Một số hạn chế khi sử dụng hàm trong câu lệnh SQL:- Chỉ các hàm do người dùng định nghĩa được lưu trên database mới có thể sử

dụng được cho câu lệnh SQL.- Các hàm do người dùng định nghĩa chỉ được áp dụng cho điều kiện thực hiện

trên các dòng dữ liệu (mệnh đề WHERE), không thể áp dụng cho các điều kiệnthực hiện trên nhóm (mệnh đề GROUP).

Page 126: Kiến thức công nghệ và ngôn ngữ

Trang 126

- Tham số sử dụng trong hàm chỉ có thể là loại IN, không chấp nhận giá trị OUThay giá trị IN OUT.

- Kiểu dữ liệu trả về của các hàm phải là kiểu dữ liệu DATE, NUMBER,NUMBER. Không cho phép hàm trả về kiểu dữ liệu như BOOLEAN,RECORD, TABLE. Kiểu dữ liệu trả về này phải tương thích với các kiểu dữliệu bên trong Oracle Server .

Cú pháp tạo Hàm.-- function_name: Tên hàm-- argument: Tên tham số-- mode: Loại tham số: IN hoặc OUT hoặc IN OUT, mặc định là IN-- datatype: Kiểu dữ liệu của tham số

CREATE [OR REPLACE] FUNCTION <function_name>[(argument1 [mode1] datatype1,argument2 [mode2] datatype2,...)

]RETURN datatype

IS | ASBEGIN

-- PL/SQL Block;END;

Ví dụ:-- Function has 1 parameter:CREATE OR REPLACE FUNCTION Sum(a Integer, b Integer)RETURN IntegerASBeginreturn a + b;

End;

-- A function with no parameters:CREATE OR REPLACE FUNCTION Get_Current_DatetimeRETURN DateASBeginreturn sysdate;

End;

Hủy Function (Drop function):-- Hủy Function

Page 127: Kiến thức công nghệ và ngôn ngữ

Trang 127

DROP FUNCTION <function_name>;

Gọi hàm.-- Khi gọi hàm phải khai báo một biến trả về

-- Khai báo một biến c.c Integer;....

-- Gọi hàm.c := Sum(10, 100);

Ví dụ tạo một hàm.-- Hàm truyền vào mã hệ thống của nhân viên p_Emp_ID-- Và trả về First_Name của nhân viên.

Create Or Replace Function Get_Emp_First_Name(p_Emp_Id Number)Return Varchar2 As-- Khai báo một biến v_Emp_First_Namev_Emp_First_Name Employee.First_Name%Type;

BeginBegin

Select Emp.First_NameInto v_Emp_First_NameFrom Employee EmpWhere Emp.Emp_Id = p_Emp_Id;

ExceptionWhen No_Data_Found Then

-- Gán null trong trường hợp không tìm thấy Employee-- ứng với p_Emp_IDv_Emp_First_Name := Null;

End;--Return v_Emp_First_Name;

End;

Các hàm không có tham số OUT, có thể tham gia vào câu lệnh SQL, ví dụ:Select Emp.Emp_Id

,Get_Emp_First_Name(Emp.Emp_Id) Emp_First_NameFrom Employee Emp;

Page 128: Kiến thức công nghệ và ngôn ngữ

Trang 128

Chương 11. An toàn dữ liệu, dịch vụ mạng, tính hiệu quả,và bảo trì dữ liệu

1. Bảo mật trong cơ sở dữ liệu Oracle1.1 Bảo mật cơ bảnNội dung phần chứa các kiến thức bảo mật cơ sở dữ liệu Oracle cơ bản dành choadmin hệ thống ở các khía cạnh sau:

- Tài khoản người dùng: khi tạo tài khoản người dùng, admin phải bảo mật cáctài khoản này theo nhiều cách khác nhau với chính sách mật khẩu phù hợp.

- Các phương pháp chứng thực: cơ sở dữ liệu Oracle cung cấp nhiều cách để cấuhình chứng thực cho người dùng và admin hệ thống. Ví dụ, admin cho thểchứng thực người ở mức database, từ hệ điều hành và ở trên hệ thống mạng.

- Quyền hạn và vai trò: Admin có thể sử dụng chính sách về quyền hạn và vai tròđể hạn chế người dùng truy cập dữ liệu ở các cấp độ khác nhau.

- Bảo mật ứng dụng: Bước đầu tiên để tạo một ứng dụng database là cha81cnchắn database đó được bảo mật. Vì vậy, admin cần phải biết cách để tích hợpbảo mật ứng dụng với database ứng dụng.

- Thông tin phiên đăng nhập người dùng (user session): Khi người dùng đăngnhập vào ứng dụng thì hệ thống sẽ gieo cặp tên-giá trị để giữ thông tin phiênđăng nhập. Nếu hacker nắm được thông tin này thì họ có thể đăng nhập vào ứngdụng dưới dạng người dùng đó, từ đó có gây tác động đến cơ sở dữ liệu Oracletùy theo quyền hạn người dùng mang lại.

- Truy cập database ở mức độ dòng/cột sử dụng Cơ sở dữ liệu Riêng Ảo (VirtualPrivate Database): Một chính sách Cơ sở dữ liệu Riêng Ảo có thể tự độngnhúng 1 mệnh đề WHERE trong các câu lệnh SQL mà người dùng phát sinh.Do đó, admin hệ thống cần phải mô tả cách tạo và quản lý các chính sách Cơ sởdữ liệu Riêng Ảo hợp lý.

- Mã hóa: Chúng ta có thể mã hóa dữ liệu trên mạng để ngăn chặn các truy cậptrái phép. Admin có thể dùng DBMS_CRYPTO và gói PL/SQL để mã hóa dữliệu.

- Các hoạt động kiểm toán database: Quản trị viên phải kiểm toán toàn bộ hoạtđộng database, chẳng hạn như quản lý các mệnh đề SQL, quyền truy vấn SQL,các đối tượng schema, và các hoạt động mạng. Bên cạnh đó, quản trị phải quảnlý theo cách chi tiết hơn, ví như khi nào các địa chỉ IP từ bên ngoài được chophép truy cập database.

1.2. Bảo mật nâng caoNgoài ra, có nhiều phương pháp bảo mật cơ sở liệu nâng cao như Oracle Defense inDept, an toàn dựa vào nhãn (Oracle Label Security - OLS), cơ sở dữ liệu riêng ảo(Virtual Private Database - VPD), mã hóa dữ liệu trong suốt (Transparent DataEncryption - TDE), cơ chế xác thực mạnh và cơ chế sao lưu/dự phòng an toàn. Một sốgiải pháp bảo mật Oracle như tường lửa, hệ thống phát hiện xâm nhập và chống spamđều được nhiều doanh nghiệp áp dụng. Tuy nhiên, chừng đó là vừa đủ, chỉ có thể bảo

Page 129: Kiến thức công nghệ và ngôn ngữ

Trang 129

vệ bên ngoài, chúng ta còn phải bảo vệ bên trong mới đảm bảo đầy đủ và toàn diệnviệc bảo mật cơ sở dữ liệu Oracle.

2. Các dịch vụ về mạng trong OracleCác dịch vụ mạng Oracle đem lại cho doanh nghiệp các giải pháp kết nối rộng rãitrong môi trường làm việc tính toán không đồng nhất và phân tán. Các dịch vụ nàygiảm bớt sự phức tạp của việc cấu hình mạng và quản lý, tối đa hóa hiệu năng, và cảithiện khả năng chẩn đoán mạng. Trong phần này, học viên sẽ được tìm hiểu 1 số dịchvụ mạng phổ biến khi tương tác với cơ sở dữ liệu Oracle.

2.1. Oracle NetOracle Net, một thành phần của dịch vụ mạng Oracle, cho phép 1 phiên làm việc mạngtừ 1 ứng dụng client đến server Oracle. Một khi phiên làm việc mạng được thiết lập,Oracle Net hoạt động như là công cụ chuyển phát dữ liệu cho ứng dụng client vàserver database. Oracle Net chịu trách nhiệm để thiết lập và quản lý kết nối giữa ứngdụng client và server database, cũng như trao đổi thông tin giữa chúng. Oracle Net cókhả năng thực hiện các tác vụ này vì nó làm năm mỗi máy tính trong mạng lưới.

2.1.1. Kết nối client/serverOracle Net cho phép kết nối từ các ứng dụng client/server truyền thống để serverdatabase Oracle. Hình sau mô tả cách Oracle Net cho phép một kết nối mạng giữa mộtclient và một server database. Oracle Net là một thành phần phần mềm nằm bên trongclient và server database. Oracle Net là lớp nằm trên một giao thức mạng Oracle vớicác quy tắc hỗ trợ định nghĩa cách các ứng dụng truy cập mạng và cách dữ liệu đượcphân thành các packet để truyền trên mạng. Trong mô hình này, Oracle Net liên lạcvới giao thức TCP/IP để cho phép kết nối mức máy tính và truyền dữ liệu giữa clientvà server database.

Page 130: Kiến thức công nghệ và ngôn ngữ

Trang 130

2.1.2. Các kết nối ứng dụng Web ClientCác kết nối Internet từ các trình duyệt Web đến cơ sở dữ liệu Oracle tương tự như cácứng dụng client/erver, ngoại trừ yêu cầu kết nối đi qua một ứng dụng Web. Hình sauchỉ ra kiến trúc cơ bản của một kết nối Web client, bao gồm trình duyệt Web client vàmột server web, và server Oracle. Trình duyệt ở client liên lạc với giao thức HTTP đếnweb server để tạo một yêu cầu kết nối. Web server gửi yêu cầu đến một ứng dụng đểxử lý. Ứng dụng sau đó dùng Oracle Net để liên lạc với server database Oracle, nơicũng được cấu hình với Oracle Net.

2.2. Oracle Net ListenerMột trong các hoạt động phía server database Oracle là nhận kết nối ban đầu thông quaOracle Net Listener. Oracle Net Listener là nơi lắng nghe các yêu cầu từ phía client đểchuyển tiếp yêu cầu đến server. Listener (bộ nghe) được cấu hình với 1 địa chỉ giaothức. Các client phải được cấu hình cùng địa chỉ giao thức để có thể gửi các yêu cầukết nối tới listener. Khi kết nối được thiết lập, client và server Oracle có thể liên lạcvới nhau. Hình sau chỉ ra cách một listener chấp nhận một yêu cầu kết nối từ client vàchuyển yêu cầu đó đến server.

Page 131: Kiến thức công nghệ và ngôn ngữ

Trang 131

2.3. Oracle Connection ManagerOracle Connection Manager là một thành phần phần mềm nằm ở máy tính của riêngnó, tách biệt với client và server Oracle. Phần mềm này ủy nhiệm và che giấu các yêucầu cho server database. Thêm nữa, nó dồn kênh các phiên kết nối database. Trong vaitrò dồn kênh phiên kết nối, Oracle Connection Manager hướng dẫn các phiên đa kếtnối thông qua một kết nối giao thức truyền tải đến nơi một đích cụ thể nào đó. Theocách này, Oracle Connection Manager giảm thiểu các yêu cầu dữ liệu cần để duy trì đaphiên kết nối giữa hai quá trình được kích bởi server Oracle đển sử dụng ít kết nối hơnở điểm cuối cho các yêu cầu sắp đến. Oracle Connection Manager quản lý truy cập đếnserver Oracle như là một bộ lọc kiểm soát truy cập.

Hình sau chỉ ra việc dồn kênh phiên kết nối có thể áp dụng ở kiến trúc Web. KhiOracle Connection Manager hoạt động với tư cách là 1 server Web, web Server có thểđịnh tuyến các phiên đa kết nối client thông qua Oracle Connection Manager để bảođảm những phiên kết nối tiếp tục truy cập tới server Oracle. Tính năng này hữu ích vớicác ứng dụng Web có nhiều phiên kết nối và cần rút ngắn thời gian phản hồi.

3. Quản lý dữ liệu UndoMọi cơ sở dữ liệu Oracle phải có một phương thức bảo trì thông tin được sử dụng đểtìm lại hoặc quay lại thay đổi trước đó của cơ sở dữ liệu. Những thông tin bao gồm cácghi lại các hành động của giao dịch trước khi người dùng thực hiện áp dụng hành động.

Page 132: Kiến thức công nghệ và ngôn ngữ

Trang 132

Các bản ghi này được thu thập gọi là các bản ghi quay lại. Người ta dùng Undorecords để thực hiện các tác vụ:

- Quay lại trạng thái trước đó của một giao dịch- Tìm lại cơ sở dữ liệu- Cung cấp đọc dữ liệu nhất quán- Phân tích dữ liệu giống như ở thời điểm trước đó, sử dụng Flashback Query- Lấy lại từ sự cố logic sử dụng tính năng Flashback

Trong các phiên bản trước Oracle sử dụng rollback segments để undo. Oracle 9i đượcgiới thiệu tự động quản lý undo, làm đơn giản quá trình quản lý bằng cách làm giảm sựphức tạp liên kết với việc quản lý rollback segment. Oracle cực kỳ khuyến cáo bạn nênsử dụng undo tablespace để quản lý undo hơn là rollback segments.

3.1. Chuyển đổi sang quản lý tự động Undo SpaceĐể tự động quản lý undo space cần thực hiện các bước theo hướng dẫn sau.

Bước 1. Nếu chưa tạo một undo tablespace ở thời điểm tạo một cơ sở dữ liệu, tạo mộtundo tablespace bằng cách thực hiện câu lệnh sau.SQL>create undo tablespace myundo datafile‘/u01/oracle/ica/undo_tbs.dbf’ size 500Mautoextend ON next 5M ;

Khi hệ thống chạy lần đầu tiên trong môi trường sản phẩm, phải chắc chắn thỏa mãnkhông gian yêu cầu của undo tablespace. Trong trường hợp này, có thể cho phép tựđộng undo tablespace để chúng có thể tự động tăng khi cần thêm không gian.

Bước 2. Tắt cơ sở dữ liệu và đặt các tham số sau trong file tham số.UNDO_MANAGEMENT=AUTOUNDO_TABLESPACE=myundo

Bước 3. Khởi chạy cơ sở dữ liệuOracle Database sẽ sử dụng quản lý tự động Undo Space. Để tính toán không gian yêucầu thủ công, chúng ta có thể sử dụng công thức sau:UndoSpace = UR * UPS + overhead

trong đó:- UndoSpace là số undo blocks- UR là UNDO_RETENTION trong một giây. Giá trị này nên lấy vào trong việc

xem xét các cây truy vẫn với thời gian dài và các yêu cầu flashback.- UPS là các undo blocks cho mỗi giây- overhead là small overhead cho metadata (transaction tables, bitmaps)

Ví dụ, nếu UNDO_RETENTION được đặt là 3 hours, và tốc độ giao dịch (UPS) là100 undo blocks mỗi giây, với kích thước block là 8K, yêu cầu cho undo space đượctính như sau:

Page 133: Kiến thức công nghệ và ngôn ngữ

Trang 133

(3 * 3600 * 100 * 8K) = 8.24GBs

Để lấy các giá trị cho UPS, dùng câu lệnh sau:SQL> Select * from V$UNDOSTAT;

3.2. Thay đổi UNDO TablespaceNếu Undo tablespace hết dung lượng, có thể điều chỉnh các datafiles đã có hoặc thêmcác datafiles mới. Ví dụ sau đây mở rộng một datafile đã có:SQL> alter database datafile ‘/u01/oracle/ica/undo_tbs.dbf’resize 700M

Ví dụ về việc thêm mới datafile vào undo tablespace:SQL> ALTER TABLESPACE myundo ADD DATAFILE'/u01/oracle/ica/undo02.dbf'SIZE 200M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;

3.3. Xóa một Undo TablespaceSử dụng lệnh DROP TABLESPACE để xóa một undo tablespace. Ví dụ sau sẽ xóaundo tablespace undotbs_01:SQL> DROP TABLESPACE myundo;

Undo tablespace chỉ có thể xóa nếu nó hiện tại không được sử dụng bởi bất cứ instancenào. Nếu undo tablespace bao gồm bất cứ giao dịch bên ngoài nào khác (ví dụ mộtgiao dịch đã chết nhưng nhưng không được lấy lại), lệnh DROP TABLESPACE sẽthất bại.

3.4. Chuyển đổi các Undo TablespacesChúng ta có thể chuyển đổi từ một undo tablespace sang một undo tablespace khác. BởUNDO_TABLESPACE khởi tạo tham số động, câu lệnh ALTER SYSTEM SET cóthể được sử dụng để gán một undo tablespace mới. Câu lệnh sau sẽ thực hiện chuyểnđổi một undo tablespace:ALTER SYSTEM SET UNDO_TABLESPACE = myundo2;

Giả định, myundo là một undo tablespace hiện tại, sau khi câu lệnh được thực hiệnthành công, instance sử dụng myundo2 trong vị trí của myundo như undo tablespacecủa nó.

3.5. Xem thông tin về Undo TablespaceĐể thống kê cho việc điều chỉnh truy vấn undo tablespace:SQL>select * from v$undostat;

Để xem có bao nhiêu giao dịch đang hoạt động và thông thin về undo segment:

Page 134: Kiến thức công nghệ và ngôn ngữ

Trang 134

SQL>select * from v$transaction;

Để xem kích thước của extents trong undo tablespace thực hiện câu truy vấn sau đây:SQL>select * from DBA_UNDO_EXTENTS;

4. Khái niệm về sao lưu và phục hồiMột số khái niệm về sao lưu và phục hồi được trình bày trong phần này như sau.- Backup: là việc sao lưu một phần hay toàn bộ các đối tượng, tập tin liên quan đến cơsở dữ liệu- Restore: có nghĩa là thao tác khôi phục lại database từ bản backup- Recover: phục hồi database từ archived log, online redo log- Logical backup: là việc sao lưu các đối tượng trong database (table, schema…)- Physical backup: là việc sao lưu các tập tin database (datafile, controlfile, archivedlog…)- Online backup (hot backup): backup khi database đang hoạt động- Offline backup (cold backup): backup khi database không hoạt động

Đa số ở các database quan trọng, database production sẽ cấu hình physical backup; ởcác database ít quan trọng, database test hay cấu hình logical backup cho gọn nhẹ.

Các thao tác thường dùng trong việc backup/recovery đó là:- Configuration: Cấu hình tham số- Scheduling: Đặt lịch backup chạy tự động- Monitoring: theo dõi việc backup, kiểm tra đảm bảo backup thành công- Testing: thử nghiệm recovery định kỳ để đảm bảo các bản backup hoạt động tốt- Restoration/Recovery: restore tạo database test, restore/recover khi có sự cố…

5. Sao lưu cơ sở dữ liệuKhi sử dụng RMAN, hẳn nhiên quá trình sao lưu là Hot-backup (hay Online-backup).Nhưng vì lý do nào đó không thể sử dụng RMAN mà phải sao lưu bằng hình thứcUser-managed Backup, chúng ta vẫn có thể tiến hành Hot backup bằng cách chuyểnDatabase sang Backup Mode và sử dụng chức năng COPY của HĐH để sao lưu cácData File. Yêu cầu bắt buộc để có thể sao lưu Hot-backup là Database phải hoạt độngở Archivelog Mode.

Quá trình Hot-backup được tiến hành theo 8 bước sau:- Kiểm tra Database có đang hoạt động ở Archivelog Mode- Xác định các Data File cần sao lưu- Chuyển Database vào Backup Mode- Sao lưu các Data File bằng công cụ của HĐH- Thoát khỏi Backup Mode- Tiến hành archive Redo Log đang active

Page 135: Kiến thức công nghệ và ngôn ngữ

Trang 135

- Sao lưu Control File- Sao lưu các Archive Redo Log phát sinh trong quá trình sao lưu

5.1. Sử dụng lệnh sau để kiểm tra xem Database có đang hoạt động ở ArchivelogMode

SQL>ARCHIVE LOG LIST;

Nếu Database đang ở Archivelog Mode, kết quả sẽ như bên dưới:

Database log mode Archive ModeAutomatic archival EnabledArchive destination D:\Oracle\ArchiveLog

Hoặc bạn cũng có thể sử dụng view V$DATABASE để kiểm tra Archivelog Mode:SQL> SELECT LOG_MODE FROM V$DATABASE;

Nếu Database đang ở Noarchivelog Mode, bạn chuyển sang Archivelog Mode bằnglệnh sau:SQL> ALTER DATABASE ARCHIVELOG;

5.2. Xác định các Data File cần sao lưuĐể xác đường dẫn các Data File trong Database, bạn truy xuất view V$DATAFILE:SQL> SELECT NAME FROM V$DATAFILE;

Nếu tiến hành sao lưu từng Tablespace, bạn dùng lệnh sau để xác định các Data Filecủa mỗi Tablespace:SQL> SELECT TABLESPACE_NAME, FILE_NAME FROM V$DBA_DATA_FILES;

5.3. Chuyển Database sang Backup ModeViệc chuyển Database sang Backup Mode là thao tác cực kỳ quan trọng trước khi tiếnhành thao tác COPY các Data File. Bạn tiến hành thao tác này bằng lệnh sau:

SQL> ALTER DATABASE BEGIN BACKUP;

Lệnh trên chuyển tất cả Tablespace của Database sang Backup Mode. Nếu tiến hànhsao lưu với từng Tablespace, bạn chuyển Tablespace sang Backup Mode bằng lệnh sau:

SQL> ALTER TABLESPACE <TABLESPACE_NAME> BEGIN BACKUP;

Lưu ý: Hẳn nhiên, khi không chuyển Database sang Backup Mode thì bạn vẫn có thểsao chép các Data File đứng trên phương diện HĐH (). Tuy nhiên, vì kích thước blockdữ liệu trong Oracle thường khác với block của HĐH (Windows, Linux), nên nếutrong quá trình HĐH sao chép Data File mà Data File lại được cập nhật bởi DBWRcủa Oracle sẽ dẫn đến tình huống dữ liệu trong bản sao lưu Data File bị tình trạngkhông nhất quán (split-block issue). Nếu Database được chuyển sang Backup Mode,

Page 136: Kiến thức công nghệ và ngôn ngữ

Trang 136

tình trạng split-block issue này vẫn xảy ra nhưng Oracle tiến hành thêm một bước đểđảm bảo sau này có thể phục hồi. Cụ thể, mỗi khi có thao tác thay đổi lên block,Oracle sẽ sao chép toàn bộ block đó sang Redo Log trước khi tiến hành tiến hành thayđổi. Đến khi phục hồi, Oracle sẽ phục hồi block gốc này (block trước khi cập nhật) từArchive Redo Log vào Data File trước khi apply các change vector từ Archive RedoLog.

5.4. Sao lưu các Data File bằng chức năng COPY của HĐHBạn sử dụng chức năng COPY của HĐH (xcopy trong Windows, cp trongLinux/UNIX) để sao chép các Data File vào vùng sao lưu.

Với Windows, bạn dùng lệnh XCOPY (hoặc Copy-Paste trong Windows Explorer):C:\xcopy C:\Oracle\Oradata\TestDB\*.dbf D:\OracleBackup\TestDB

Với Linux/UNIX, bạn dùng lệnh cp:$ cp /u01/dbfile/testdb/*.dbf /u01/backupdata/testdb

5.5. Thoát khỏi Backup ModeSau khi các Data File được sao chép xong, bạn thoát khỏi Backup Mode bằng lệnh sau:SQL> ALTER DATABASE END BACKUP;

Với Tablespace, bạn dùng lệnh:SQL> ALTER TABLESPACE <TABLESPACE_NAME> END BACKUP;

5.6. Tiến hành archive Redo Log đang activeTrong quá trình sao lưu, ngoài các change vector còn có các block bị thay đổi được ghivào Redo Log (Current). Để đảm bảo tất cả Redo Log đều được archive trước khi tiếnhành sao lưu các Archive Redo Log (bước 8), bạn dùng lệnh sau để tiến hành thao tácarchive:SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

5.7. Sao lưu Control FileVới Hot Backup, bạn không thể dùng chức năng COPY của HĐH để sao lưu ControlFile. Thay vào đó, bạn phải sử dụng lệnh ALTER DATABASE BACKUPCONTROLFILE để sao lưu.SQL> ALTER DATABASE BACKUP CONTROLFILE TO‘D:\OracleBackup\ControlBk.ctl’ REUSE;

Thêm tùy chọn REUSE để Oracle tự ghi đè nếu file ControlBk.ctl đã có sẵn.

Page 137: Kiến thức công nghệ và ngôn ngữ

Trang 137

5.8. Sao lưu các Archive Log phát sinh trong quá trình sao lưuBước cuối cùng, bạn sử dụng chức năng COPY của HĐH để sao lưu các Archive RedoLog phát sinh trong quá trình sao lưu. Bước này giúp bạn có đầy đủ các dữ liệu cầnthiết để khôi phục Database.

6. Phục hồi khi gặp sự cốKhi server Oracle thì chúng ta sẽ tiến hành phục hồi database nếu trong trường hợpdatabase bị xóa trắng hay mất mát dữ liệu. Để khôi phục cơ sở dữ liệu trong Oracle,chúng ta có thể sử dụng RMAN, một công cụ được dùng để backup/restore databaseOracle. RMAN nằm trong thư mục ORACLE_HOME/bin.

6.1 Kịch bản 1: Khôi phục toàn bộ databaseTrong kịch bản này, chúng ta có 1 tập tin điều khiển và SPFILE nhưng tất cả file dữliệu (datafile) đều bị mất hoặc bị hư hỏng. Như vậy, chúng ta cần phải khôi phục vàcứu toàn bộ database. Để khôi phục database khi chúng ta còn 1 tập tin điều khiển, saukhi kết nối database, chúng ta sử dụng lệnh:

RMAN> STARTUP MOUNT

Sau đó dùng lệnh SHOW ALL để xem các kênh được cấu hình để truy cập thiết bịbackup. Nếu các kênh tự động chưa cấu hình, chúng ta phải cấp phát thủ công cho 1hoặc nhiều kênh.

Khôi phục database dùng lệnh RESTORE DATABASE như sau:

RMAN> RESTORE DATABASE;RMAN> RECOVER DATABASE DELETE ARCHIVELOG MAXSIZE 25M;

Lệnh RECOVER DATABASE dùng trong 2 trường hợp:- DELETE ARCHIVELOG do RMAN xóa các tập tin log được khôi phục sau khichúng áp dụng vào datafile, để cứu vùng không gian đĩa.- MAXSIZE 25M hạn chế không gian chiếm giữ và khôi phục log tại thời điểm thựcthi là 25MB. Điều này giúp kiểm soát không gian đĩa sử dụng bởi các log khôi phục.

6.1.1 Khôi phục database với tablespace chỉ đọcCác tablespace (không gian bảng) cần phải có để xử lý đặc biệt trong hoạt động khôiphục và recover. Mặc định, quá trình khôi phục sẽ bỏ qua các tablespace chỉ đọc.Dùng RMAN để khôi phục các datafile bị thiếu thuộc về không gian chỉ đọc bằng sửdụng tùy chọn CHECK READONLY trong lệnh RESTORE:

RMAN> RESTORE DATABASE CHECK READONLY;RMAN> RECOVER DATABASE DELETE ARCHIVELOG;

Page 138: Kiến thức công nghệ và ngôn ngữ

Trang 138

Nếu RMAN thực hiện không có lỗi thì dùng lệnh sau để mở database:RMAN> ALTER DATABASE OPEN;

6.1.2 Tạo lại tablespace tạm thờiSau khi khôi phục database, khi mở database ra, nếu bất cứ tablespace bị mất ở phiênbản tập tin điều khiển của kho RMAN sẽ được tạo lại với kích thước tạo trước đây,kèm theo các thuộc tính AUTOEXTEND và MAXSIZE.

6.2 Kịch bản 2: Khôi phục các tablespace hoặc các datafile riêng lẻTrong kịch bản này, khi database được mở nhưng một số datafile bị hỏng và chúng taphải khôi phục các datafile này. Sau khi kết nối tới database, chúng ta dùng lệnhALTER TABLESPACE ... OFFLINE IMMEDIATE để đưa tablespace về trạng tháioffline để khôi phục.

RMAN> SQL 'ALTER TABLESPACE users OFFLINE IMMEDIATE';

Sau đó tiếp tục dùng lệnh RESTORE trong RMAN để khôi phục tablespace, ví dụ:

RMAN> RESTORE TABLESPACE users;

RMAN> RECOVER TABLESPACE users;

Nếu RMAN thực thi không có lỗi, thì đưa tablespace trở về trạng thái online để sửdụng, vậy là xong.

RMAN> SQL 'ALTER TABLESPACE users ONLINE';