Cộng đồng chia sẻ tri thức Lib24.vn

Cơ sở dữ liệu

b29b614553eb51908cb255e62e5ee2c4
Gửi bởi: Khoa CNTT - HCEM 8 tháng 8 2020 lúc 22:57:26 | Được cập nhật: 5 tháng 5 lúc 17:01:20 Kiểu file: DOCX | Lượt xem: 491 | Lượt Download: 4 | File size: 1.226298 Mb

Nội dung tài liệu

Tải xuống
Link tài liệu:
Tải xuống

Các tài liệu liên quan


Có thể bạn quan tâm


Thông tin tài liệu

TRƯỜNG CAO ĐẲNG NGHỀ CƠ ĐIỆN HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN

--------------------

BÀI GIẢNG

MÔN HỌC CƠ SỞ DỮ LIỆU

(Tài liệu lưu hành nội bộ)

Hà Nội - 2014

Mục lục

Chương 1. Tổng quan về cơ sở dữ liệu 1

1.1. Một số khái niệm 1

1.1.1. Cơ sở dữ liệu 1

1.1.2. Hệ quản trị cơ sở dữ liệu 2

1.2. Mô hình dữ liệu 3

1.2.1. Mô hình mạng 3

1.2.2. Mô hình phân cấp 3

1.2.3. Mô hình quan hệ 3

1.2.4. Mô hình thực thể liên kết 4

1.2.5. Mô hình hướng đối tượng 4

1.3. Mô hình thực thể liên kết 4

1.3.1. Thực thể 4

1.3.2. Thuộc tính 5

1.3.3. Mối liên kết 7

1.3.4. Xây dựng mô hình thực thể liên kết 11

Chương 2. Mô hình cơ sở dữ liệu quan hệ 15

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

2.1.1. Thuộc tính 15

2.1.2. Quan hệ 15

2.1.3. Bộ giá trị 15

2.1.4. Lược đồ quan hệ 16

2.1.5. Thể hiện của quan hệ 16

2.1.6. Khoá- siêu khoá - khoá chỉ định – khoá chính – khoá ngoại 17

2.1.7. Phụ thuộc hàm 18

2.1.8. Ràng buộc toàn vẹn 18

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

2.2. Các phép toán trên đại số tập hợp 20

2.2.1. Phép hợp 20

2.2.2. Phép giao 21

2.2.3. Phép trừ 21

2.2.4. Phép tích Đề các 21

2.2.5. Phép chia 22

2.3. Chuyển mô hình thực thể liên kết sang mô hình dữ liệu quan hệ 23

Chương 3. Ngôn ngữ SQL 26

3.1. Khái quát về ngôn ngữ dữ liệu SQL 26

3.2. Các lệnh liên quan đến cấu trúc của cơ sở dữ liệu 26

3.2.1. Tạo, sử dụng, xóa cơ sở dữ liệu 26

3.2.2. Tạo bảng 27

3.2.3. Sửa đổi định nghĩa bảng 31

3.2.4. Xóa bảng 32

3.3. Các lệnh cập nhật cơ sở dữ liệu 32

3.3.1.Thêm bộ vào bảng 32

3.3.2.Cập nhật nội dung của bộ trong bảng 34

3.3.3. Xoá các bộ trong bảng 35

3.4. Các lệnh truy vấn cơ sở dữ liệu 36

3.4.1. Tìm thông tin từ các cột trong bảng 36

3.4.2. Chọn các bộ của bảng 37

3.4.3. Thứ tự hiển thị các bản ghi – mệnh đề ORDER BY 38

3.4.4. Phân nhóm dữ liệu – mệnh đề GROUP BY 39

3.4.5. Điều kiện hiển thị các bản ghi – mệnh đề HAVING 39

3.4.6. Truy vấn thông tin từ nhiều bảng 40

3.4.7. Truy vấn lồng nhau 40

3.4.8. Các hàm tính toán trên nhóm các bản ghi 41

3.4.9. Các hàm tính toán trên bản ghi 41

Chương 4. Ràng buộc toàn vẹn và phụ thuộc hàm 43

4.1. Các vấn đề liên quan đến ràng buộc toàn vẹn 43

4.1.1. Định nghĩa ràng buộc toàn vẹn 43

4.1.2. Các yếu tố của ràng buộc toàn vẹn 43

4.2. Các loại ràng buộc toàn vẹn 44

4.2.1. Ràng buộc toàn vẹn về miền giá trị 44

4.2.2. Ràng buộc toàn vẹn liên thuộc tính 44

4.2.3. Ràng buộc toàn vẹn liên bộ 45

4.2.4. Ràng buộc toàn vẹn về phụ thuộc tồn tại 45

4.2.5. Ràng buộc toàn vẹn liên thuộc tính – liên quan hệ 46

4.2.6. Ràng buộc toàn vẹn liên bộ – liên quan hệ 47

4.3. Phụ thuộc hàm 47

4.3.1. Định nghĩa và biểu diễn phụ thuộc hàm 47

4.3.2. Bao đóng của tập phụ thuộc hàm và hệ luật dẫn Armstrong 48

4.3.3. Bao đóng của tập thuộc tính 49

4.3.4. Phủ và phủ tương đương 50

4.3.5. Thuật toán xác định khoá của lược đồ quan hệ 52

Chương 5. Dạng chuẩn và chuẩn hóa lược đồ cơ sở dữ liệu 57

5.1. Dạng chuẩn 57

5.1.1. Thiết kế kém gây nguy hiểm cho CSDL 57

5.1.2. Phân rã 58

5.1.3. Các dạng chuẩn 62

5.2. Chuẩn hóa lược đồ CSDL 66

5.2.1. Thuật toán phân rã LĐQH thành 3NF 66

Chương 6. Tối ưu hóa câu hỏi 70

6.1. Các nguyên tắc tổng quát để tối ưu hoá câu hỏi 70

6.1.1. Các nguyên tắc tổng quát 70

6.1.2. Biểu thức tương đương và các quy tắc 70

6.2. Ví dụ một thuật toán tối ưu hoá biểu thức quan hệ 73

6.3. Thuật toán tối ưu hoá câu hỏi trong ngôn ngữ Đại số quan hệ 78

Chương 1. Tổng quan về cơ sở dữ liệu

1.1. Một số khái niệm

1.1.1. Cơ sở dữ liệu

a. Khái niệm

Cơ sở dữ liệu (Database, viết tắt là CSDL) là một hệ thống các thông tin có cấu trúc được lưu trữ trên các thiết bị lưu trữ thông tin. Có thể thỏa 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.

Ví dụ: Ta xem xét hÖ thèng b¸n vÐ m¸y bay b»ng m¸y tÝnh. D÷ liÖu l­u tr÷ trong m¸y tÝnh bao gåm th«ng tin vÒ hµnh kh¸ch, chuyÕn bay, ®­êng bay v...v. Mäi th«ng tin vÒ mèi quan hÖ nµy ®­îc biÓu diÔn trong m¸y tính th«ng qua viÖc ®Æt chç cña kh¸ch hµng. VËy lµm thÕ nµo ®Ó biÓu diÔn ®­îc d÷ liÖu ®ã vµ ®¶m b¶o cho hµnh kh¸ch ®i ®óng chuyÕn. D÷ liÖu nªu trªn ®­îc l­u trong m¸y tính theo mét quy ®Þnh nµo ®ã vµ ®­îc gäi lµ c¬ së d÷ liÖu.

b. Ưu điểm

Việc sử dụng cơ sở dữ liệu có những ưu điểm như sau:

  • 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ính nhất quán và toàn vẹn dữ liệu.

  • Đảm bảo dữ liệu có thể truy xuất theo nhiều cách khác nhau.

  • Có khả năng chia sẻ thông tin cho nhiều người sử dụng.

c. Phân loại

Cơ sở dữ liệu được phân thành các loại sau:

  • Cơ sở dữ liệu dạng file: Dữ liệu được lưu trữ dưới dạng các file có thể là text, ascii, *.dbf.

  • Cơ sở dữ liệu quan hệ: Dữ liệu được lưu trữ trong các bảng dữ liệu gọi là các thực thể, giữa các thực thể này có mối liên hệ với nhau gọi là các quan hệ, mỗi quan hệ có các thuộc tính, trong đó có một thuộc tính là khóa chính.

  • Cơ sở dữ liệu hướng đối tượng: Dữ liệu cũng được lưu trữ trong các bảng dữ liệu nhưng các bảng có bổ sung thêm các tính năng hướng đối tượng như lưu trữ thêm các hành vi, nhằm thể hiện hành vi của đối tượng. Mỗi bảng xem như một lớp dữ liệu, một dòng dữ liệu trong bảng là một đối tượng.

  • Cơ sở dữ liệu bán cấu trúc: Dữ liệu được lưu dưới dạng XML, với định dạng này thông tin mô tả về đối tượng thể hiện trong các tag. Đây là cơ sở dữ liệu có nhiều ưu điểm do lưu trữ được hầu hết các loại dữ liệu khác nhau nên cơ sở dữ liệu bán cấu trúc là hướng mới trong nghiên cứu và ứng dụng.

1.1.2. Hệ quản trị cơ sở dữ liệu

a. Khái niệm

Hệ quản trị cơ sở dữ liệu (Database Management System – DBMS, viết tắt Hệ QT CSDL): Là tập hợp các chương trình dùng để quản lý cấu trúc và dữ liệu của CSDL đồng thời điều khiển việc truy xuất dữ liệu trong CSDL. Đồng thời cung cấp cho người dùng và ứng dụng một môi trường thuận tiện và sử dụng hiệu quả tài nguyên dữ liệu

Ví dụ: Một số hệ quản trị CSDL thường gặp:

  • MS Access

  • MS SQL Server

  • MySQL

  • Oracle

b. Kiến trúc của một hệ quản trị cơ sở dữ liệu

Hình 1.1: Kiến trúc của một hệ quản trị cơ sở dữ liệu

c. Phân loại

Phân loại dựa trên cách thức tổ chức dữ liệu ta có:

  • Hệ QT CSDL phân cấp: IMS của IBM

  • Hệ QT CSDL mạng: IDMS của Cullinet Software

  • Hệ QT CSDL quan hệ:

    • Cho máy tính cá nhân: MS Access

    • Cho máy chủ: MS SQL Server, MySQL, Oracle

  • Hệ QT CSDL đối tượng : Ozone, MS SQL Server, Oracle, PostgreSQL

Phân loại dựa trên cách thức lưu trữ dữ liệu ta có:

  • Hệ QT CSDL tập trung

  • Hệ QT CSDL phân tán

1.2. Mô hình dữ liệu

Mô hình CSDL (Database Model) là một hệ hình thức toán học gồm có hai phần:

  • Một hệ thống ký hiệu để mô tả dữ liệu.

  • Một tập hợp các phép toán thao tác trên dữ liệu đó.

1.2.1. Mô hình mạng

Mô hình mạng là một mô hình sơ đồ thực thể liên kết với tất cả các liên kết được hạn chế là liên kết hai ngôi nhiều – một. Hạn chế này cho phép chúng ta sử dụng đồ thị có hướng đơn giản để biểu diễn dữ liệu trong mô hình này. Trong mô hình mạng, các tập thực thể được chuyển thành các kiểu bản ghi logic. Các kiểu bản ghi logic bao gồm một tập các trường, mỗi trường chứa giá trị là một số nguyên hay một xâu ký tự… Tập tên các trường và các kiểu của chúng cấu thành quy cách bản ghi logic.

1.2.2. Mô hình phân cấp

Một mô hình phân cấp đơn giản là một mô hình mạng mà là một rừng (tập các cây) trong có tất cả các móc nối trỏ theo hướng từ con đến cha. Chúng ta sẽ tiếp tục sử dụng các thuật ngữ của mô hình mạng: kiểu bản ghi logic… khi chúng ta nói về mô hình phân cấp.

1.2.3. Mô hình quan hệ

Là mô hình dựa vào ký hiệu là tập các tên và cơ sở toán học của nó là các phép toán tập hợp và ánh xạ. Nó là mô hình phổ biến hiện nay. Tập các phép toán trong mô hình này dựa trên hai hệ ký hiệu: hệ ký hiệu đại số và hệ ký hiệu logic.

1.2.4. Mô hình thực thể liên kết

Là mô hình cho phép mô tả các thực thể thông qua các thuộc tính và mối liên hệ giữa các thực thể. Một trong các cách biểu thị mô hình thực thể là dùng đồ thị, sơ đồ khối.

1.2.5. Mô hình hướng đối tượng

Là mô hình cung cấp đặc tính nhận dạng đối tượng. Trong đó mỗi lớp đối tượng được đặc trưng bởi hai yếu tố:

  • Tập các thuộc tính (properties) để nhận dạng đối tượng.

  • Tập các phương thức (methods) để thao tác với đối tượng.

1.3. Mô hình thực thể liên kết

Hiện nay mô hình dữ liệu quan hệ thường được dùng trong các hệ quản trị cơ sở dữ liệu, đây là mô hình dữ liệu ở mức vật lý. Để thành lập được mô hình này, thường là phải dùng mô hình dữ liệu ở mức quan niệm để đặc tả, một trong những mô hình ở dạng đó là mô hình thực thể liên kết (sau đó mới dùng một số quy tắc để chuyển hệ thống từ mô hình này về mô hình dữ liệu quan hệ – các quy tắc này sẽ được nói đến trong chương 2).

Sau đây là các khái niệm của mô hình thực thể liên kết.

1.3.1. Thực thể

Thuật ngữ thực thể (Entity) không có một định nghĩa hình thức.Thực thể là một sự vật tồn tại và phân biệt được, nghĩa là có thể phân biệt được thực thể này với thực thể khác.

Mỗi con người là một thực thể, mỗi chiếc xe máy là một thực thể. Khái niệm về “ Tính phân biệt được ” rất gần với “ đặc tính nhận dạng đối tượng” vì thế mô hình thực thể liên hệ được xem như là mô hình hướng đối tượng.

Tập hợp các thực thể giống nhau tạo thành 1 tập thực thể.

Ví dụ: Trong hệ thống “Quản lý đề án công ty” ta có:

  • Một nhân viên là một thực thể

  • Tập hợp các nhân viên là tập thực thể

  • Một đề án là một thực thể

  • Tập hợp các đề án là tập thực thể

  • Một phòng ban là một thực thể

  • Tập hợp các phòng ban là tập thực thể

Kiểu thực thể là tập hợp các thực thể cùng mô tả đối tượng nào đó trong hệ thống.

Ví dụ: Kiểu thực thể Sinhvien

Than nhan

Sinh vien

Có 2 kiểu thực thể thực thể: Thực thể mạnh và thực thể yếu

Dùng hình chữ nhật (hoặc hình chữ nhật bầu) để biểu diễn thực thể.

1.3.2. Thuộc tính

Thuộc tính là tính chất để mô tả thực thể. Mỗi thuộc tính của tập thực thể lấy giá trị trên một miền dành cho thuộc tính đó. Thường thì miền giá trị đối với mỗi thuộc tính là một tập số nguyên, tập các số thực hoặc chuỗi ký tự nhưng cũng không loại trừ các kiểu giá trị khác.

Ví dụ : một tập thực thể con người có thể khai báo có các thuộc tính như họ và tên (chuỗi ký tự), chiều cao (số thực), ngày sinh (ngày tháng năm),...

Chọn thuộc tính thích hợp cho các tập thực thể là một bước quan trọng trong việc thiết kế lược đồ CSDL khái niệm.

Mỗi thuộc tính có một kiểu dữ liệu xác định

  • Các loại thuộc tính

  • Thuộc tính đơn: không thể tách nhỏ ra được.

Ví dụ : Giới tính,…

  • Thuộc tính phức hợp : có thể tách ra thành các thành phần nhỏ hơn.

Ví dụ : Họ tên ( Họ, tên đệm, tên)

  • Loại giá trị của thuộc tính

  • Đơn trị: các thuộc tính có giá trị duy nhất cho một thực thể.

Ví dụ : số CMND, …

  • Đa trị: các thuộc tính có một tập giá trị cho cùng một thực thể.

Ví dụ : bằng cấp, …

  • Thuộc tính cơ sở – Thuộc tính dẫn xuất ( suy diễn được).

Ví dụ : Ngày sinh à Tuổi

  • Miền giá trị của thuộc tính (domain)

  • Kiểu chuỗi (string)

  • Kiểu số nguyên (integer)

  • Kiểu số thực …

Ví dụ : tập thực thể NHANVIEN có các thuộc tính

  • Họ tên (hoten: string[20])

  • Ngày sinh (ns: date)

  • Điểm TB (DTB:float)

  • Tính chất của thuộc tính

Tất cả các thực thể nằm trong tập thực thể có cùng tập thuộc tính.

Mỗi thực thể đều được phân biệt bởi một thuộc tính khóa.

Mỗi thuộc tính đều có miền giá trị tương ứng với nó.

  • Biểu diễn thuộc tính trong các hình oval và gắn với thực thể của nó

MaSV

TenSV

Sinh vien

1.3.3. Mối liên kết

Mối liên kết diễn tả sự liên hệ giữa hai hay nhiều thực thể phân biệt theo một ý nghĩa nào đó.

Ví dụ: mối liên kết giữa hai loại thực thể Sinhviên và Lop, mối liên kết giữa Sinhviên với Mônhọc,...

Mối liên kết được biểu diễn bằng một hình thoi và hai bên là hai nhánh gắn kết với các loại thực thể (hoặc mối liên kết) liên quan, tên mối liên kết thường là: thuộc, gồm , chứa,...

Chẳng hạn giữa hai loại thực thể Lớp và Khoa có mối liên kết “thuộc” như sau:

a. Ràng buộc trên kiểu liên kết

Xét mối quan hệ nhị phân R (binary relationship) giữa 2 tập thực thể A và B, ràng buộc liên kết bao gồm

(min, max) chỉ định mỗi thực thể e E tham gia ít nhất và nhiều nhất vào thể hiện của R

Một loại thực thể có thể tham gia nhiều lần vào một quan hệ với nhiều vai trò khác nhau

b. Thuộc tính trên mối quan hệ

Thuộc tính trên mối quan hệ mô tả tính chất cho mối quan hệ đó.

Thuộc tính này không thể gắn liền với những thực thể tham gia vào mối quan hệ.

b. Các kiểu liên kết

Liên kết Một – Một (1:1)

Liên kết Một – Nhiều (1:N)

  • Liên kết Nhiều – Nhiều (M:N)

c. Khoá của mối liên kết:

Khóa của mối liên kết dùng để phân biệt các thực thể cùng kiểu

Chẳng hạn như thuộc tính MAGV là khoá của loại thực thể Giangvien, MALOP là thuộc tính khoá của loại thực thể Lop, MAMH là thuộc tính khoá của loại thực thể Monhoc, do đó mối liên kết phancong (giữa các loại thực thể Giangvien, Lop, Monhoc) có khoá là {MAGV, MAMH, MALOP} - phancong là mối liên kết 3 ngôi.

Khóa K của tập thực thể E là một hay nhiều thuộc tính sao cho

    • Lấy ra 2 thực thể bất kỳ e1, và e2 trong E

    • Thì e1 và e2 không thể có các giá trị giống nhau tại các thuộc tính trong K

Chú ý:

    • 1 khóa có thể có một hoặc nhiều thuộc tính

    • Một kiểu thực thể có thể có một hoặc nhiều khóa ( khóa ứng viên), khóa ứng viên được sử dụng gọi là khóa chính (Primary Key)

    • Trong mô hình ER tên của mỗi thuộc tính dùng làm khóa chính được gạch chân

1.3.4. Xây dựng mô hình thực thể liên kết

Các bước xây dựng mô hình thực thể liên kết (ER)

Bước 1: Liệt kê, chính xác hóa và lựa chọn thông tin cơ sở

Xác định một từ điển bao gồm tất cảcác thuộc tính (không bỏ sót bất cứ thông tin nào).

Chính xác hóa các thuộc tính đó. Thêm các từ cần thiết để thuộc tính đó mang đầy đủ ý nghĩa, không gây lầm lẫn, hiểu nhầm.

Chú ý: Để lựa chọn các đặc trưng cần thiết , ta duyệt từ trên xuống và chỉ giữ lại những thuộc tính đảm bảo yêu cầu sau:

    • Thuộc tính cần phải đặc trưng cho một lớp các đối tượng được xét.

    • Chọn một thuộc tính một lần, nếu lặp lại thì bỏ qua.

    • Một thuộc tính phải là sơ cấp (Nếu giá trị của nó có thể suy ra từ các thuộc tính khác thì bỏ qua).

Bước 2: Xác định các thực thể và các thuộc tính của nó, sau đó xác định thuộc tính định danh cho từng thực thể

Duyệt danh sách các thuộc tính từ trên xuống để tìm ra thuộc tính tên gọi. Mỗi thuộc tính tên gọi sẽ tương ứng với một thực thể.

Gán các thuộc tính cho từng thực thể.

Xác định thuộc tính định danh cho từng thực thể.

Bước 3: Xác định các mối quan hệ và các thuộc tính riêng của nó

Xét danh sách các thuộc tính còn lại, hãy tìm tất cả các động từ (ứng với thuộc tính đó). Với mỗi động từ, hãy trả lời các câu hỏi: Ai? Cái gì? Ở đâu? Khi nào? Bằng cách nào?

Bước 4: Vẽ sơ đồ mô hình thực thể - mối quan hệ, xác định lực lượng tham gia liên kết cho các thực thể.

Bước 5: Chuẩn hóa sơ đồ và thu gọn sơ đồ

Chuẩn hóa sơ đồ: Nếu trong đó còn có chứa: các thuộc tính lặp, nhóm lặp và các thuộc tính phụ thuộc thời gian thì sơ đồ chỉ còn các thực thể đơn và các thuộc tính đơn.

Thu gọn sơ đồ: Nếu một thực thể có tất cả các đặc trưng:

  • Là thực thể treo: là thực thể chỉtham gia vào một mối quan hệ và chỉ chứa một thuộc tính duy nhất thực sự là của nó (có thể có thuộc tính thứ 2 thêm vào làm định danh).

  • Mối quan hệ là bậc hai và không có thuộc tính riêng.

  • Mối quan hệ là 1: N hay 1:1.

Được thu gọn thành sơ đồ sau:

Ví dụ:

CSDL đề án công ty theo dõi các thông tin liên quan đến nhân viên, phòng ban và đề án

- Cty có nhiều đơn vị, mỗi đơn vị có tên duy nhất, mã đơn vị duy nhất, một trưởng phòng và ngày nhận chức. Mỗi đơn vị có thể ở nhiều địa điểm khác nhau.

- Dự án có tên duy nhất, mã duy nhất, do 1 một phòng ban chủ trì và được triển khai ở 1 địa điểm.

- Nhân viên có mã số, tên, địa chỉ, ngày sinh, giới tính và lương. Mỗi nhân viên làm việc ở 1 phòng ban, tham gia vào các đề án với số giờ làm việc khác nhau. Mỗi nhân viên đều có một người quản lý trực tiếp.

- Một nhân viên có thể có những người con được hưởng bảo hiểm theo nhân viên. Mỗi người con của nhân viêncó tên, giới tính, ngày sinh.

Ta có mô hình ER của bài toán trên như sau:

Chương 2. Mô hình cơ sở dữ liệu quan hệ

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

2.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 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 KHOA (tương ứng với thực thể KHOA trong mô hình thực thể kết hợp) có các thuộc tính Ma-khoa, Ten-khoa.

  • Thực thể LOP-HOC có một số thuộc tính Ma-lop, Ten-lop, Nien-khoa, So-hoc-vien.

  • Thực thể MON-HOC có một số thuộc tính Ma-mon, Ten-mon.

Mỗi thuộc tính được xác định trên 1 miền giá trị gọi là miền thuộc tính (domain), ký hiệu là D.

    • Thuộc tính Tên: D(Tên) = {Hoa, Lan, Huệ}

    • Thuộc tính Họ tên: D(Họ tên) = {char(30)}

    • Thuộc tính Tuổi: D(Tuổi) = N

2.1.2. Quan hệ

Quan hệ (Relation) là một tập con của tích Đề-các của một hoặc nhiều miền.

Tích Đề-các: Gọi D1, D2,…,Dn là các miền. Tích đề-các của n miền này ký hiệu là D1x D2x…x Dn là tập tất cả n bộ (v1, v2,…, vn) sao cho vi thuộc Di với i=1…n

Ví dụ:

Cho n=2, D1={0,1}, D2={a,b,c}

Khi đó D1x D2={(0,a),(0,b),(0,c),(1,a),(1,b),(1,c)}

Ta có {(0,a),(0,b),(1,a),(1,b)} là một quan hệ r1, đó là tập con của tích đề-các D1x D2. Tập rỗng cũng là một quan hệ.

2.1.3. Bộ giá trị

Bộ giá trị (tuple) là tập hợp mỗi giá trị liên quan đến tất cả các thuộc tính của 1 lược đồ quan hệ hay là một phần tử của một quan hệ.

Ta thường sử dụng các chữ cái thường (t, p, q,…) để biểu diễn các bộ. Nếu bộ t thuộc quan hệ r thì: t r

Về trực quan thì mỗi quan hệ xem như một bảng dữ liệu, trong đó mỗi cột là thông tin về một thuộc tính và mỗi dòng là thông tin về một bộ.

Ví dụ:

Quan hệ SINHVIEN

MASV

HOTEN

NGAYSINH

MALOP

DIACHI

HOCBONG

7462

Nguyễn Thị Hoa

15/03/1989

Tin3A

Hải Dương

1000000

8390

Trần Văn Mạnh

03/07/1992

Tin5A

Nam Định

1200000

2.1.4. Lược đồ quan hệ

Tập các tên thuộc tính cho một quan hệ được gọi là một lược đồ quan hệ (Relation Scheme). Nếu chúng ta đặt tên cho một quan hệ là R và lược đồ quan hệ của nó có các thuộc tính A1, A2,..., An thì lược đồ quan hệ này có thể viết dưới dạng R(A1, A2,..., An).

Như vậy khi ta nói cho một lược đồ quan hệ R(A1, A2,..., An) có nghĩa là ta đã cho một tập thuộc tính A1, A2,..., An và trên đó đã tồn tại một quan hệ R.

Ví dụ: Với quan hệ SINHVIEN có các thuộc tính MASV, HOTEN, NGAYSINH, MALOP, DIACHI, HOCBONG thì ta có lược đồ quan hệ sau:

SINHVIEN(MASV, HOTEN, NGAYSINH, MALOP, DIACHI, HOCBONG)

2.1.5. Thể hiện của quan hệ

Thể hiện (hoặc còn gọi là tình trạng) của quan hệ R, ký hiệu bởi TR, là tập hợp các bộ giá trị của quan hệ R vào một thời điểm. Tại những thời điểm khác nhau thì quan hệ sẽ có những thể hiện khác nhau. Thể hiện (hay tình trạng) của các lược đồ quan hệ con TRi gọi là tình trạng của lược đồ cơ sở dữ liệu .

Ví dụ:

Các thể hiện của quan hệ lớp-học và môn-học

Quan hệ lớp-học:

Mã-lớp

Tên-lớp

Niên-khoá

Số-Hviên

Mã-khoa

QTKD1

Quản trị kinh doanh QT01

96-99

154

QTKD

TCKT1

Tài chính kế toán KT3

97-2000

200

TCKT

CNTT1

Công nghệ thông tin K1

98-2001

120

CNTT

Quan hệ môn-học:

Mã-môn

Tên-môn

Số-đv-học-trình

TCKT

Tài chính kế toán

4

CSDL

Cơ sở dữ liệu

5

KTCT

Kinh tế chính trị

4

LTCB

Lập trình căn bản C

5

2.1.6. Khoá- siêu khoá - khoá chỉ định – khoá chính – khoá ngoại

Khoá (key): Khoá của một quan hệ R(A1, A2,...,An) là tập con

  K { A1, A2,...,An }, thoả mãn các tính chất sau đây:

  • Với bất kỳ 2 bộ t1, t2 R đều tồn tại một thuộc tính AK sao cho t1[A] t2[A].

Nói một cách khác: không tồn tại 2 bộ mà có giá trị bằng nhau trên mọi thuộc tính của K. Điều kiện này có thể viết t1[K] t2[K]. Do vậy mỗi giá trị của K là xác định duy nhất.

  • Không có tập con thực sự nào của K có tính chất

Ví dụ:

Cho thể hiện của quan hệ HANG_HOA như sau:

MSMH

TEN_HANG

SO_LUONG

10101

Sắt phi 6

1000

10102

Sắt phi 8

2000

20001

Xi măng

1000

Trong quan hệ HANG_HOA trên thì mã số mặt hàng (MSMH) là khoá. Mỗi giá trị MSMH đều xác định duy nhất một loại mặt hàng trong quan hệ HANG_HOA.

Chú ý: Khoá phụ thuộc vào lược đồ quan hệ không phụ thuộc vào thể hiện của quan hệ. Một quan hệ có thể có nhiều khoá.

Siêu khóa (Super key ): k là 1 khóa của quan hệ r(U) thì mọi tập hợp k’ chứa k đều là khóa của quan hệ r(U). Ta gọi k’ là siêu khóa của quan hệ.

Siêu khóa chứa ít thuộc tính nhất được gọi là khóa chỉ định.

Khóa chính là khóa được chọn để cài đặt trong một hệ quản trị cơ sở dữ liệu.

Khi chọn khóa chính ta phải chú ý các tính chất:

  • Khóa có tính áp dụng khi nó không bỏ sót bất kỳ trường hợp nào của vấn đề

  • Khóa phải có tính duy nhất dùng để phân biệt bộ này với bộ kia trong quan hệ

  • Khóa có tính nhỏ nhất khi ta bỏ qua bất kỳ thuộc tính nào của nó thì nó không còn tính duy nhất nữa

  • Khóa có tính ổn định khi giá trị của khóa không thay đổi

Khóa ngoại (Foreign key): một thuộc tính được gọi là khóa ngoại nếu nó là thuộc tính của một lược đồ quan hệ này nhưng lại là khóa chính của lược đồ quan hệ khác.

2.1.7. Phụ thuộc hàm

Quan hệ R được định nghĩa trên tập thuộc tính U = {A1,A2, …,An}. là hai tập con của tập thuộc tính U. Nếu tồn tại một ánh xạ f: X → Y thì ta nói rằng X xác định hàm Y, hay Y phụ thuộc hàm vào X và ký hiệu là X →Y. Chúng ta sẽ tìm hiểu kỹ hơn về phụ thuộc hàm trong Chương 4.

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

Các RBTV 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 ở bất kỳ thời điểm nào. Chúng ta sẽ tìm hiểu kỹ hơn về ràng buộc toàn vẹn trong Chương 4.

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

Ba thao tác cơ bản trên môtj quan hệ, mà nhờ đó CSDL được thay đổi, đó là Thêm(Insert), Xoá (Delete) và Sửa (Update) các bộ giá trị của quan hệ.

a. Phép thêm (chèn) một bộ mới vào quan hệ:

Phép thêm một bộ vào quan hệ R = {A1, A2, …, An}:

INSERT (R; A1=d1, A2 = d2, …, An = dn} trong đó Ai (i = 1, 2, …, n) là tên các thuộc tính và di dom (Ai).

Ví dụ: Thêm một bộ t5 = (Vũ Văn Việt, 1986, Caođangcodien, 3.36) vào quan hệ Nhanvien (Hoten, Namsinh, Noilamviec, Luong):

INSERT (Nhanvien; Hoten = VuVanViet, Namsinh = 1986, Noilamviec = Caodangcodien, Luong = 3.36).

Chú ý:

- Nếu xem thứ tự của các trường là cố định, khi đó ta có thể biểu diễn phép chèn một cách ngắn gọn hơn:

INSERT (R; d1, d2, …, dn).

Mục đích của phép chèn là thêm một bộ vào một quan hệ nhất định; kết quả của phép tính này có thể gây ra một số sai sót với những lý do sau:

+ Bộ mới thêm vào không phù hợp với lược đồ quan hệ cho trước.

+ Một giá trị của một thuộc tính nào đó nằm ngoài miền giá trị của thuộc tính đó.

+ Giá trị khoá của bộ mới có thể là giá trị đã có trong quan hệ đang lưu trữ.

Do vậy, tùy từng hệ cụ thể sẽ có những cách khắc phục riêng.

b. Phép loại bỏ bộ khỏi quan hệ

Phép loại bỏ (DELETE) là phép xoá một bộ ra khỏi một quan hệ cho trước.

DELETE (R; d1, d2, …, dn).

Ví dụ: khi cần loại bỏ một bộ, chẳng hạn t2 từ quan hệ Nhanvien:

DELETE (Nhanvien; HaiHa; 1987, Khoatin, 4.45).

Chú ý: Không phải lúc nào phép loại bỏ cũng cần đầy đủ thông tin về cả bộ cần loại. Khi ta có giá trị của bộ đó tại các thuộc tính khoá K = {B1, …, Bn}, lúc đó phép loại bỏ có dạng:

DELETE (R; B1 =e1, …, Bi = ei).

c. Phép sửa đổi giá trị của các thuộc tính của quan Hử

Khi cần điều chỉnh một số giá trị nào đó tại một số thuộc tính, ta sử dụng phép thay đổi.

Gọi tập {C1, …, Cp} {A1, …, An} là tập các thuộc tính mà tại đó casc giá trị của bộ cần thay đổi: CH (R; A1=d1, A1 = d2,…, An =d2; C1=e1, C2 = e2,…, Cp=ep}

Nếu K = {B1, …, Bm} là khoá của quan hệ, khi đó chỉ cần viết:

CH (R; B1=b1, …, Bm=bm; C1=e1,…, Cp=ep).

Ví dụ: khi cần thay đổi lương của ông Hà trong quan hệ Nhanvien ta viết:

CH (Nhanvien; Hoten = ‘Ha’, Luong = 4.56).

2.2. Các phép toán trên đại số tập hợp

2.2.1. Phép hợp

Hợp của hai quan hệ R và S là một quan hệ, ký hiệu là RS và là tập tất cả các bộ t sao cho tR hoặc tS.

Biểu diễn hình thức phép hợp có dạng :

R S = { t / t R hoặc t S }.

Ta chỉ có thể dùng phép hợp cho các quan hệ cùng ngôi, vì vậy tất cả các bộ trong kết quả sẽ có cùng số lượng thành phần. Tên thuộc tính trong các quan hệ sẽ bị bỏ qua khi thực hiện phép hợp và quan hệ thu được có thể gán các thuộc tính tùy ý, thứ tự của các thuộc tính trong các quan hệ phải được tôn trọng. Các điều này tương tự đối với các phép toán khác như hiệu, giao, tích Descartes.

Ví dụ:

(a)

R (A B C )

a1 b1 c1

a1 b2 c1

a2 b2 c2

S (A B C)

a2 b1 c2

a2 b2 c2

R S (A B C)

a1 b1 c1

a1 b2 c1

a2 b2 c2

a2 b1 c2

(b)

R (A B C )

a b c

d a f c b d

S ( D E F)

b g a

d a f

R S (A B C)

a b c

d a f

c b d

b g a

Chú ý: Trong ví dụ trên, ta thấy hai quan hệ R và S cùng ngôi, ta vẫn có thể lấy hợp của chúng dù các cột của hai quan hệ trên mang tên khác nhau, miễn là các quan hệ có cùng số lượng các thành phần. Tuy vậy quan hệ thu được sẽ không có tên rõ ràng cho các cột (ta có thể không viết tên cột hoặc đặt tên cho các cột kết quả là A, B, C nhưng nó mang nghĩa mới)

2.2.2. Phép giao

Giao của hai quan hệ R và S là một quan hệ, ký hiệu là RS và là tập tất cả các bộ t sao cho t thuộc cả R và S.

Biểu diễn hình thức phép giao có dạng

R S = t / tR và t S.

Ví dụ:

R( A B C )

a1 b1 c1

a1 b2 c1

S( D E F )

d1 e1 f1

a1 b1 c1

d1 e2 f2

R S (A B C)

a1 b1 c1

2.2.3. Phép trừ

Hiệu của hai quan hệ R và S khả hợp là một quan hệ ký hiệu là R-S và là tập tất cả các bộ t sao cho t thuộc R nhưng không thuộc S.

Biểu diễn hình thức phép có dạng :

R - S = t / tR và t S.

Ví dụ:

* Với R, S ở ví dụ 2.1 (a) trên:

R-S ( A B C )

a1 b1 c1

a1 b2 c1

* Với R, S ở ví dụ 2.1 (b) trên:

R-S ( A B C )

a b c

c b d

2.2.4. Phép tích Đề các

R là quan hệ n - ngôi và S là quan hệ m - ngôi. Tích Đề các của hai quan hệ R và S ký hiệu là RxS là tập tất cả các (n+m) - bộ với n thành phần đầu là một bộ thuộc R và m thành phần sau là của một bộ thuộc S.

Biểu diễn hình thức có dạng

RxS ={t / t có dạng ( a1, a2,..., an, b1, b2,..., bm ), trong đó ( a1,..., an) R và (b1,..., bm )S}.

Ví dụ:

R( A B C )

a1 b1 c1

a1 b2 c1

S( D E F )

d1 e1 f1

d2 e2 f1

d1 e2 f2

RxS ( A B C D E F )

a1 b1 c1 d1 e1 f1

a1 b1 c1 d2 e2 f1

a1 b1 c1 d1 e2 f2

a1 b2 c1 d1 e1 f1

a1 b2 c1 d2 e2 f1

a1 b2 c1 d1 e2 f2

R(A B C )

a b c

d a f

c b d

S ( A B C )

a b c

d a f

RxS (A B C D E F )

a b c a b c

a b c d a f

d a f a b c

d a f d a f

c b d a b c

c b d d a f

2.2.5. Phép chia

- Trong quan hệ r xác định trên quan hệ U1 là quan hệ bậc n

- Trong quan hệ s xác định trên quan hệ U2 là quan hệ bậc m

Với n > m

Khi đó phép chia của r cho s là 1 tập các bộ t có bậc là n-m sao cho mọi bộ giá trị u s thì bộ ghép được giữa (t,u) r

Cú pháp: r s = { t | u s (t,u) r}

Ví dụ:

R ( A B C D ) S (C D ) RS= (A B )

a b c d c d a b

a b e f e f c d

b c e f

c d c d

c d e f

a b d e

2.3. Chuyển mô hình thực thể liên kết sang mô hình dữ liệu quan hệ

Như chúng ta đã biết, mô hình ER là mô hình dữ liệu mức khái niệm. Sau quá trình khảo sát thiết kế, ta thu được mô hình này. Từ mô hình này ta có thể sử dụng các quy tắc chuyển sang mô quan hệ để thực hiện quản lý cơ sở dữ liệu trên máy tính.

Sau đây là 8 bước được sử dụng để chuyển từ mô hình ER sang mô hình quan hệ:

Bước 1: Mỗi kiểu thực thể bình thường (không phải kiểu thực thể yếu) trong mô hình ER trở thành một quan hệ. Quan hệ đó bao gồm tất cả các thuộc tính đơn giản và thuộc tính tổ hợp của thực thể. Thuộc tính định danh của thực thể là khóa chính của quan hệ.

Bước 2: Cho mỗi thực thể yếu (Weak Entity) trong mô hình ER, tạo thành một quan hệ R, tất cả thuộc tính đơn giản của thực thể yếu trở thành thuộc tính của R.

Thêm vào đó, thuộc tính định danh của thực thể chủ trở thành khóa ngoại của R.

Khoá chính của R là sự kết hợp giữa thuộc tính định danh của thực thể chủ và thuộc tính định danh của thực thể yếu.

Bước 3: Cho mỗi mối liên kết 1-1 trong mô hình ER:

- Xác định một quan hệ S_T. Kiểu thực thể có sự tham gia toàn bộ vào liên kết trở thành quan hệ S, thực thể còn lại trở thành quan hệ T.

- Đưa khóa chính của T sang làm khóa ngoại của S.

- Thuộc tính của mối quan hệS_T trở thành thuộc tính của S.

Bước 4: Cho mỗi mối liên kết 1_N trong mô hình ER. Chuyển khóa chính của quan hệ phía 1 sang làm khóa ngoại của quan hệ phía N.

Bước 5: Cho mỗi mối liên kết MN, sinh ra một quan hệ mới R, chuyển khóa chính của hai quan hệ phía M và N thành khóa ngoại của quan hệ R. Khóa chính của R là sự kết hợp của hai khóa ngoại.

Bước 6: Nếu gặp thuộc tính đa trị:

- Chuyển thuộc tính đa trị thành quan hệ mới.

- Thuộc tính định danh (hoặc 1 phần thuộc tính định danh) của thực thể chính chuyển thành khóa ngoại của quan hệ mới.

- Khóa chính của quan hệ mới là khóa chính của bản thân quan hệ+ khóa ngoại do thực thể chính chuyển sang.

Bước 7: Cho mỗi mối liên kết có bậc (>2), tạo ra quan hệ mới (R), khóa chính của các quan hệ tham gia liên kết được đưa làm khóa ngoại của quan hệ R và các khóa ngoại này đồng thời đóng vai trò là khóa chính của R.

Ví dụ:

Trường CĐN Cơ điện Hà Nội cần thiết kế CSDL để quản lý sinh viên, giáo viên; theo dõi việc học và dạy ở trường.

Mỗi SV có một họ tên, ngày sinh, giới tính và duy nhất một mã SV.

Có rất nhiều môn học. Mỗi môn học có tên môn, số đơn vị học trình và có duy nhất một mã môn. Tên của các môn học không được phép trùng nhau.

Một SV có thể đăng ký nhiều môn học và một môn học có thể được đăng ký bởi nhiều SV.

Học xong một môn SV sẽ có điểm (hệ số 10) của môn đó.

Mỗi môn học chỉ được dạy bởi một giáo viên.

Mỗi giáo viên có thể dạy nhiều môn học. Mỗi giáo viên được quản lý bởi mã duy nhất, họ tên, giới tính. Các giáo viên có các sở thích, số điện thoại khác nhau.

Mô hình ER

Lược đồ CSDL

SinhVien(MaSV,TenSV,GioiTinh,NgaySinh)

GiaoVien(MaGV,TenGV,GioiTinh, DienThoai,SoThich)

MonHoc(MaMH,TenMH,DVHT,@MaGV)

KetQua(@MaSV,@MaMH,Diem)

Chương 3. Ngôn ngữ SQL

3.1. Khái quát về ngôn ngữ dữ liệu SQL

SQL viết tắt của Structured Query Language (ngôn ngữ truy vấn có cấu trúc), là công cụ sử dụng để tổ chức, quản lý và truy xuất dữ liệu đuợc lưu trữ trong các CSDL. SQL là một hệ thống ngôn ngữ bao gồm tập các câu lệnh sử dụng để tương tác với CSDL quan hệ.

SQL được phát triển từ ngôn ngữ SEQUEL-2, thử nghiệm và cài đặt tại trung tâm nghiên cứu của hãng IBM ở San Jose, California cho hệ thống QTCSDL lớn điển hình là System - R. trong System - R, SQL vừa đóng vai trò là một ngôn ngữ định nghĩa dữ liệu - DDL vừa là ngôn ngữ thao tác dữ liệu - DML. SQL là một ngôn ngữ phi thủ tục, chuẩn mực và điển hình. Do vậy hiện nay rất nhiều sản phẩm phần mềm thương mại đều được cài đặt SQL như Oracle, Visual Foxpro, Visual Basic, Access.... Trong tài liệu này sẽ trình bày các khả năng của ngôn ngữ, đồng thời cung cấp cho bạn đọc thêm kinh nghiệm và cách nhìn các hệ QTCSDL tạm gọi là “kinh điển”.

Phép toán cơ bản trong SQL là phép ánh xạ được miêu tả như một khối SELECT - FROM - WHERE. Các mệnh đề của ngôn ngữ SQL sẽ được trình bày chi tiết bằng các ví dụ.

Các thuật ngữ trong CSDL quan hệ như quan hệ, thuộc tính, bộ,. .. được thay thế bằng các thuật ngữ như bảng (table), cột (column), bản ghi (record) hoặc hàng (row) để phù hợp với ý nghĩa của các hệ mềm này.

Ngôn ngữ truy vấn có cấu trúc và các hệ quản trị CSDL quan hệ là một trong những nền tảng kỹ thuật quan trọng trong công nghiệp máy tính. Hiện nay SQL được xem là ngôn ngữ chuẩn trong CSDL. Các hệ quản trị CSDL quan hệ thương mại hiện có như Oracle, SQL Server, Informix, DB2,... đều chọn SQL làm ngôn ngữ cho sản phẩm của mình.

3.2. Các lệnh liên quan đến cấu trúc của cơ sở dữ liệu

3.2.1. Tạo, sử dụng, xóa cơ sở dữ liệu

Tạo Cơ sở dữ liệu

Cú pháp: CREATE DATABASE <Tên cơ sở dữ liệu>

Ví dụ: CREATE DATABASE QuanLyDiem

Sử dụng Cơ sở dữ liệu

Cú pháp: USE <Tên cơ sở dữ liệu>

Ví dụ: USE QuanLyDiem

Xóa Cơ sở dữ liệu

Cú pháp: DROP DATABASE <Tên cơ sở dữ liệu>

Ví dụ: DROP DATABASE QuanLyDiem

3.2.2. Tạo bảng

Cú pháp:

CREATE TABLE tên_bảng

( tên_cột thuộc_tính_cột các_ràng_buộc

[,...

,tên_cột_n thuộc_tính_cột_n các_ràng_buộc_cột_n]

)

Trong đó:

tên_bảng: Tên của bảng cần tạo. Tên phải tuân theo qui tắc định danh và không được vượt quá 128 ký tự.

tên_cột: là tên của cột (trường) cần định nghĩa, tên cột phải tuân theo qui tắc định danh và không được trùng nhau trong mỗi một bảng. Mỗi một bảng phải có ít nhất một cột. Nếu bảng có nhiều cột thì định nghĩa của các cột (tên cột, thuộc tính và các ràng buộc) phải phân cách nhau bởi dấu phẩy.

thuộc_tính_cột: Mỗi một cột trong một bảng ngoài tên cột còn có các thuộc tính bao gồm:

  • Kiểu dữ liệu của cột. Đây là thuộc tính bắt buộc phải có đối với mỗi cột.

  • Giá trị mặc định của cột: là giá trị được tự động gán cho cột nếu như người sử dụng không nhập dữ liệu cho cột một cách tường minh. Mỗi một cột chỉ có thể có nhiều nhất một giá trị mặc định.

  • Cột có chấp nhận giá trị NULL hay không

Các loại ràng buộc trong bảng dữ liệu:

Trên các bảng dữ liệu có các loại ràng buộc được sử dụng nhằm các mục đích sau:

  • Quy định các giá trị dữ liệu hay khuôn dạng dữ liệu được cho phép chấp nhận trên các cột của bảng (Ràng buộc Check).

  • Quy định giá trị mặc định cho các cột (Ràng buộc DEFAULT).

  • Tạo nên tính toàn vẹn thực thể trong một bảng dữ liệu và toàn vẹn tham chiếu giữa các bảng dữ liệu trong CSDL (ràng buộc PRIMARY KEY, UNIQUE).

Ràng buộc CHECK: Ràng buộc CHECK được sử dụng nhằm chỉ định điều kiện hợp lệ đối với dữ liệu. Mỗi khi có sự thay đổi dữ liệu trên bảng (INSERT, UPDATE), những ràng buộc này sẽ được sử dụng nhằm kiểm tra xem dữ liệu mới có hợp lệ hay không.

Ràng buộc CHECK được khai báo theo cú pháp như sau:

[CONSTRAINT tên_ràng_buộc]

CHECK (điều_kiện)

Trong đó: điều_kiện là một biểu thức logic tác động lên cột nhằm qui định giá trị hoặc khuôn dạng dữ liệu được cho phép. Trên mỗi một bảng cũng như trên mỗi một cột có thể có nhiều ràng buộc CHECK.

Ví dụ 1:

Để quy định Điện thoại của nhân viên phải có dạng ‘######’ (ví dụ 345434):

CREATE TABLE nhanvien

(

manv char(10) not null,

hoten char(30) not null,

ngaysinh datetime null,

diachi char(50) null,

dienthoai char(6) null

constraint check_dienthoai

check (dienthoai like '[0-9][0-9][0-9][0-9][0-9] [0-9]') )

Ví dụ 2:

Dữ liệu kiểm tra đối với lương (Tienluong < 100)

CREATE TABLE Nhanvien

(MaNV INT NOT NULL,

name VARCHAR(10) NOT NULL,

Tienluong MONEY NOT NULL

CONSTRAINT RR_luong CHECK (Tienluong < 100) )

Ví dụ 3: Câu lệnh dưới đây tạo bảng DIEMTOTNGHIEP trong đó qui định giá trị của cột DIEMVAN và DIEMTOAN phải lớn hơn hoặc bằng 0 và nhỏ hơn hoặc bằng 10.

CREATE TABLE diemtotnghiep (

hoten NVARCHAR(30) NOT NULL,

ngaysinh DATETIME,

diemvan DECIMAL(4,2)

CONSTRAINT chk_diemvan

CHECK(diemvan>=0 AND diemvan<=10),

diemtoan DECIMAL(4,2)

CONSTRAINT chk_diemtoan

CHECK(diemtoan>=0 AND diemtoan<=10) )

Ràng buộc DEFAULT được sử dụng để quy định giá trị mặc định cho một cột. Giá trị này sẽ tự động được gán cho cột này khi người sử dụng bổ sung một bản ghi mà không chỉ định giá trị cho cột. Trên mỗi cột chỉ có thể có nhiều nhất một ràng buộc DEFAULT (tức là chỉ có thể có tối đa một giá trị mặc định).

Ví dụ 1: Câu lệnh dưới đây chỉ định giá trị mặc định là ‘Không biết’ cho cột Diachi trong bảng Nhanvien:

CREATE TABLE nhanvien(

manv char(10) not null,

hoten char(30) not null,

ngaysinh datetime null,

diachi char(50) default 'không biết',

dienthoai char(6) null )

Ví dụ 2: Giá trị mặc định (10) sẽ tự động thêm vào nếu là NULL

CREATE TABLE Nhanvien (

[MaNV] int Primary key,

Tenphong nvarchar (50) ,

Phone nvarchar (24) Default '10' )

Ràng buộc PRIMARY KEY: được dùng để định nghĩa khóa chính của bảng. Một ràng buộc PRIMARY KEY đảm bảo rằng không có các giá trị trùng lặp được đưa vào trên các cột. Hay nói cách khác, giá trị của khóa chính sẽ giúp cho ta xác định được duy nhất một dòng (bản ghi) trong bảng dữ liệu. Mỗi một bảng chỉ có duy nhất một khóa chính và bản thân khóa chính không chấp nhận giá trị null. Ràng buộc PRIMARY KEY là cơ sở cho việc đảm bảo tính toàn vẹn thực thể.

Ví dụ:

CREATE TABLE nhanvien

(

manv char(10) primary key,

hoten char(30) not null,

ngaysinh datetime null,

diachi char(50) null,

dienthoai char(6) null

)

Ràng buộc UNIQUE: thay vì sử dụng khóa chính, có thể sử dụng ràng buộc UNIQUE để đảm bảo tính toàn vẹn thực thể. Sử dụng ràng buộc này trên một hay nhiều cột bắt buộc các giá trị đữ liệu trên một (hay nhiều cột) này không được trùng lặp nhau.

Trên một bảng chỉ có thể có nhiều nhất một khóa chính nhưng có thể có nhiều cột hoặc tập các cột có tính chất như khoá chính, tức là giá trị của chúng là duy nhất trong bảng. Tập một hoặc nhiều cột có giá trị duy nhất và không được chọn làm khoá chính được gọi là khoá phụ (khoá dự tuyển) của bảng. Như vậy, một bảng chỉ có nhiều nhất một khoá chính nhưng có thể có nhiều khoá phụ.

Ràng buộc UNIQUE được sử dụng trong câu lệnh CREATE TABLE để định nghĩa khoá phụ cho bảng. Cú pháp:

[CONSTRAINT tên_ràng_buộc]

UNIQUE [(danh_sách_cột)]

Ví dụ 1: Nếu tạo ràng buộc UNIQUE trên một cột:

CREATE TABLE Nhanvien

(

MaNV int NOT NULL UNIQUE,

Ten varchar(255) NOT NULL,

Ho varchar(255),

Diachi varchar(255)

)

Ví dụ 2: Để tạo nhiều UNIQUE:

CREATE TABLE Nhanvien (

MaNV int NOT NULL ,

Ten varchar(255) NOT NULL,

Ho varchar(255),

Diachi varchar(255)

CONSTRAINT RR_Nhanvien UNIQUE (MaNV,Ten)

)

Ràng buộc FOREIGN KEY:

Ví dụ:

CREATE TABLE Nhanvien(

MaNV int NOT NULL,

Hoten int NOT NULL,

MaKhoa int,

PRIMARY KEY (MaNV),

CONSTRAINT fk_NV FOREIGN KEY (MaKhoa)

REFERENCES Khoa(MaKhoa)

)

3.2.3. Sửa đổi định nghĩa bảng

Một bảng sau khi đã được định nghĩa bằng câu lệnh CREATE TABLE có thể được sửa đổi thông qua câu lệnh ALTER TABLE.

    • Bổ sung một cột vào bảng.

    • Xoá một cột khỏi bảng.

    • Thay đổi định nghĩa của một cột trong bảng.

    • Xoá bỏ hoặc bổ sung các ràng buộc cho bảng

Cú pháp:

ALTER TABLE tên_bảng

ADD định_nghĩa_cột |

ALTER COLUMN tên_cột kiểu_dữ_liêu [NULL | NOT NULL] |

DROP COLUMN tên_cột |

ADD CONSTRAINT tên_ràng_buộc định_nghĩa_ràng_buộc |

DROP CONSTRAINT tên_ràng_buộc

Ví dụ:

Thêm cột Quê quán với kiểu dữ liệu nvarchar(50) vào bảng Nhân Viên

ALTER TABLE Nhanvien Add QueQuan char(50)

3.2.4. Xóa bảng

Cú pháp:

DROP TABLE Tên_bảng

Bảng có tên được chỉ ra trong mệnh đề được xoá khỏi CSDL

Chú ý:

    • Câu lệnh này sẽ xóa các ràng buộc, chỉ mục, trigger liên quan đến bảng cần xóa

    • Khi xóa bằng lệnh DROP không thể khôi phục lại được

    • Không thể thực hiện được nếu vẫn còn ràng buộc về khóa ngoại

Ví dụ: Xóa bảng GiaoVien

DROP TABLE GiaoVien

3.3. Các lệnh cập nhật cơ sở dữ liệu

3.3.1.Thêm bộ vào bảng

Lệnh chèn dữ liệu INSERT INTO được sử dụng để chèn một dòng hay hàng dữ liệu mới vào trong một bảng.

Cú pháp:

INSERT INTO tên bảng VALUES (value1, value2,…)

Hoặc có thể chỉ rõ những cột cụ thể muốn chèn dữ liệu như cú pháp sau:

INSERT INTO tênbảng (Column1, column2,…)

VALUES (value1, value2…)

Ví dụ 1:

Chèn một dòng mới vào bảng Nhân viên:

INSERT INTO Nhanvien

VALUES (‘05’,‘Van’, ‘21/02/1987’, ‘Giaovien’, ‘HaNoi’, 2.400.000)

Kết quả:

MNV

Hoten

Ngaysinh

Nghenghiep

Diachi

Luong

01

Lan

22/9/1988

Ketoan

HaiPhong

1.500.000

02

Nghia

12/9/1988

Quanly

HaiPhong

1.500.000

03

Hai

22/9/1989

Ketoan

HaiPhong

1.000.000

04

Trang

30/1/1999

Taivu

BacNinh

2.000.000

05

Van

21/02/1987

Giaovien

HaNoi

2.400.000

Ví dụ 2:

Chèn dữ liệu vào những cột chỉ định cụ thể:

INSERT INTO Nhanvien (MNV, Hoten, Nghenghiep)

VALUES ('Hoang', 'Baove')

Kết quả:

MNV

Hoten

Ngaysinh

Nghenghiep

Diachi

Luong

01

Lan

22/9/1988

Ketoan

HaiPhong

1.500.000

02

Nghia

12/9/1988

Quanly

HaiPhong

1.500.000

03

Hai

22/9/1989

Ketoan

HaiPhong

1.000.000

04

Trang

30/1/1999

Taivu

BacNinh

2.000.000

05

Hoang

Baove

3.3.2.Cập nhật nội dung của bộ trong bảng

Lệnh cập nhật dữ liệu được sử dụng để sửa đổi dữ liệu trong một bảng.

Cú pháp:

UPDATE tên bảng

SET <tên cột 1> = <biểu thức 1>,

<tên cột 2> = <biểu thức 2>,…

<tên cột n> = <biểu thức n>

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

Ví dụ:

Đổi tên Nghenghiep một người có tên là Hoang thành nghề Taivu

UPDATE Nhanvien SET Nghenghiep = 'Taivu'

WHERE Hoten= 'Hoang'

Kết quả:

MNV

Hoten

Ngaysinh

Nghenghiep

Diachi

Luong

01

Lan

22/9/1988

Ketoan

HaiPhong

1.500.000

02

Nghia

12/9/1988

Quanly

HaiPhong

1.500.000

03

Hai

22/9/1989

Ketoan

HaiPhong

1.000.000

04

Trang

30/1/1999

Taivu

BacNinh

2.000.000

05

Hoang

Taivu

Cập nhật nhiều cột trong một dòng dữ liệu

Chúng ta muốn thay đổi địa chỉ và thêm vào tiền lương:

UPDATE Nhanvien

SET Diachi = 'BacNinh', Luong = '3.000.000'

WHERE Hoten = 'Hoang'

Kết quả:

MNV

Hoten

Ngaysinh

Nghenghiep

Diachi

Luong

01

Lan

22/9/1988

Ketoan

HaiPhong

1.500.000

02

Nghia

12/9/1988

Quanly

HaiPhong

1.500.000

03

Hai

22/9/1989

Ketoan

HaiPhong

1.000.000

04

Trang

30/1/1999

Taivu

BacNinh

2.000.000

05

Hoang

Taivu

BacNinh

3.000.000

3.3.3. Xoá các bộ trong bảng

Lệnh DELETE được sử dụng để xoá các dòng dữ liệu một bảng.

Cú pháp:

DELETE FROM tênbảng WHERE têncột = Giá trị

Ví dụ:

Xoá mặt hàng:

DELETE FROM Nhanvien WHERE MSV = '05'

Kết quả:

MNV

Hoten

Ngaysinh

Nghenghiep

Diachi

Luong

01

Lan

22/9/1988

Ketoan

HaiPhong

1.500.000

02

Nghia

12/9/1988

Quanly

HaiPhong

1.500.000

03

Hai

22/9/1989

Ketoan

HaiPhong

1.000.000

04

Trang

30/1/1999

Taivu

BacNinh

2.000.000

Xoá tất cả các hàng

Có thể xoá tất cả các dòng trong một bảng mà không cần phải xoá bảng. Điềuu này có nghĩa là cấu trúc bảng, cột và chỉ mục sẽ không bị thay đổi và mất đi.

DELETE FROM tên bảng

Hoặc

DELETE * FROM tên bảng

3.4. Các lệnh truy vấn cơ sở dữ liệu

Câu lệnh SELECT được sử dụng để truy xuất dữ liệu từ các dòng và các cột của một hay nhiều bảng, khung nhìn.

Cú pháp chung của câu lệnh SELECT có dạng:

SELECT [DISTINCT][TOP n] danh_sách_chọn

FROM danh_sách_bảng/khung_nhìn

[WHERE điều_kiện]

[GROUP BY danh_sách_cột]

[HAVING điều_kiện]

[ORDER BY cột_sắp_xếp]

3.4.1. Tìm thông tin từ các cột trong bảng

Hiển thị tất cả các trường:

    • Sử dụng *

Ví dụ: Select * From SinhVien

Hiển thị một số cột

    • Thứ tự của các cột trong kết quả truy vấn tuân theo thứ tự của các trường trong danh_sách_chọn

    • Khai báo tường minh: TenBang.TenTruong

Ví dụ: Cho biết mã GV, tên GV và tên môn học do GV đó dạy

Select MaGV, GiaoVien.TenGV,MonHoc.TenMH

From GiaoVien, MonHoc

Where GiaoVien.MaGV = MonHoc.MaGV

Loại bỏ các dòng dữ liệu trùng nhau trong kết quả truy vấn

    • Thêm từ khóa DISTINCT ngay sau từ khoá SELECT.

Ví dụ: Hiển thị quê quán của các SV

Select Distinct QueQuan

From SinhVien

Giới hạn số lượng dòng trong kết quả truy vấn

    • Thêm mệnh đề TOP ngay trước danh sách chọn.

Ví dụ: Câu lệnh dưới đây hiển thị họ tên và ngày sinh của 3 sinh viên đầu tiên trong danh sách

Select Top 3 TenSV, NgaySinh

From SinhVien

3.4.2. Chọn các bộ của bảng

Mệnh đề WHERE trong câu lệnh SELECT được sử dụng nhằm xác định các điều kiện đối với việc truy xuất dữ liệu.

Sau mệnh đề WHERE là một biểu thức logic và chỉ những dòng dữ liệu nào thoả mãn điều kiện được chỉ định mới được hiển thị trong kết quả truy vấn.

Ví dụ 1: Tìm số hiệu những nhà cung cấp đã cung cấp mặt hàng có số hiệu là P2.

SELECT DISTINCT SNo

FROM SP

WHERE PNO = P2

Trong SQL các phép sánh được sử dụng bao gồm >, <, >=, <=, = và <>. Các phép tính trên dùng cho mọi loại dữ liệu.

Ví dụ 2: Cho biết tất cả các thông tin về các nhà cung cấp có họ là Phạm. Khi đó có thể viết:

SELECT *

FROM S

WHERE SNAME LIKE Phạm %

Trong SQL sử dụng ký hiệu % là thay thế cho một xâu con, dấu gạch dưới _ để thay thề cho một ký tự.

A%B: xâu ký tự bất kỳ bắt đầu bằng chữ A và kết thúc bằng chữ B

%A: xâu ký tự bất kỳ có ký tự kết thúc bằng là A

A_B: xâu gồm 3 ký tự có ký tự thứ 2 là bất kỳ

A_: xâu gồm 2 ký tự có ký tự đầu là A.

Ngoài các phép tính thông thường SQL còn có thể xử lý dữ liệu dạng ngày tháng.

Ví dụ 3: Tìm số hiệu mặt hàng, số lượng của những mặt hàng bán trước ngày 24 tháng 4 năm 1994 là 10 ngày.

SELECT PNo, QTY

FROM SP

WHERE {04/24/94} - SDATE = 10

Tìm kiếm nhờ sử dụng IN và BETWEEN

Ví dụ 4: Tìm số hiệu những mặt hàng đã cung cấp có giá từ 1000 đến 2000.

SELECT PNo

FROM SP

WHERE PRICE BETWEEN 1000 AND 2000

Ví dụ 5: Tìm số hiệu những nhà cung cấp đã cung cấp ít nhất một trong các mặt hàng có số hiệu P1, P2, P3.

SELECT DISTINCT SNo

FROM SP

WHERE PNO IN ( P1, P2, P3 )

3.4.3. Thứ tự hiển thị các bản ghi – mệnh đề ORDER BY

Mặc định, các dòng dữ liệu trong kết quả của câu truy vấn tuân theo thứ tự của chúng trong bảng dữ liệu hoặc được sắp xếp theo chỉ mục (nếu trên bảng có chỉ mục).

Trong trường hợp muốn dữ liệu được sắp xếp theo chiều tăng hoặc giảm của giá trị của một hoặc nhiều trường, ta sử dụng thêm mệnh đề ORDER BY trong câu lệnh SELECT.

Sau ORDER BY là danh sách các cột cần sắp xếp (tối đa là 16 cột).

Dữ liệu được sắp xếp có thể theo chiều tăng (ASC) hoặc giảm (DESC), mặc định là sắp xếp theo chiều tăng.

Ví dụ:

Select *

From MonHoc

Order By DVHT DESC

3.4.4. Phân nhóm dữ liệu – mệnh đề GROUP BY

Mệnh đề GROUP BY cho phép phân hoạch các dòng dữ liệu thành các nhóm dữ liệu và thực hiện các phép toán trên các nhóm dữ liệu đó.

Các hàm gộp được sử dụng để tính toán trên toàn bảng, hoặc trên mỗi nhóm dữ liệu. Ta có các hàm gộp nhóm sau:

Ví dụ: Tính điểm trung bình các môn học của từng sinh viên

Select MaSV, AVG(Diem) AS DiemTB

From KetQua

Group By MaSV

3.4.5. Điều kiện hiển thị các bản ghi – mệnh đề HAVING

Mệnh đề HAVING được sử dụng nhằm chỉ định điều kiện đối với các giá trị thống kê được sản sinh từ các hàm gộp. Sau HAVING là biểu thức điều kiện. Biểu thức điều kiện này không tác động vào từng bản ghi của toàn bảng được chỉ ra trong mệnh đề from mà chỉ tác động lần lượt từng nhóm các bản ghi đã chỉ ra tại mệnh đề group by.

Ví dụ: Hiển thị mã SV của các SV có điểm trung bình > 5

Select MaSV, AVG(Diem) AS DiemTB

From KetQua

Group By MaSV

Having AVG(Diem) > 5

3.4.6. Truy vấn thông tin từ nhiều bảng

Khi cần thực hiện một yêu cầu truy vấn dữ liệu từ hai hay nhiều bảng, ta phải sử dụng đến phép nối. Một câu lệnh nối thực hiện lấy các dòng dữ liệu trong các bảng tham gia truy vấn, so sánh giá trị của các dòng này trên một hoặc nhiều cột được chỉ định trong điều kiện nối và kết hợp các dòng thoả mãn điều kiện thành những dòng trong kết quả truy vấn.

Danh sách chọn trong phép kết nối

  • tên_bảng.tên_cột: khi tên cột trong các bảng trùng tên nhau

  • tên_bảng.* : hiển thị tất cả các cột của một bảng nào đó

  • (*) : hiển thị tất cả các cột của các bảng tham gia truy vấn

Mệnh đề From trong phép kết nối: Danh sách tên các bảng (hay khung nhìn) tham gia vào truy vấn

Mệnh đề Where trong phép kết nối: Chỉ định điều kiện để thực hiện phép nối

Ví dụ: Hiển thị tên giáo viên dạy môn Cơ sở dữ liệu

Select GiaoVien.TenGV, MonHoc.TenMH

From GiaoVien, MonHoc

Where GiaoVien.MaGV = MonHoc.MaGV

And MonHoc.TenMH = N‘Cơ sở dữ liệu’

3.4.7. Truy vấn lồng nhau

Truy vấn lồng nhau là một câu lệnh SELECT được lồng vào bên trong một câu lệnh SELECT, INSERT, UPDATE, DELETE

Sử dụng khi điều kiện truy vấn dữ liệu cần phải sử dụng đến kết quả của một truy vấn khác

Ví dụ:

Cho biết danh sách các môn học có số đơn vị học trình lớn hơn hoặc bằng số đơn vị học trình của môn học có mã là MD11

SELECT *

FROM MonHoc

WHERE DVHT >= (SELECT DVHT

FROM MonHoc

Where MaMH = ‘MD11’)

3.4.8. Các hàm tính toán trên nhóm các bản ghi

Khi cần tính toán giá trị thống kê trên toàn bộ dữ liệu, ta sử dụng các hàm gộp trong danh sách chọn của câu lệnh SELECT

3.4.9. Các hàm tính toán trên bản ghi

Các hàm toán học

  • ABS(x): Trị tuyệt đối của x

  • SQRT(x): Căn bậc hai của x

  • LOG(x): Logarit tự nhiên của x

  • EXP(x): Hàm mũ cơ số e của x

  • SIGN(x): Lấy dấu của số x (-1 : x<0, 0 :x=0, +1 : x>0)

  • ROUND(x,n): Làm tròn tới n số lẻ

Các hàm xử lý chuỗi ký tự

  • LEN(str): Cho chiều dài dãy ký tự str

  • LEFT(str,n): Lấy n ký tự phía trái của dãy str

  • RIGHT(str,n): Lấy n ký tự phía phải của dãy str

  • MID(str,p,n): Lấy n ký tự của dãy str kể từ vị trí p trong dãy.

  • LTRIM(str): Cắt bỏ các khoảng trắng thừa bên trái chuỗi str

  • RTRIM(str): Cắt bỏ các khoảng trắng thừa bên phải của chuỗi str

Các hàm xử lý ngày tháng và thời gian

  • DATE(): Cho ngày tháng năm hiện tại

  • DAY(dd): Cho thứ tự ngày trong tháng của biểu thức ngày dd

  • MONTH(dd): Cho thứ tự tháng của biểu thức ngày dd

  • YEAR(dd): Cho năm của biểu thức ngày dd

  • HOUR(tt): Cho giờ trong ngày

  • MINUTE(tt): Cho số phút của thời gian tt

  • SECONDS(tt): Cho số giây của biểu thức giờ tt

Chương 4. Ràng buộc toàn vẹn và phụ thuộc hàm

4.1. Các vấn đề liên quan đến ràng buộc toàn vẹn

4.1.1. Định nghĩa ràng buộc toàn vẹn

Ràng buộc toàn vẹn - RBTV (Integrity Constraint): 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 ở bất kỳ thời điểm nào

Ví dụ: Trong CSDL quản lý giáo vụ, mỗi học viên có một mã riêng biệt để phân biệt với các học viên khác

Mục đích của RBTV:

  • Đảm bảo tính nhất quán của dữ liệu

  • Đảm bảo ngữ nghĩa thực tế của dữ liệu

4.1.2. Các yếu tố của ràng buộc toàn vẹn

Nội dung của RBTV

Một RBTV được phát biểu bằng ngôn ngữ tự nhiên hoặc ngôn ngữ hình thức

Ví dụ: Xét ràng buộc toàn vẹn RB được phát biểu theo 2 cách như sau:

  • Mỗi học viên có một mã số riêng biệt dùng để phân biệt với các học viên khác.

  • ∀hv1, hv2 ∈ HOCVIEN: (hv1 ≠ hv2 hv1.MaSV hv2.MaSV)

Bối cảnh của RBTV

Bối cảnh của RBTV là những quan hệ mà một RBTV có hiệu lực.Bối cảnh có thể là một quan hệ hoặc nhiều quan hệ

Ví dụ: RB có bối cảnh là HOCVIEN

Bảng tầm ảnh hưởng của RBTV

Bảng tầm ảnh hưởng của RBTV xác định thao tác cập nhật nào cần phải kiểm tra RBTV khi được thực hiện trên quan hệ bối cảnh.

Các phép cập nhật trong bảng tầm ảnh hưởng bao gồm: Thêm, Xóa, Sửa

+ : thực hiện thao tác có thể làm vi phạm RBTV

- : thực hiện thao tác không thể làm vi phạm RBTV

+(A) : có thể làm vi phạm RBTV khi sửa trên thuộc tính A

-(*) : không vi phạm RBTV do thao tác không thực hiện được (không cho phép sửa…)

Ví dụ: Bảng tầm ảnh hưởng của ràng buộc toàn vẹn RB:

RB

Thêm

Xóa

Sửa

HOCVIEN

+(MaHV)

-

+(MaHV)

4.2. Các loại ràng buộc toàn vẹn

4.2.1. Ràng buộc toàn vẹn về miền giá trị

  • Là ràng buộc quy định giá trị cho một thuộc tính.

  • RB-4: Giới tính của học viên chỉ là Nam hoặc Nữ

    • Nội dung:

hv HOCVIEN: hv.GioiTinh {‘Nam’, ‘Nữ’}

    • Bối cảnh: quan hệ HOCVIEN

    • Bảng tầm ảnh hưởng:

RB-4

Thêm

Xóa

Sửa

HOCVIEN

+

-

+(GioiTinh)

4.2.2. Ràng buộc toàn vẹn liên thuộc tính

  • Là ràng buộc giữa các thuộc tính với nhau trên 1 bộ của quan hệ

  • RB-5:Ngày bắt đầu (TuNgay) giảng dạy một môn học cho một lớp luôn nhỏ hơn ngày kết thúc (DenNgay)

    • Nội dung:

gd GIANGDAY: gd.TuNgay < gd.DenNgay

    • Bối cảnh: quan hệ GIANGDAY

    • Bảng tầm ảnh hưởng:

RB-5

Thêm

Xóa

Sửa

GIANGDAY

+

-

+(TuNgay, DenNgay)

4.2.3. Ràng buộc toàn vẹn liên bộ

  • Là ràng buộc giữa các bộ trên cùng một quan hệ (có thể liên quan đến nhiều thuộc tính).

  • Trường hợp đặc biệt: Ràng buộc về khóa chính, Unique

  • RB-6: Tất cả các học viên phải có mã số phân biệt với nhau

    • Nội dung:

h1,h2 HOCVIEN: Nếu h1h2 thì h1.MaHVh2.MaHV

    • Bối cảnh: quan hệ HOCVIEN

    • Bảng tầm ảnh hưởng:

RB-6

Thêm

Xóa

Sửa

HOCVIEN

+

-

-(*)

4.2.4. Ràng buộc toàn vẹn về phụ thuộc tồn tại

Ràng buộc toàn vẹn về phụ thuộc tồn tại cũng được gọi là ràng buộc toàn vẹn về khoá ngoại

  • Là ràng buộc quy định giá trị thuộc tính trong một bộ của quan hệ R (tập thuộc tính này gọi là khoá ngoại), phải phụ thuộc vào sự tồn tại của một bộ trong quan hệ S (tập thuộc tính này là khoá chính trong quan hệ S).

  • RBTV tham chiếu còn gọi là ràng buộc phụ thuộc tồn tại hay ràng buộc khóa ngoại

  • RB-8: Giáo viên phải thuộc một khoa nào đó.

    • Nội dung:

      • gv GIAOVIEN, k Khoa:

gv.MaKhoa = k.MaKhoa

      • Hoặc: GIAOVIEN[MaKhoa] KHOA[MaKhoa]

    • Bối cảnh: quan hệ GIAOVIEN, KHOA

    • Bảng tầm ảnh hưởng:

RB-8

Thêm

Xóa

Sửa

GIAOVIEN

+

-

-

KHOA

-

+

-(*)

4.2.5. Ràng buộc toàn vẹn liên thuộc tính – liên quan hệ

  • Là ràng buộc mà một thuộc tính trong 1 quan hệ này có mối liên hệ với 1 thuộc tính trong 1 quan hệ khác.

  • RB-9: Ngày giáo viên giảng dạy một môn học phải lớn hơn hoặc bằng ngày giáo viên đó vào làm.

    • Nội dung: gd GIANGDAY

Nếu gv GIAOVIEN: gd.MaGV = gv.MaGV

thì gv.NgayVL gd.TuNgay

    • Bối cảnh: GIANGDAY, GIAOVIEN

    • Bảng tầm ảnh hưởng:

RB-9

Thêm

Xóa

Sửa

GIANGDAY

+

-

+(TuNgay)

GIAOVIEN

-

-

+(NgayVL)

4.2.6. Ràng buộc toàn vẹn liên bộ – liên quan hệ

  • Là ràng buộc mà một thuộc tính của quan hệ này có mối liên hệ với các bộ của 1 quan hệ khác.

  • RB-11: Mỗi giáo viên phải dạy ít nhất 1 lớp

    • Nội dung:

      • ∀gv GIAOVIEN

(gd GIANGDAY (gd.MaGV = gv.MaGV))

    • Bối cảnh: quan hệ GIAOVIEN, GIANGDAY

    • Bảng tầm ảnh hưởng:

RB-11

Thêm

Xóa

Sửa

GIANGDAY

-

+(MaGV)

+(MaGV)

GIAOVIEN

+(MaGV)

-

+(MaGV)

4.3. Phụ thuộc hàm

4.3.1. Định nghĩa và biểu diễn phụ thuộc hàm

Định nghĩa

Phụ thuộc hàm (Functional Dependencies) là sự biểu diễn RBTV dưới hình thức toán học, nhằm bảo đảm thông tin không bị tổn thất khi phân rã hoặc kết nối giữa các quan hệ.

Biểu diễn PTH:

Cho R(U) là một lược đồ quan hệ với

U = {A1, A2,..., An} là tập thuộc tính.

Nói rằng X Y (đọc là X xác định hàm Y hoặc Y phụ thuộc hàm vào X) nếu với bất kỳ quan hệ r nào đó là giá trị hiện hành của R và bất kỳ hai bộ t1, t2 r mà t1[X] = t2[X] thì t1 [Y]= t2[Y]

4.3.2. Bao đóng của tập phụ thuộc hàm và hệ luật dẫn Armstrong

Bao đóng của tập phụ thuộc hàm

Gọi F là tập tất cả các phụ thuộc hàm đối với lược đồ quan hệ R và X Y là một phụ thuộc hàm với X,Y U. Nói rằng X Y được suy diễn logic từ F nếu mỗi quan hệ r thoả các phụ thuộc hàm của F thì cũng thoả X Y. Chẳng hạn F=A B, B C thì A C được suy ra từ F.

Gọi F+ là bao đóng (closure) của F, tức là tất cả các phụ thuộc hàm được suy diễn logic từ F. Nếu F = F+ thì F là họ đầy đủ (full family) của các phụ thuộc hàm.

Hệ luật dẫn Armstrong

Để có thể xác định khoá của một lược đồ quan hệ và hiểu được các phép suy diễn logic cho các phụ thuộc hàm cần tính được F+ từ F, hoặc ít nhất phải khẳng định được X Y có thuộc F hay không nếu biết phụ thuộc hàm X Y và tập phụ thuộc hàm F. Do đó đòi hỏi phải có những qui tắc suy diễn cho biết làm sao có thể suy ra một hay nhiều phụ thuộc hàm từ các phụ thuộc hàm khác. Tập các qui tắc này được được Armstrong đưa ra năm 1974 và được gọi là hệ tiên đề Armstrong.

Cho R là lược đồ quan hệ, với U= {A1,..,An} là tập các thuộc tính của nó và X, Y, Z, W U.

Hệ luật dẫn Armstrong bao gồm:

  • Luật phản xạ: Y X X → Y.

  • Luật tăng trưởng: X → Y XZ YZ, với XZ = XZ.

  • Luật bắc cầu: X → Y, Y → Z X Z.

Từ các luật trên ta có thể dễ dàng chứng minh các luật bổ sung sau:

  • Phân rã: X → YZ ⇒ X → Y, X → Z.

  • Hợp: X → Y, X → Z ⇒ X → YZ.

  • Giả bắc cầu: X → Y, WY → Z ⇒ WX → Z.

4.3.3. Bao đóng của tập thuộc tính

Định nghĩa

Để dễ dàng cho việc chứng minh tính đầy đủ của hệ tiên đề Arsmtrong. ở đây đưa thêm khái niệm bao đóng (closure) của tập các thuộc tính đối với tập các phụ thuộc hàm. Gọi F là tập các phụ thuộc hàm trên tập thuộc tính U, XU. X+ là bao đóng của X (đối với F) được định nghĩa như sau:

X+= {A XAF+}

Nói cụ thể : X+ là tập tất cả các thuộc tính A mà phụ thuộc hàm XA có thể được suy diễn logic từ F nhờ hệ tiên đề Armstrong.

Thuật toán tính bao đóng của tập thuộc tính

Input: U, F và X U

Output: X+

Thuật toán:

Bước 1: X0 = X;

Bước 2: Nếu tồn tại Y → Z F với Y Xi, Z Xi thì

Xi+1 = Xi Z;

Tiếp tục Bước 2

Ngược lại Bước 3

Bước 3: output X+ = Xi

Ví dụ: Cho R(U) với U=ABCDEG

F = {AB → C, C → A, BC → D, ACD → B, D → EG, BE → C, CG → BD, CE → AG}

Tính X+, với: X = D và X = BD

Giải:

Với X = D, ta tính X+ như sau:

Xi

Tập PTH

Xi+1

X0= D

D → EG

DEG

X1= DEG

Vậy D+ = DEG

Với X = BD, ta tính X+ như sau:

Xi

Tập PTH

Xi+1

X0= BD

D → EG

BDEG

X1= BDEG

BE → C

BCDEG

X2= BCDEG

C → A

ABCDEG

X3= ABCDEG

Vậy BD+ = ABCDEG

4.3.4. Phủ và phủ tương đương

Định nghĩa

Cho F và G là hai tập phụ thuộc hàm trên tập thuộc tính U, ta nói rằng tập phụ thuộc hàm F tương đương với tập phụ thuộc hàm G nếu và chỉ nếu F+ = G+

Nếu F+ = G+ thì ta nói rằng F là phủ của G và ngược lại F là phủ của F.

Thuật toán xác định F và G có tương đương không?

Bước 1: Với mỗi PTH X → Y của F ta xác định xem X → Y có được suy diễn logic từ G không

Bước 2: Với mỗi PTH X → Y của G ta xác định xem X → Y có được suy diễn logic từ F không

Nếu cả 2 bước trên đều đúng thì F G

Ví dụ: Cho lược đồ quan hệ R(ABCDE),

2 PTH: F={A → BC, A → D, CD → E}

và G={A → BCE, A → ABD, CD → E}

F có tương đương với G không?

F có tương đương với G’={A → BCDE} không?

Giải:

a. Ta có AG+ = ABCDE trong G+ có A → BC và A → D F G+ F+ G+ (1)

Lại có AF+ = ABCDE trong F+ có A → BCE và A → ABD F+ G F+ G+ (2)

Từ (1) và (2) F+ = G+ F G

b. Do (CD)+ = CD G’+ không chứa PTH CD → E

 F không tương đương G’

Phủ tối thiểu

Gọi tập các phụ thuộc hàm F là tối thiểu nếu:

a) Mỗi vế phải của một phụ thuộc hàm thuộc F chỉ có một thuộc tính.

b) Không tồn tại một phụ thuộc hàm XA thuộc hàm F và một tập con Z của X mà: F+ = (F - X A Z A)+

c) Không tồn tại một phụ thuộc hàm XA thuộc F mà F+ = (F - {X A} )+

Điều kiện b) bảo đảm không có một thuộc tính nào tham gia phía trái của phụ thuộc hàm là dư thừa và phép kiểm tra các phụ thuộc hàm dư thừa ở vế trái như sau: Thuộc tính B trong X đối với phụ thuộc hàm XA là dư thừa thừa nếu và chỉ nếu A thuộc (X-{B})F+.

Về trực quan, điều kiện c) bảo đảm cho tập F không có một phụ thuộc hàm nào là dư thừa và để kiểm tra XA có dư thừa hay không bằng cách tính X+ ứng với F - {X A}.

Vế phải của phụ thuộc hàm ở điều kiện a) chỉ có một thuộc tính bảo đảm chắc chắn không có một thuộc tính nào ở vế phải là dư thừa.

Ví dụ:

Cho R(U), U={A,B,C}

F = {A → BC, B → C, A → B, AB → C}

Tìm phủ tối thiểu F’ của F

Giải:

Bước 1: Tách các PTH có vế phải nhiều hơn 1 thuộc tính.

F trở thành: {A → B, A → C, B → C, AB → C}

Bước 2: Loại bỏ thuộc tính dư thừa ở vế trái

Có AB → C mà A → C nên B dư thừa ở vế trái của PTH AB → C. Còn A → C.

Tập F mới là {A → B, A → C, B → C}

Bước 3: Loại bỏ các PTH dư thừa

Có A → B và B → C, theo luật bắc cầu của Hệ luật dẫn Armstrong A → C

Như vậy PTH A → C trong tập F mới ở B2 là dư thừa

Tập F mới {A → B, B → C}

Vậy F’ = {A → B, B → C}

4.3.5. Thuật toán xác định khoá của lược đồ quan hệ

Cho lược đồ quan hệ R(U). F là tập phụ thuộc hàm của R

K được gọi là siêu khoá của lược đồ R nếu K→U (K+=U)

K được gọi là khoá của lược đồ quan hệ R nếu:

1, K→U (K+=U)

2, Không tồn tại K' K mà K→U

a. Thuật toán tìm một khóa

Input: R(U), F

Output: Tập K là khóa của R

Thuật toán:

    • Bước 1: Đặt K = U = {A1, …, An}

i = 1;

    • Bước 2: Loại bỏ thuộc tính khỏi K

      • Nếu U = (K – {Ai})F+ thì K = K - {Ai}.

      • i = i + 1;

      • Nếu i > n thì sang Bước 3. Ngược lại, tiếp tục Bước 2.

    • Bước 3: Output K

Chú ý: Khi thay đổi thứ tự loại bỏ các thuộc tính trong K, ta có thể tìm được các khóa khác

Ví dụ:

Cho R(U), U = {A, B, C, D, E, F, G}

F = {B → A, D → C, D → BE, DF → G}

Tìm khóa của R.

Giải:

  • Bước 1:

      • K = ABCDEFG.

  • Bước 2:

      • Loại bỏ A: (BCDEFG)F+ = ABCDEFG K = BCDEFG.

      • Loại bỏ B: (CDEFG)F+ = ABCDEFG K = CDEFG.

      • Loại bỏ C: (DEFG)F+ = ABCDEFG K = DEFG.

      • Loại bỏ D: (EFG)F+ = EFG.

      • Loại bỏ E: (DFG)F+ = ABCDEFG K = DFG.

      • Loại bỏ F: (DG)F+ = ABCDEG.

      • Loại bỏ G: (DF)F+ = ABCDEFG K = DF.

  • Bước 3:

      • Khóa là K = DF.

b. Thuật toán tìm tất cả các khóa

Thuật toán cơ bản tìm tất cả các khóa:

  • Bước 1: Xác định tất cả các tập con khác rỗng của U. Kết quả tìm được giả sử là các tập thuộc tính X1, X2,… …,X2n-1

  • Bước 2: Tìm bao đóng của Xi

  • Bước 3: Siêu khóa là các Xi có bao đóng đúng bằng U. Giả sử ta đã tìm được các siêu khóa là S = {S1, S2,… …,Sm}

  • Bước 4: Xây dựng tập chứa tất cả các khóa của R từ tập S bằng cách xét mọi Si, Sj con của S (i j),

nếu Si Sj thì ta loại Sj.

Kết quả còn lại của S chính là tập tất cả các khóa cần tìm.

Ví dụ:

Cho R(U), U = {C, S, Z}

F = {CS → Z, Z → C}

Tìm khóa của R

Giải:

Xi

Xi+

Siêu khóa

Khóa

C

C

S

S

Z

CZ

CS

CSZ

CS

CS

CZ

CZ

SZ

CSZ

SZ

SZ

CSZ

CSZ

CSZ

Vậy LĐQH R có 2 khóa là K1 = SZ và K2 = CS

Thuật toán cải tiến bản tìm tất cả các khóa

Một số khái niệm:

  • Tập thuộc tính nguồn (TN): chứa tất cả các thuộc tính xuất hiện ở vế trái và không xuất hiện ở vế phải của các PTH; đồng thời chứa các thuộc tính không xuất hiện ở cả vế trái lẫn vế phải của các PTH.

  • Tập thuộc tính đích (TD): chứa tất cả các thuộc tính xuất hiện ở vế phải và không xuất hiện ở vế trái của các PTH

  • Tập thuộc tính trung gian (TG): chứa các thuộc tính xuất hiện ở cả vế trái lẫn vế phải của các PTH.

Hệ quả: Nếu K là khóa của R thì TN K và TD K =

Thuật toán cải tiến tìm tất cả các khóa:

  • Bước 1: Tạo tập thuộc tính nguồn TN, tập thuộc tính trung gian TG

  • Bước 2: Nếu TG = thì LĐQH R chỉ có một khóa K = TN

Ngược lại, thực hiện B3

  • Bước 3: Tìm tất cả các tập con Xi của tập thuộc tính trung gian TG

  • Bước 4: Tìm các siêu khóa Si

Nếu (TN Xi)+ = U thì Si = TN Xi

  • B5: Tìm khóa bằng cách loại bỏ các siêu khóa không tối thiểu

Si, Sj S (i j), nếu Si Sj thì ta loại Sj khỏi tập siêu khóa S. Kết quả còn lại của S chính là tập tất cả các khóa cần tìm

Ví dụ:

Cho R(U), U = {C, S, Z}

F = {CS → Z, Z → C}

Tìm khóa của R

Giải:

TN = {S}; TG = {C,Z}

Gọi Xi là các tập con của tập TG

Xi

TN Xi

(TN Xi) +

Siêu khóa

Khóa

S

S

C

CS

CSZ

CS

CS

Z

SZ

CSZ

SZ

SZ

CZ

CSZ

CSZ

CSZ

Vậy LĐQH R có 2 khóa là K1 = SZ và K2 = CS

Chương 5. Dạng chuẩn và chuẩn hóa lược đồ cơ sở dữ liệu

5.1. Dạng chuẩn

Chuẩn hóa là quá trình tách bảng (phân rã) thành các bảng nhỏ hơn dựa vào các phụ thuộc hàm. Các dạng chuẩn là các chỉ dẫn để thiết kế các bảng trong cơ sở dữ liệu. Mục đích của chuẩn hóa là loại bỏ các dư thừa và các lỗi khi thao tác dữ liệu (Insert, Delete, Update). Nhưng chuẩn hóa làm tăng thời gian truy vấn.

5.1.1. Thiết kế kém gây nguy hiểm cho CSDL

Một trong hai nguyên nhân sau đây do thiết kế kém sẽ gây nguy hiểm cho cơ sở dữ liệu đó là:

  • Trùng lặp thông tin

  • Không có khả năng trình bày thông tin một cách chắc chắn

Ví dụ:

Cho một lược đồ quan hệ dùng để ghi nhận giáo viên và lớp giảng dạy của giáo viên GIANGDAY(MONHOC, SOTIET, LOP, GV, HV, DC)

Các phụ thuộc hàm: MONHOC SOTIET, LOP GV, GVHOCVI

Xét một tình trạng dữ liệu như sau:

MONHOC

SOTIET

LOP

GV

HOCVI

DC

CSDL

90

TH1

Nguyễn Tuấn Anh

CN

Q1

CTDL

75

TH1

Lê Thị Hồng

ThS

Q2

CSDL

90

TH2

Nguyễn Tuấn Anh

CN

Q1

CTDL

75

TH2

Lê Thị Hồng

ThS

Q2

CN : Cử nhân, ThS : Thạc sĩ

Do có phụ thuộc hàm MONHOC SOTIET nên số tiết của dòng thứ 2 và dòng thứ 3 gây trùng lặp thông tin. Tương tự phụ thuộc hàm GVHOCVI nên học vị và địa chỉ của dòng thứ 2 và thứ 3 gây nên sự trùng lặp thông tin.Các dữ liệu gây trùng lắp thông tin là các dữ liệu có thể suy đoán được một cách chắc chắn và duy nhất từ phụ thuộc hàm.

ở đây để lưu học vị và địa chỉ của một giáo viên thì giáo viên đó phải tham gia giảng dạy một lớp nào đó. Để giải quyết vấn đề lưu thông tin các giáo viên không tham gia giảng dạy người ta dùng giá trị NULL cho các thuộc tính MONHOC, SOTIET, LOP. Như vậy, lược đồ quan hệ nàylưu trữ hai thông tin của hai đối tượng khác nhau một là giảng dạy của các của các giáo viên tham gia giảng dạy, hai là thông tin của các giáo viên không tham gia giảng dạy. Vấn đề nảy sinh ở đây là khi ta chỉ cần cập nhật việc giảng dạy ta phải đảm bảo không gây ảnh hưởng tới các giáo viên không tham gia giảng dạy và ngược lại. Như vậy thông tin lưu trữ ở lược đồ quan hệ này không chắc chắn.

5.1.2. Phân rã

a. Giới thiệu về phân rã

Phân rã (Decomposition):

Cho lược đồ quan hệ R(U), U = {A1,…,An}

Phân rã R là thay bằng 1 tập Q = {R1,…,Rk} trong đó Ri là các tập con của R sao cho: R1 Rk = R

  • Tất cả các thuộc tính của R xuất hiện ở ít nhất một Ri

  • Tất cả các quan hệ r trên R đều thỏa mãn: r = R1(r) R2(r)

Các tính chất mong muốn của một phân rã: Các phân rã nên đảm bảo:

    • Tính kết nối bảo toàn thông tin (Lossless-join)

    • Bảo toàn phụ thuộc hàm (Dependency preserving)

    • Không dư thừa (No redundancy)

    • Số các bảng (lược đồ) là ít nhất

Không phải lúc nào cũng đồng thời đạt được các tính chất trên

b. Phân rã bảo toàn thông tin

Định nghĩa:

  • Nếu

    • {R1,…,Rk} là một phân rã của LĐQH R

    • F là tập các PTH

  • Thì {R1,…,Rk} là một phân rã kết nối bảo toàn thông tin (nối không mất) nếu với mỗi quan hệ r của R thỏa F, ta có

r = R1(r) R2(r) … Rk(r)

    • Quan hệ bị phân rã cần được khôi phục lại từ phân rã của chính nó.

    • Phân rã của R = {R1,R2} có nối không mất khi và chỉ khi có ít nhất 1 PTH sau thuộc F+:

      • R1 R2 R1

      • R1 R2 R2

Kiểm tra tính chất nối không mất:

    • In:

      • Lược đồ quan hệ R(U), U = {A1,…,An}

      • Tập PTH F, phân rã Q = {R1,…,Rk}

    • Out:

      • Q có phải là phân rã nối không mất?

    • Phương pháp: 4 bước:

      • B1: Xây dựng bảng n cột và k hàng; cột j ứng với thuộc tính Aj, hàng i ứng với lược đồ Rj

      • B2: Ở vị trí hàng i và cột j, đặt aj nếu Aj thuộc Ri. Nếu không đặt bịj

      • B3: Xét mỗi PTH XY trong F (kể cả những PTH đã xét)

        • Tìm những hàng giống nhau ở tất cả các thuộc tính X

        • Biến đổi cho 2 hàng này bằng nhau ở các cột thuộc tính Y

          • Nếu một trong các giá trị ở 1 cột thuộc tính trong Y là aj thì giá trị còn lại được biến thành aj

          • Nếu là bij và bkj thì biến thành bij hoặc bkj tùy ý

      • B4: Nếu không có sự thay đổi giá trị nào trong bảng thì dừng, nếu không quay lại B3

      • KL: Nếu thu được 1 hàng a1...an chứa toàn a thì phân rã này có nối không mất. Ngược lại phân rã mất nối.

Ví dụ:

Xét R(A,B,C,D,E) phân rã thành

R1(A,D), R2(A,B), R3(B,E), R4(C,D,E) và R5(A,E) F={A C, B C, C D, DE C, CE A}

A

B

C

D

E

R1

a1

b12

b13

a4

b15

R2

a1

a2

b23

b24

b25

R3

b31

a2

b33

b34

a5

R4

b41

b42

a3

a4

a5

R5

a1

b52

b53

b54

a5

Xét các PTH đều ko tìm được hàng nào chứa toàn a

KL: Phân rã mất nối

c. Phân rã bảo toàn phụ thuộc hàm

Giả sử có LĐQH R với tập PTH F và phân rã Q = {R1,…,Rk}

Phụ thuộc hình chiếu: Fi là hình chiếu của F trên lược đồ Ri là tập phụ thuộc X Y F+ sao cho XY Ri

Ký hiệu: Ri(F)

Phân rã Q bảo toàn phụ thuộc hàm F nếu hợp của các phụ thuộc hình chiếu Ri(F) với i=1,...,k khẳng định logic tất cả các phụ thuộc trong F

Ví dụ:

Lược đồ quan hệ R(A,B,C)

Tập PTH F = {A B, A C, B C}

Phân rã thành R1(A,B) và R2(B,C)

Tập phụ thuộc hình chiếu T gồm:

A B, khi chiếu trên R1(A,B) (1)

B C, khi chiếu trên R2(B,C) (2)

Từ (1), (2) T A C (luật bắc cầu)

Vậy phân rã trên bảo toàn phụ thuộc hàm

Thuật toán kiểm tra X Y có được suy dẫn từ tập phụ thuộc hình chiếu:

Z = X;

WHILE (vẫn còn những thay đổi của Z)

For( i=1, i<=k, i++) //Kiểm tra lần lượt trên từng phân rã

Z = Z ((Z Ri)+ Ri) //Bao đóng được lấy ứng với F

Kết luận: Nếu Y là tập con của Z thì X Y được suy ra từ tập phụ thuộc hình chiếu và Q bảo toàn F //Kiểm tra với các PTH tập phụ thuộc hình chiếu

5.1.3. Các dạng chuẩn

a. Dạng chuẩn 1NF (First Normal Form)

Định nghĩa

Lược đồ quan hệ R được gọi là thuộc dạng chuẩn 1 khi và chỉ khi mọi thuộc tính của R là thuộc tính đơn.

Ví dụ: Chuyển bảng SinhVien sang dạng 1NF

MaSV

HoTen

DiaChi

MaMH

TenMH

TenGV

Phong

Diem

A01

Nguyễn Thị Ánh

Hà Nội

M01

CSDL

Hiếu

P13

8

A01

Nguyễn Thị Ánh

Hà Nội

M02

Anh 2

Hương

P04

5

A03

Trần Văn Nam

Thái Nguyên

M01

CSDL

Hiếu

P13

4

A02

Lê Phương Yến

Hưng Yên

M04

LTHĐT

Huy

P05

7

A02

Lê Phương Yến

Hưng Yên

M02

Anh 2

Hương

P04

6

A02

Lê Phương Yến

Hưng Yên

M03

CNPM

Hòa

P14

7

R đạt chuẩn 1NF

b. Dạng chuẩn 2NF (Second Normal Form)

Định nghĩa

Lược đồ quan hệ R được gọi là thuộc dạng chuẩn 2 khi và chỉ khi:

  • R ở dạng chuẩn 1

  • Mọi thuộc tính không khóa đều phụ thuộc hàm đầy đủ vào khóa chính.

R(U), K U là khóa chính của R

  • A ∈ U là thuộc tính không khóa nếu A ∉ K.

  • X → Y là PTH đầy đủ nếu ∀A ∈ X thì (X - {A}) → Y không đúng trên R.

Ngược lại X → Y là PTH bộ phận.

Một quan hệ ở dạng 2NF nếu thỏa mãn 1 trong các điều kiện sau:

  • Khóa chính chỉ gồm 1 thuộc tính.

  • Bảng không có các thuộc tính không khóa.

  • Tất cả các thuộc tính không khóa phụ thuộc hoàn toàn vào tập các thuộc tính khóa chính

Chú ý:

  • Chỉ kiểm tra các quan hệ có đạt 2NF nếu quan hệ đó có khóa chính gồm 2 thuộc tính trở lên.

  • Để chuyển quan hệ từ dạng chuẩn 1NF sang dạng chuẩn 2NF, ta sử dụng phép chiếu.

Thuật toán:

  • Bước 1: Tìm các khóa K của R.

  • Bước 2: Với mỗi khóa K, tìm bao đóng của tất cả tập con thật sự Si của K.

    • Nếu tồn tại 1 bao đóng (Si)+ chứa thuộc tính không khóa thì R không đạt chuẩn 2NF.

Ngược lại thì R đạt chuẩn 2NF

Ví dụ: Bảng SinhVien có các phụ thuộc hàm sau:

      • (1) MaSV HoTen, DiaChi

      • (2) MaMH TenMH, TenGV, Phong

      • (3) MaSV, MaMH Diem

      • (4) TenGV Phong

    • Khóa chính: MaSV, MaMH

    • HoTen, DiaChi, TenMH, TenGV, Phong là các thuộc tính không khóa, nhưng chỉ phụ thuộc vào 1 phần của khóa

c. Dạng chuẩn 3NF (Third Normal Form)

Định nghĩa

    • Lược đồ quan hệ R được gọi là thuộc dạng chuẩn 3 khi và chỉ khi:

      • R ở dạng chuẩn 2

      • Mọi thuộc tính không khóa đều không phụ thuộc hàm bắc cầu vào khóa chính.

    • R(U)

X → Y là PTH bắc cầu nếu Z U, Z không là khóa và cũng không là tập con của khóa của R mà X → Z và Z → Y đúng trên R.

Thuật toán

  • B1: Tìm các khóa K của R.

  • B2: Từ F tạo tập PTH tương đương Ftd có vế phải 1 thuộc tính.

  • B3: Nếu mọi PTH X A Ftd và A X đều có X là siêu khóa (khóa bao hàm) hoặc A là thuộc tính khóa (thuộc tính nguyên tố) thì R đạt chuẩn 3NF.

Ngược lại thì R không đạt chuẩn 3NF.

Chú ý:

  • X là siêu khóa X+ = U

  • A là thuộc tính khóa khi A là phần tử của một khóa của R (R có thể có nhiều khóa). Ngược lại, A là phi nguyên tố.

Ví dụ:

d. Dạng chuẩn BCNF (Boyce - Codd Normal)

Định nghĩa

Lược đồ quan hệ R được gọi là thuộc dạng chuẩn BCNF khi và chỉ khi:

PTH không hiển nhiên X → Y đúng trên R thì X là siêu khóa của R.

Ví dụ:

Để R đạt BCNF thì tách thành

R1(MaSV, TenMH, MaGV)

R2(MaGV, TenGV)

Nhận xét:

  • Mọi quan hệ thuộc dạng chuẩn BCNF cũng thuộc dạng chuẩn 3

  • Dạng chuẩn BCNF đơn giản và chặt chẽ hơn chuẩn 3

Mục tiêu của quá trình chuẩn hóa là đưa lược đồ quan hệ về dạng chuẩn 3 hoặc chuẩn BCNF.

Thuật toán

  • B1: Tìm các khóa K của R.

  • B2: Từ F tạo tập PTH tương đương Fct có vế phải 1 thuộc tính.

  • B3: Nếu mọi PTH X A Fct và A X đều có X là siêu khóa thì R đạt chuẩn BCNF.

Ngược lại thì R không đạt chuẩn BCNF.

5.2. Chuẩn hóa lược đồ CSDL

5.2.1. Thuật toán phân rã LĐQH thành 3NF

Thuật toán phân rã LĐQH thành 3NF

  • Bước 1: Xây dựng lược đồ có các thuộc tính không xuất hiện ở cả vế phải lẫn vế trái của các phụ thuộc hàm trong F.

  • Bước 2: Nếu có một phụ thuộc hàm nào của F mà liên quan tới tất cả các thuộc tính của R thì kết quả chính là R.

  • Bước 3:

  • Tìm phủ tối thiểu F’ của F

  • Phép tách đưa ra các lược đồ gồm các thuộc tính XA cho phụ thuộc hàm XA thuộc F, nếu XA1, XA2,..., XAn thuộc F thì thay thế lược đồ XA1A2...An cho các lược đồ XAi(1<=i<=n).

Khi sử dụng thuật toán này để phân rã LĐQH thành 3NF thì các lược đồ thu được đã bảo toàn phụ thuộc hàm.

Ví dụ:

Cho lược đồ quan hệ R(CTHRSG) với tập phụ thuộc hàm tối thiểu F’ = (C→T,HR → C,HT → R, CS → G và HS → R)

Tách lược đồ quan hệ trên về dạng chuẩn 3

Lời giải:

B1: ko thực hiện

B2: ko thực hiện

B3: Phép tách để lược đồ quan hệ R về dạng chuẩn 3:

 = {(R1(CT), C→T),

(R2(CHR), HR→C),

(R3(HRT), HT→R),

(R4(CGS), CS → G),

(R5(HRS), HS → R)}

5.2.2. Thuật toán phân rã LĐQH thành BCNF

Thuật toán phân rã LĐQH thành BCNF

  • B1: Phép tách ρ chỉ bao gồm R.

  • B2: Nếu S là một lược đồ thuộc ρ và S chưa ở dạng BCNF thì chọn PTH X → A thỏa trong S, trong đó X không chứa khóa của S và A ∉ X. (phụ thuộc hàm vi phạm định nghĩa dạng chuẩn BCNF).

Thay thế S trong ρ bởi S1 và S2 như sau: S1 = XA, S2 = S-A.

Quá trình trên tiếp tục cho đến khi tất cả các lược đồ quan hệ đều ở dạng BCNF

Chú ý:

Khi sử dụng thuật toán này để phân rã LĐQH thành BCNF thì các lược đồ thu được đã đảm bảo kết nối không mất mát thông tin.

Ví dụ:

Cho lược đồ quan hệ R(CTHRSG).

C: Course; T: Teacher; H: Hour; R: Room; S: Student; G:Group)

Và tập các phụ thuộc hàm F:

C → T: Mỗi khoá học (course) có một thầy (teacher) duy nhất.

HR →C: Tại một thời điểm (Hour) ở tại phòng học (room) chỉ có một khoá học duy nhất.

HT→ R: Tại một thời điểm và một giáo viên chỉ ở một phòng duy nhất

CS→G: Một sinh viên học một course thì chỉ ở một lớp duy nhất.

HS → R: Một sinh viên, ở một thời điểm nhất định chỉ ở trong một phòng duy nhất.

Yêu cầu: Tách lược đồ R thành các lược đồ con ở dạng BCNF

Lời giải:

Vậy, = {R1(CSG, {CS → G}, Khóa: CS),

R2(CT, {C → T}, Khóa: C)

R3(CHR, {HR → C, CH → R}, Khóa: HR,CH)

R4(CHS, {HS → C}, Khóa: HS)} là phép tách về dạng chuẩn BCNF

Chương 6. Tối ưu hóa câu hỏi

Tối ưu hóa câu hỏi là quá trình lựa chọn phương pháp sao cho khi thực hiện các câu hỏi truy vấn có hiệu quả nhất, có thể đánh giá được các khả năng xử lý câu hỏi từ nhiều chiến lược khác nhau, đặc biệt là cho những câu hỏi phức tạp. Một phương pháp khi thực hiện có chi phí thấp, tức là tối ưu về thời gian truy xuất thông tin và tối ưu về không gian lưu trữ mà vẫn bảo đảm được tính độc lập và toàn vẹn dữ liệu.

6.1. Các nguyên tắc tổng quát để tối ưu hoá câu hỏi

6.1.1. Các nguyên tắc tổng quát

  • Ưu tiên thực hiện các phép chiếu và chọn, nhằm giới hạn khối lượng dữ liệu trung gian. Giảm chi phí truy nhập bộ nhớ.

  • Trước khi phải thực hiện phép tích đề các, hãy tìm chiến lược truy nhập tốt nhất vào CSDL. Ví dụ như sử dụng các phép sắp xếp, hoặc chọn chỉ số trên thành phần tham gia vào tích đề các.

  • Thực hiện các phép kết nối cân bằng chi phí sẽ rẻ hơn nhiều so với chi phí thực hiện phép tích đề các.

  • Nhóm các phép toán chọn và chiếu liên tiếp thành một phép toán duy nhất.

  • Nhóm các phép tích và chiếu liên tiếp thành một phép toán duy nhất. Trong khi thi thực hiện phép tích có thể giới hạn chi phí thực hiện bằng phép chiếu.

  • Tìm biểu thức chung trong một biểu thức. Nếu kết quả là một quan hệ không lớn lắm nhưng tần xuất xuất hiện nhiều lần, nên có biểu thức con chung.

  • Đánh giá sơ bộ trước khi thực hiện câu hỏi. Số phép toán thực hiện, tổng chi phí thực hiện: thời gian, bộ nhớ ...

6.1.2. Biểu thức tương đương và các quy tắc

Biểu thức trong ngôn ngữ đại số quan hệ có các hạng thức là biến quan hệ (relation variables) R1,R2,…,Rn; các quan hệ hằng được xác định như là một ánh xạ từ các k bộ của các quan hệ (r1, r2, …,rk) trong đó ri là quan hệ trên lược đồ ri và thay thế ri vào Ri khi đánh giá biểu thức.

Hai biểu thức E1 và E2 được gọi là tương đương, viết tắt là , nếu chúng biểu diễn cùng một ánh xạ, nghĩa là, nếu chúng ta thay thế cùng các quan hệ cho tên các lược đồ tương ứng ở hai biểu thức E1 và E2, thì chunngs sẽ cho ra cùng một kết quả.

a. Các quy tắc liên quan tới phép kết nối và tích Đề các

Quy tắc giao hoán của phép kết nối và tích đề các

Nếu E1 và E2 là hai biểu thức quan hệ và F là điều kiện trên các thuộc tính của E1 và E2 thì:

// Tính giao hoán của phép kết nối

// Tính giao hoán của phép kết nối bằng

// Tính giao hoán của tích đề các

Chú ý: Nếu quan niệm quan hệ là tập các bộ (có thứ tự thuộc tính cố định) thì phép kết nối, kết nối tự nhiên và tích đề các không thể giao hoán được vì các thuộc tính trong quan hệ kết quả bị thay đổi.

Quy tắc kết hợp của phép kết nối và tích đề các

Nếu E1, E2, E3 là các biểu thức quan hệ: F1, F2 là điều kiện thì:

b. Các quy tắc liên quan tới phép chọn và phép chiếu

Dãy các phép chiếu có thể tổ hợp lại thành một phép chiếu, biểu diễn theo các trường hợp sau:

Dãy các phép chiếu

(E[B1B2…Bm])[A1A2…An] ≡ E[A1A2...An]

ở đây, các thuộc tính A1, ...,An phải nằm trong tập các thuộc tính B1,...,Bm. Ngữ nghĩa của việc biến đổi tương đương này là : Nếu thực hiện một phép chiếu biểu thức quan hệ E trên tập các thuộc tính B, rồi sau đó thực hiện tiếp phép chiếu trên tập con các thuộc tính của quan hệ vừa tìm được, thì kết quả của dãy phép chiếu này hoàn toàn tương đương với một phép chiếu biểu thức quan hệ E trên tập thuộc tính A.

Tương tự, dãy các phép chọn có thể tổ hợp thành một phép chọn để kiểm tra tất cả các điều kiện cùng một lúc và được biểu diễn như sau :

Dãy các phép chọn :

(((E : (f1)) :f2) :...) :fn E : (f1^f2 ... ^fn)

Việc lần lượt thực hiện các phép chọn trên quan hệ kết quả của một phép chọn trước đó đối với biểu thức quan hệ E là tương đương với việc chọn trên E các bộ giá trị thoả mãn đồng thời tất cả các điều kiện chọn f1, f2, ...fn.

Giao hoán phép chọn và phép chiếu

(E[A1…An]: (f)) (E : (f))[A1...An]

Một cách tổng quát hơn nếu điều kiện chọn f liên quan tới các thuộc tính B1, ..., Bm mà không nằm trong tập thuộc tính A1,...,An thì :

(E[A1...An]) : (f) ((E[A1...AnB1...Bm]) : (f))[A1...An]

Giao hoán phép chọn và tích đề các :

Nếu tất cả các thuộc tính của F là thuộc tính của E1 thì :

(E1x E2) : (f) (E1 : (f))x E2

Từ đó dễ dàng suy ra rằng, nếu F có dạng f= f1 ^ f2 trong đó f1 chỉ liên quan tới các thuộc tính của E1 ; f2 chỉ liên quan tới các thuộc tính của E2, thì có thể sử dụng các trường hợp ,, để có :

(E1xE2) : (f) (E1 : (f1))x (E2 : (f2))

Hơn nữa nếu f1 chỉ liên quan tới các thuộc tính của E1, nhưng f2 liên quan tới các thuộc tính của cả E1 và E2 thì :

(E1x E2) : (f) ≡ ((E: (F1)) X E2) : (F2)

Giao hoán phép chọn và một phép hợp

Nếu có biểu thức có thể giả thiết thêm rằng, các thuộc tính của E1 và E2 có cùng tên như của E hoặc ít nhất mỗi thuộc tính của E là phù hợp với một thuộc tính duy nhất của E1 và một thuộc tính duy nhất của E2, Khi đó :

Nếu tên các thuộc tính của E1 và hoặc E2 khác với tên thuộc tính của E thì trong f ở vế phải của công thức trên cần thay đổi để sử dụng tên cho phù hợp.

Giao hoán phép chọn và một phép hiệu tập hợp

(E1- E2) : (f) (E1 : (f)) – (E2 : (f))

Như đã nêu trong trường hợp , nếu tên các thuộc tính của E1 và E2 là khác nhau thì cần thay thế các thuộc tính trong f ở vế phải biểu thức tương đương tương ứng với E1. Chú ý rằng, phép chọn (E2 : (f)) có thể là không cần thiết. Trong nhiều trường hợp, việc thực hiện phép chọn (E2 : (f)) trước sẽ có hiệu quả hơn là tính toán trực tiếp với E2 vì kích cỡ quan hệ lúc đó sẽ bé đi rất nhiều.

Các quy tắc nêu trên nói chung là đẩy phép chọn xuống trước phép kết nối vì phép kết nối thường thực hiện lâu như phép tích Đề Các. Quy tắc đẩy phép chọn xuống trước phép kết nối suy ra từ quy tắc , . Quy tắc đẩy phép chiếu xuống trước phép tích đề các hoặc phép hợp cũng tương tự như quy tắc .

Chú ý là không có phương pháp tổng quát cho việc đẩy phép chiếu xuống trước phép hiệu các tập hợp.

Giao hoán một phép chiếu với một phép tích đề các

Gọi E1, E2 là hai biểu thức quan hệ, A1 … An là tập các thuộc tính trong đó B1, …Bm là các thuộc tính của E1, các thuộc tính còn lại C1,…,Ck thuộc E2. Khi đó :

(E1x E2) [A1…An] ≡ E1[B1…Bm] x E2[C1…Ck]

Giao hoán một phép chiếu với một phép hợp

Như đã nêu trong luật , nếu tên các thuộc tính của E1 và hoặc E2 là khác với các thuộc tính trong thì cần thay A1…An bên vế phải bằng các tên phù hợp

6.2. Ví dụ một thuật toán tối ưu hoá biểu thức quan hệ

  • Tới đây có thể áp dụng các quy tắc nêu trong mục 6.1 để có thể tối ưu hoá các biểu thức quan hệ. Biểu thức tối ưu các nguyên tắc phải tuân theo các nguyên tắc đã nêu ở phần trên mặc dù rằng các nguyên tắc đó không có nghĩa là bảo đảm để tối ưu cho mọi trường hợp tương đương.

  • Lưu ý rằng, luôn luôn đẩy phép chọn và phép chiếu xuống mức càng sâu càng tốt trong cây biểu diễn biểu thức quan hệ nhằm tạo nên một dãy các phép chọn cũng như phép chiếu để từ đó có thể tổ chức thành một phép chọn theo sau một phép chiếu. Nhóm các phép chọn và phép chiếu lại trong một nhóm để thực hiện trước các phép tính hai ngôi như phép hợp, tích đề các, hiệu tập hợp …

  • Có một số trường hợp đặc biệt xảy ra khi một phép tính hai ngôi có các hạng thức chứa phép chọn và hoặc phép chiếu được áp dụng đối với lá của cây biểu diễn biểu thức. Khi đó cần xem xét cẩn thận tác động của phép tính hai ngôi vì một số trường hợp cần phải liên kết phép chọn hoặc phép chiếu với phép hai ngôi đó.

  • Kết quả đầu ra (Output) của thuật toán là một chương trình bao gồm các bước sau :

    • Áp dụng của phép chọn hoặc một phép chiếu đơn giản.

    • Áp dụng của một phép chọn và một phép chiếu hoặc

    • Áp dụng của một tích đề các, phép hợp hoặc phép hiệu tập hợp cho hai hạng thức mà trước đó các phép chọn hoặc các phép chiếu đã được áp dụng cho một hoặc cả hai hạng thức.

Ví dụ :

Hãy xét một CSDL quản lý thư viện bao gồm các quan hệ sau đây:

SACH(Tên-sách, Tác-giả, NhàXB, Mã-sách): là quan hệ về các loại sách trong thư viện.

Nha-Xuat-Ban(Nhà XB, Địa-chỉ, Thành-phố): quan hệ về nhà xuất bản.

Doc-Gia(Tên-ĐG, Đchỉ-ĐG, Tphố-ĐG, Số-thẻ): quan hệ về độc giả.

MUON-SACH(Số-thẻ, Mã-sách, Ngày-mượn): quan hệ sổ theo dõi mượn.

Để lưu trữ thông tin về sách có thể giả thiết thêm rằng có một khung nhìn (VIEW) theo dõi các sách được mượn, TD-Mượn, bao gồm một số thông tin bổ sung về sách được mượn, là kết quả của phép kết mối tự nhiên của quan hệ SACH, Doc-Gia và MUON-SACH, chẳng hạn được xác định qua biểu thức quan hệ :

((SACH x Doc-Gia x MUON-SACH) : (f)) [{S}]

ở đây :

f ::= (Doc-Gia.Số-thẻ= MUON-SACH.Số-thẻ) ^ (SACH.Mã-sách=MUON-SACH.Mã-sách).

Và S là tập thuộc tính :

S= {Tên-sách, Tác-giả,NhàXB, SACH.Mã-sách, Tên-ĐG, Đchỉ-ĐG, Tphố-ĐG, Doc-Gia.Số-thẻ, Ngày-mượn}.

Câu hỏi : Cho biết danh sách của những cuốn sách đã cho mượn trước ngày 27/03/1999

Biểu thức quan hệ được viết như sau :

(TD-Mượn : (Ngày-mượn< 27/03/1999))[Tên-sách]

Hình cây của biểu thức trên được biểu diễn bằng hình 1. Lưu ý là, các phép toán nằm ở phía dưới là các phép toán được thực hiện trước các phép toán ở phía trên của cây.

[Tên-sách] //chiếu lấy cột tên sách

: (Ngày-mượn<27/03/1999) //Chọn sách cho mượn trước ngày 27/03/199

[Tên-sách, Tác-giả, SACH.Mã-sách, Tên-ĐG, Đchỉ-ĐG,Tphố-ĐG, Doc-Gia.Số-thẻ, Ngày-mượn]

: ((SACH.Mã-sách=MUON-SACH.Mã-sách) ^ (MUON-SACH.Số-thẻ=Doc-Gia.Số-thẻ))

X

X SACH

MUON-SACH Doc-Gia

Hình 1 : Biểu diễn cây của biểu thức hỏi

Thay thế các giá trị f và S vào biểu thức hỏi có được cây biểu diễn của biểu thức quan hệ như trong hình 1

Bước thứ nhất của tối ưu là tách phép chọn f thành hai phép chọn với điều kiện :

SACH.Mã-sách= MUON-SACH.Mã-sách

MUON-SACH.Số-thẻ=Doc-Gia.Số-thẻ

Bây giờ chúng ta có 3 phép chọn. Cần ‘đẩy’ chúng xuống mức thấp hơn chừng nào còn có thể được.

phép chọn với điều kiện Ngày-mượn <27/03/1999 được đẩy xuống dưới phép chiếu và hai phép chọn kia bằng cách áp dụng các quy tắc (hoặc luật) .

phép chọn đầu được áp dụng cho tích đề các (MUON-SACH x Doc-Gia) x SACH)

Vì thuộc tính Ngày-mượn trong phép chọn chỉ có ở quan hệ MUON-SACH nên có thể thay thế:

((MUON-SACH x Doc-Gia) x SACH) : (Ngày-mượn <27/03/1999) bằng biểu thức :

((MUON-SACH x Doc-Gia) : (Ngày-mượn <27/03/1999)) x SACH

Và tiếp tục đẩy xuống nữa, cuối cùng ta được biểu thức :

(((MUON-SACH : (Ngày-mượn< 27/03/1999)) x Doc-gia) x SACH)

Như vậy đã đẩy được phép chọn theo ngày mượn sách này xuống sâu như có thể.

Bây giờ tiếp tục đẩy phép chọn với điều kiện SACH.Mã-sách = MUON-SACH.Mã-sách xuống mức thấp nhất nếu có thể. Không thể đẩy phép chọn này xuống dưới tích đề các vì nó liên quan tới một thuộc tính của quan hệ SACH và một thuộc tính thuộc quan hệ MUON-SACH. Do vậy phép chọn :

: MUON-SACH.Số-thẻ = Doc-Gia.Số-thẻ

Có thể đẩy xuống để áp dụng cho tích đề các :

(MUON-SACH x Doc-Gia) : ( : (Ngày-mượn <27/03/1999))

Chú ý rằng MUON-SACH.Số-thẻ là tên một thuộc tính của phép chọn :

MUON-SACH : (Ngày-mượn < 27/03/1999)

Bước tiếp theo : Tổ hợp hai phép chiếu thành một phép chiếu là [Tên-sách] nhờ luật . Kết quả được cho như trong hình 2. Sau đó áp dụng quy tắc mở rộng thay thế :

: (MUON-SACH.Số-thẻ= Doc-Gia.Số-thẻSố-thẻ) và chiếu [Tên-sách] nhờ dãy phép toán :

[Tên-sách.SACH.Mã-sách.MUON-SACH.Mã-sách](1)

: (SACH.Mã-sách= MUON-SACH.Mã-sách) (2)

Rồi chiếu để lấy tên sách : [Tên-sach] (3)

áp dụng quy tắc để thay thế biểu thức đầu tiên, biểu thức số (1), của phép chiếu nhờ phép chiếu : [Tên-sáchTên-sách.SACH.Mã-sách] để áp dụng cho quan hệ SACH và [MUON-SACH.Mã-sách] áp dụng cho hạng thức phía trái của tích đề các trong hình 2.

phép chiếu cuối và phép chọn có thể áp dụng quy tắc mở rộng để có dãy :

[MUON-SACH.Mã-sáchMã-sách, MUON-SACH.Số-thẻSố-thẻ, Doc-Gia.Số-thẻ] (5)

: (MUON-SACH.Số-thẻ= Doc-Gia.Số-thẻ) (6)

[MUON-SACH.Mã-sách]Mã-sách] (7)

Phép chiếu đầu, số (5) được phân tách chuyển xuống tích đề các nhờ quy tắc

Một phần phép chiếu Doc-Gia.Số-thẻ xuống hạng thức Doc-Gia vì là thuộc tính của quan hệ này.

[Tên-Sách]

: (SACH.Mã-sách=MUON-SACH.Mã-sách)

X

(MUON-SACH.Số-thẻ= Doc-Gia.Số-thẻ) SACH

X

: (Ngày-mượn <27/03/1999) Doc-Gia

MUON-SACH

Hình 2: Cây với tổ hợp phép chọn và phép chiếu

Phần còn lại là phép chiếu để lấy 3 thuộc tính :

[MUON-SACH.Mã-sách, MUON-SACH.Số-thẻSố-thẻ, Ngày-mượn] được đẩy xuống hạng thức thứ MUON-SACH. Các thuộc tính không phù hợp sẽ bị loại bỏ. Biểu diễn cây cuối cùng của biểu thức như trong hình 3

Nhóm các phép tính bằng đường mũi tên gián đoạn. Mỗi tích đề các được tổ hợp với phép chọn để tạo thành một phép kết nối bằng nhau rất có hiệu quả.Đặc biệt phép chọn trên quan hệ MUON-SACH và phép chiếu của Doc-Gia để lấy thuộc tính số-thẻ ở phía dưới là đủ để tổ hợp với tích đề các. Thứ tự thực hiện của cây biểu thức trong các hình 1, 2 và 3 là từ dưới lên: Nhóm các phép toán nằm ở phía dưới được thực hiện trước các phép toán ở phía trên.

[Tên-Sách]

: (SACH.Mã-sách=MUON-SACH.Mã-sách)

X

[MUON-SACH.Mã-sách] [ SACH.Mã-sách, Tên-sách]

X SACH

[MUON-SACH.Mã-sách, MUON-SACH.Số-thẻ]

: (Ngày-mượn <27/03/1999) [ Doc-Gia.Số-thẻ]

MUON-SACH Doc-Gia

Hình 3: Cây kết quả biểu diễn việc phân nhóm các biểu thức

6.3. Thuật toán tối ưu hoá câu hỏi trong ngôn ngữ Đại số quan hệ

Ví dụ trên cho ta một minh họa về việc chuyển đổi một câu hỏi bằng ngôn ngữ đại số quan hệ về dạng tương đương tốt hơn (hay tối ưu hơn). Phương pháp trên tập trung chủ yếu vào các phép chiếu, phép chọn và tích đề các, với mục đích làm sao  “ đẩy ” được phép chọn và phép chiếu xuống mức thấp nhất, tức là thi hành các phép toán này càng sớm càng tôt, nếu có thể. Tiếp theo, kết hợp các phép chọn với tích đề các thành phép kết nối tự nhiên để làm giảm các kết quả trung gian. Cốt lõi của vấn đề tối ưu hoá chính là việc làm giảm thiểu lưu trữ trung gian và từ đó làm tăng nhanh tốc độ xử lý câu hỏi.

Tuy nhiên, để thực hiện được các quá trình tối ưu hoá như trên, chúng ta cần lưu ý tới thứ tự thực hiện các phép toán để có thể “ đẩy ” các phép toán xuống các mức hợp lý cần thiết. Bảng dưới đây cho phép chúng ta cách thực hiện các phép biến đổi tương đương đối với các phép hội (Union), Trừ (Minus), Giao (Intersect), Tích đề các (Cartesian), Chia(Division), chiếu (Projection) và chọn (Selection)

(B1). Kết nối tự nhiên tương đương với dãy phép tích đề các, phép chọn và phép chiếu :

(B2).Phép kết tương đương với dãy phép tích đề các và phép chọn với điều kiện :

Q1(A,B) Q2(C,D) ≡ (Q1 X Q2) : (BD)

(B3).Phép giao tương đương với phần bù của hội hai phần bù của hai quan hệ:

và (B4)

(B4).Phép bù của một quan hệ tương đương với tích đề các của các phép chiếu trên từng thuộc tính của quan hệ trừ đi các bộ giá trị đã có trong thể hiện của quan hệ:

(B5).Thương của hai quan hệ tương đương với hiệu của các quan hệ trung gian sau:

Áp dụng các cách biến đổi tương đương trên, kết hợp với các quy tắc “đẩy” và kết hợp như đã trình bày trong mục 1.2, chúng ta đưa ra thuật toán tổng quát để tối ưu hoá các câu hỏi trong ngôn ngữ đại số quan hệ .

Thuật toán:

Đầu vào (Input): Sơ đồ cú pháp câu hỏi bằng ngôn ngữ đại số quan hệ.

Đầu ra (Output): Sơ đồ cú pháp tối ưu.

Bước 1: Áp dụng các phép biến đổi tương đương nêu trong bảng (B1) đến (B5) trên.

Bước 2: Áp dụng luật biến đổi dãy các phép chọn tương đương: tách phép chọn thành các phép chọn con.

Bước 3: Đối với mỗi phép chọn, áp dụng các luật ,, nhằm đảy các phép toán chọn đó xuống càng sâu càng tốt.

Bước 4: Đối với mỗi phép chiếu, áp dụng các quy tắc , nhằm đẩy các phép toán chiếu đó xuống càng sâu càng tốt.

Bước 5: Tập trung các phép chọn nhằm áp dụng luật

Áp dụng luật để loại bỏ bớt các phép chiếu vô ích

Tập trung các phép chọn với tích Đề các, nếu đươc, để chuyển thành phép kết nối tự nhiên hay kết nối bằng cách áp dụng các luật .

Nhận xét:

1.Thuật giải nêu trên chủ yếu nhằm giảm khối lượng dữ liệu trung gian chứ không chỉ ra thứ tự thực hiện các phép kết nối.

Ví dụ:

2.Thuật giảI này không cho chúng ta một kết quả tối ưu mà nó chỉ đưa ra một giải pháp tốt.

3.Các phép biền đổi chỉ dựa trên các phép toán cơ bản là Hội (Union), Trừ (Minus), Giao (Intersect), Tích Đề các (Cartesian), Chia (Division), Chiếu (Projection) và Chọn (Selection) mà chúng ta còn có thể thực hiện các phép biền đổi dựa trên các phép toán khác nữa.