Giáo trình môn Cơ sở dữ liệu và PTTK HĐT UML - Cô Nguyễn Thị Thu Hiếu
Gửi bởi: Nguyễn Thị Thu Hiếu 12 tháng 4 2021 lúc 13:16:45 | Được cập nhật: 22 giờ trước (13:07:44) | IP: 10.1.29.62 Kiểu file: PDF | Lượt xem: 857 | Lượt Download: 25 | File size: 1.730893 Mb
Nội dung tài liệu
Tải xuốngCác tài liệu liên quan
- Giáo trình môn Cơ sở dữ liệu và PTTK HĐT UML - Cô Nguyễn Thị Thu Hiếu
- Giáo án môn Cấu trúc dữ liệu (CSDL&CTDL) và Thiết kế web - Cô Võ Thị Hường
- Giáo trình lập trình Web 1 - Cô Võ Thị Hường
- Giáo án số 4 - lập trình PHP
- Giáo án số 5 - lập trình PHP
- Giáo án số 2 - lập trình PHP
- Giáo án số 1 - lập trình PHP
- Giáo án số 3 - lập trình PHP
- Slide hội giảng môn đồ họa máy tính năm 2017
- Giáo án môn đồ họa máy tính năm 2017
Có thể bạn quan tâm
Thông tin tài liệu
TRƢỜNG CAO ĐẲNG CƠ ĐIỆN HÀ NỘI
KHOA CÔNG NGH
Ệ THÔNG TIN
--------------------
GIÁO TRÌNH
MÔN HỌC CƠ SỞ DỮ LIỆU
(Tài liệu lưu hành nội bộ)
Hà Nội, 2018
MỤC LỤC
CHƢƠNG 1: TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU VÀ MÔ HÌNH HÓA DỮ LIỆU ........ 1
3.2. Xây dựng mô hình dữ liệu quan hệ ........................................................................... 17 4. Đại số quan hệ ............................................................................................................. 20
3.1. Lấy thông tin từ các cột của bảng bằng mệnh đề SELECT ...................................... 34
CHƢƠNG 3: RÀNG BUỘC TOÀN VẸN VÀ PHỤ THUỘC HÀM ................................. 41
1
CHƢƠNG 1: TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU VÀ MÔ HÌNH HÓA DỮ LIỆU
1. Một số khái niệm
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.
2
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.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ệ:
o Cho máy tính cá nhân: MS Access
3
o 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.3. 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.3.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.3.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.3.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.3.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.3.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.
4
2. 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.
2.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
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ể.
Sinh vien
Than
nhan
5
2.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
o Thuộc tính đơn: không thể tách nhỏ ra được.
Ví dụ : Giới tính,…
o 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
o
Đơn trị: các thuộc tính có giá trị duy nhất cho một thực thể.
Ví dụ : số CMND, …
o
Đ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, …
o 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)
o Kiểu chuỗi (string)
o Kiểu số nguyên (integer)
o Kiểu số thực …
Ví dụ : tập thực thể NHANVIEN có các thuộc tính
6
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ó
2.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:
Sinh vien
MaSV
TenSV
7
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
8
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)
9
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ú ý:
10
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
2.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).
11
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:
12
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:
13
14
3. Mô hình dữ liệu quan hệ
3.1. Các khái niệm cơ bản
3.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
3.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 D
1
, D
2
,…,D
n
là các miền. Tích đề-các của n miền này ký hiệu là
D
1
x D
2
x…x D
n
là tập tất cả n bộ (v
1
, v
2
,…, v
n
) sao cho v
i
thuộc D
i
với i=1…n
Ví dụ:
Cho n=2, D
1
={0,1}, D
2
={a,b,c}
Khi đó D
1
x D
2
={(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ệ r
1
, đó là tập con của tích đề-các D
1
x D
2
.
Tập rỗng
cũng là một quan hệ.
3.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
15
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
3.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 A
1
, A
2
,..., A
n
thì lược đồ quan hệ này có thể viết dưới dạng R(A
1
, A
2
,..., A
n
).
Như vậy khi ta nói cho một lược đồ quan hệ R(A
1
, A
2
,..., A
n
) có nghĩa là ta đã cho một
tập thuộc tính A
1
, A
2
,..., A
n
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)
3.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 T
R
, 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 T
Ri
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
16
LTCB
Lập trình căn bản C
5
3.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(A
1
, A
2
,...,A
n
) là tập con
K
{ A
1
, A
2
,...,A
n
}, thoả mãn các tính chất sau đây:
Với bất kỳ 2 bộ t
1
, t
2
R đều tồn tại một thuộc tính A
K sao cho
t
1
[A]
t
2
[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 t
1
[K]
t
2
[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ệ
17
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.
3.1.7. Phụ thuộc hàm
Quan hệ R được định nghĩa trên tập thuộc tính U = {A
1
,A
2
, …,A
n
}.
U
Y
X
,
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.
3.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.
3.2. Xây dựng 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.
18
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
19
Lƣợc đồ CSDL
SinhVien(MaSV,TenSV,GioiTinh,NgaySinh)
GiaoVien(MaGV,TenGV,GioiTinh, DienThoai,SoThich)
MonHoc(MaMH,TenMH,DVHT,@MaGV)
KetQua(@MaSV,@MaMH,Diem)
20
4. Đại số quan hệ
4.1. Các phép toán tập hợp
4.1.1. Phép hợp
Hợp của hai quan hệ R và S 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
R hoặc t
S.
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 )
a
1
b
1
c
1
a
1
b
2
c
1
a
2
b
2
c
2
S (A B C) a
2
b
1
c
2
a
2
b
2
c
2
R
S (A B C)
a
1
b
1
c
1
a
1
b
2
c
1
a
2
b
2
c
2
a
2
b
1
c
2
(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)
4.1.2. Phép giao
Giao của hai quan hệ R và S 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 cả R và S.
21
Biểu diễn hình thức phép giao có dạng
R
S =
t / t
R 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
4.1.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 / t
R và t
S
.
Ví dụ: * Với R, S ở ví dụ 2.1 (a) trên:
R-S ( A B C )
a
1
b
1
c
1
a
1
b
2
c
1
* Với R, S ở ví dụ 2.1 (b) trên:
R-S ( A B C )
a b c
c
b d
4.1.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 ( a
1
, a
2
,..., a
n
, b
1
, b
2
,..., b
m
), trong đó ( a
1
,..., a
n
)
R và (b
1
,..., b
m
)
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
22
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
4.1.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 ) R
S= (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
23
a b d e
4.2. Các phép toán 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ệ.
4.2.1. 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.
4.2.2. 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).
24
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).
4.2.3. 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).
25
CHƢƠNG 2: NGÔN NGỮ 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.
1. Các lệnh định nghĩa đối tƣợng cơ sở dữ liệu
1.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>
26
Ví dụ: DROP DATABASE QuanLyDiem
1.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).
27
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
28
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
29
)
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,
30
MaKhoa int,
PRIMARY KEY (MaNV),
CONSTRAINT fk_NV FOREIGN KEY (MaKhoa)
REFERENCES Khoa(MaKhoa)
)
1.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)
1.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
31
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
2. Các lệnh bổ sung, cập nhật, xóa dữ liệu
2.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')
32
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
2.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
33
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
2.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
34
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. Các lệnh truy vấn 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.1. Lấy thông tin từ các cột của bảng bằng mệnh đề SELECT
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
35
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.2. Chọn các dòng của bảng bằng mệnh đề WHERE
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
36
%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.3. 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
37
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. Sắp xếp kết quả truy vấn bằng 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.5. Phân nhóm dữ liệu bằng 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:
38
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.6. Lọc nhóm kết quả truy vấn bằng 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.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‟)
* 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
39
* 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
40
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
41
CHƢƠNG 3: RÀNG BUỘC TOÀN VẸN VÀ PHỤ THUỘC HÀM
1. Ràng buộc toàn vẹn
1.1. Các vấn đề liên quan đến ràng buộc toàn vẹn
1.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
1.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
42
+
: 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)
1.2. Các loại ràng buộc toàn vẹn
1.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)
43
1.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)
1.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:
h
1
,h
2
HOCVIEN: Nếu h
1
h
2
thì h
1
.MaHV
h
2
.MaHV
Bối cảnh: quan hệ HOCVIEN
Bảng tầm ảnh hưởng:
RB-6
Thêm
Xóa
Sửa
HOCVIEN
+
-
-
(*)
44
1.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
-
+
-(*)
1.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:
45
RB-9
Thêm
Xóa
Sửa
GIANGDAY
+
-
+(TuNgay)
GIAOVIEN
-
-
+(NgayVL)
1.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)
2. Phụ thuộc hàm
2.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 = {A
1
, A
2
,..., A
n
} là tập thuộc tính.
46
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ộ t
1
, t
2
r mà t
1
[X] = t
2
[X] thì
t
1
[Y]= t
2
[Y]
2.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= {A
1
,..,A
n
} 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 = X∪Z.
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.
2.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.
47
Gọi F là tập các phụ thuộc hàm trên tập thuộc tính U, X
U. X
+
là bao đóng của X (đối với
F) được định nghĩa như sau:
X
+
= {A
X
A
F
+
}
Nói cụ thể : X
+
là tập tất cả các thuộc tính A mà phụ thuộc hàm X
A 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: X
0
= X;
Bước 2: Nếu tồn tại Y → Z
∈ F với Y ⊆ X
i
, Z
X
i
thì
X
i+1
= X
i
∪ Z;
Tiếp tục Bước 2
Ngược lại Bước 3
Bước 3: output X
+
= X
i
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:
X
i
Tập PTH
X
i+1
X
0
= D
D → EG
DEG
X
1
= DEG
Vậy D
+
= DEG
Với X = BD, ta tính X
+
như sau:
X
i
Tập PTH
X
i+1
48
X
0
= BD
D → EG
BDEG
X
1
= BDEG
BE → C
BCDEG
X
2
= BCDEG
C → A
ABCDEG
X
3
= ABCDEG
Vậy BD
+
= ABCDEG
2.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ó A
G
+
= ABCDE
trong G
+
có A → BC và A → D
F
⊆ G
+
F
+
⊆ G
+
(1)
Lại có A
F
+
= 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‟
49
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}
2.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
50
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 – {A
i
})
F
+
thì K = K - {A
i
}.
• 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.
51
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 X
1
, X
2
,… …,X
2
n
-1
Bước 2: Tìm bao đóng của X
i
Bước 3: Siêu khóa là các X
i
có bao đóng đúng bằng U. Giả sử ta đã tìm được các
siêu khóa là S = {S
1
, S
2
,… …,S
m
}
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 S
i
, S
j
con của S (i
j),
nếu S
i
⊆ S
j
thì ta loại S
j.
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:
X
i
X
i
+
Siêu khóa
Khóa
C
C
S
S
Z
CZ
CS
CSZ
CS
CS
52
CZ
CZ
SZ
CSZ
SZ
SZ
CSZ
CSZ
CSZ
Vậy LĐQH R có 2 khóa là K
1
= SZ và K
2
= 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
X
i
)
+
= U thì S
i
= TN
X
i
Bước 5: Tìm khóa bằng cách loại bỏ các siêu khóa không tối thiểu
S
i
, S
j
S (i
j), nếu S
i
⊆ S
j
thì ta loại S
j
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}
53
Tìm khóa của R
Giải:
TN = {S}; TG = {C,Z}
Gọi X
i
là các tập con của tập TG
X
i
TN
X
i
(TN
X
i
)
+
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à K
1
= SZ và K
2
= CS
54
CHƢƠNG 4: DẠNG CHUẨN VÀ CHUẨN HOÁ LƢỢC ĐỒ CƠ SỞ DỮ LIỆU QUAN
HỆ
1. Giới thiệu về chuẩn hóa và các dạng chuẩn
1.1. Giới thiệu về chuẩn hóa
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.
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, GV
HOCVI
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 GV
HOCVI 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
55
đồ 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.
1.2. 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.
56
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ự S
i
của K.
o Nếu tồn tại 1 bao đóng (S
i
)
+
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
57
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 F
td
có vế phải 1 thuộc tính.
B3: Nếu mọi PTH X
A
F
td
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
58
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
59
B1: Tìm các khóa K của R. B2: Từ F tạo tập PTH tương đương F
ct
có vế phải 1 thuộc tính.
B3: Nếu mọi PTH X
A
F
ct
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.
2. Phân rã
2.1. Giới thiệu về phân rã
Phân rã (Decomposition):
Cho lược đồ quan hệ R(U), U = {A
1
,…,A
n
}
Phân rã R là thay bằng 1 tập Q = {R
1
,…,R
k
} trong đó R
i
là các tập con của R sao cho:
R
1
…
R
k
= R
Tất cả các thuộc tính của R xuất hiện ở ít nhất một R
i
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)
60
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
2.2. Phân rã bảo toàn thông tin
Định nghĩa:
Nếu
{R
1
,…,R
k
} là một phân rã của LĐQH R
F là tập các PTH
Thì {R
1
,…,R
k
} 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 = {R
1
,R
2
} có nối không mất khi và chỉ khi có ít nhất 1 PTH sau
thuộc F
+
:
• R
1
R
2
R
1
• R
1
R
2
R
2
Kiểm tra tính chất nối không mất:
In:
• Lược đồ quan hệ R(U), U = {A
1
,…,A
n
}
• Tập PTH F, phân rã Q = {R
1
,…,R
k
}
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 A
j
, hàng i
ứng với lược đồ R
j
• B2: Ở vị trí hàng i và cột j, đặt a
j
nếu A
j
thuộc R
i
. Nếu không đặt b
ịj
• B3: Xét mỗi PTH X
Y 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
61
Nếu một trong các giá trị ở 1 cột thuộc tính trong Y là a
j
thì giá trị còn lại được biến thành a
j
Nếu là b
ij
và b
kj
thì biến thành b
ij
hoặc b
kj
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 a
1
...a
n
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
a
1
b
12
b
13
a
4
b
15
R2
a
1
a
2
b
23
b
24
b
25
R3
b
31
a
2
b
33
b
34
a
5
R4
b
41
b
42
a
3
a
4
a
5
R5
a
1
b
52
b
53
b
54
a
5
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
2.3. 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 = {R
1
,…,R
k
}
Phụ thuộc hình chiếu: F
i
là hình chiếu của F trên lược đồ R
i
là tập phụ thuộc X
Y
F
+
sao cho XY
R
i
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)
62
Tập PTH F = {A
B, A
C, B
C}
Phân rã thành R
1
(A,B) và R
2
(B,C)
Tập phụ thuộc hình chiếu T gồm:
A
B, khi chiếu trên R
1
(A,B) (1)
B
C, khi chiếu trên R
2
(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
R
i
)
+
R
i
) //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
3. Chuẩn hóa lƣợc đồ CSDL
3.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:
o Tìm phủ tối thiểu F‟ của F o 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 XA
1
, XA
2
,..., XA
n
thuộc F‟ thì thay thế lược đồ XA
1
A
2
...A
n
cho
các lược đồ XA
i
(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)
63
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:
= {(R
1
(CT), C→T),
(R
2
(CHR), HR→C),
(R
3
(HRT), HT→R),
(R
4
(CGS), CS → G),
(R
5
(HRS), HS → R)}
3.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.
64
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,
= {R
1
(CSG, {CS → G}, Khóa: CS),
R
2
(CT, {C → T}, Khóa: C)
R
3
(CHR, {HR → C, CH → R}, Khóa: HR,CH)
R
4
(CHS, {HS → C}, Khóa: HS)} là phép tách về dạng chuẩn BCNF