1. Định nghĩa các thuật ngữ: cơ sở dữ liệu, hệ quản trị cơ sở dữ liệu, hệ cơ sở dữ
16.1. Tách lượcđồ quan hệ
Định nghĩa: Phép tách lược đồ quan hệ α = (U, F) là phép thay thế nó bằng một tập các lược đồ conαi = (Ui, Fi), i=1,..,k với điều kiện
Ui≠ φ ∀i=1,..., k ,∪Ui= U, Fi= F/Ui
phép tách đó đượcký hiệu làδ={U1, U2,.., Uk}
Ký hiệu α = (U, F), δ ={U1, U2,.., Uk} là một phép tách khi đó R là một quan hệ trên U, ký hiệu
mδ(R)=R[U1] * R[U2] * ... * R[Uk]
Định nghĩa: Phép tách kết nối không mất thông tin (lossless-join decomposition)
Cho lược đồ quan hệ α= (U, F) và phép tách δ={U1, U2,.., Uk} đối với lược đồ đó. Phép táchδđượcgọi là phép tách kết nối không mất thông tin nếu mọi
KY YA YK A∉KY KY YA YK vì Y⊂K
quan hệ R trên U thì ta có mδ(R)= R, ngược lại nếu mδ(R)≠R thì ta nói phép táchδlà phép tách mất thông tin.
Bổ đề: Cho lược đồ quan hệ α =(U, F) và phép tách δ={U1, U2,.., Uk} đối với lược đồ đó, R là một quan hệ trên U, gọi Ri=R[Ui] thì:
a) R⊆mδ(R)
b) Nếu S=mδ(R) thì S[Ui]=Ri c) mδ(mδ(R)) =mδ(R)
Chứng minh:
a) lấy t∈R, đặt ti= t.Ui, khi đó ti= t.Ui∈R[Ui] suy ra ∈R[U1] * R[U2] * .. * R[Uk]
vậy t∈mδ(R) vậy R⊆ mδ(R)
b) theo ta có R⊆S, suy ra R[Ui]⊆S[Ui] hay Ri⊆S[Ui]. Cần chỉ ra rằng S[Ui]⊆Ri giả sử với một i mà ti ∈ S[Ui]. khi đó t= <t1, t2, .., tk> ∈S sao cho t[Ui]=ti . Cũng vì t∈S sao cho t[Ui]=vj cho nên có vj ∈ Ri sao cho t[Ui]=vj . trong trờng hợp này t[Ui] ∈ Ri. Nhng vì t[Ui]=ti và do đó S[Ui] ⊆Ri từ đó Ri=S[Ui]
c) nếu S=mδ(R) thì theo b) có S[Ui]=Ri. Do vậy : mδ(S)= k
1 i*
= Ri=mδ(R)
Bài toán: cho lược đồ quan hệ α = (U, F) và phép táchδ, hỏi rằng phép tách đó có mất thông tin hay không, hay với phép tách δ cần kiểm tra xem đẳng thức mδ(R)=R,∀R(U)
Thuật toán kiểm tra phép tách kết nối có mất thông tin hay không?
Input:
- Tập thuộc tính U - Tập phụ thuộc hàm F Phép táchδ={U1, U2,.., Uk}
Output:Xác định liệu phép táchδcó mất thông tin hay không.
Method:
b1) Giả sử U={A1, A2,.., An}, ta xây dựng một bảng gồm k+1 dòng n+1 cột (n=|U | , k=|δ | ), cột thứ i (i=1..n) của bảng ứng với thuộc tính Ai, hàng thứj (j=1..k) của bảng ứng với lược đồ conαj= (Uj, Fj), tại cột i (i=1..n) và hàng j (j=1..k) ta điền ký hiệu ai (ta gọi ký hiệu ai là tín hiệu chính) nếu thuộc tính Ai∈Ui , ngượclại ta điền bji (ta gọi bji là tín hiệu phụ).
b2) Biến đổi bảng nhưtheo quy tắc nhưsau:
Với mỗi phụ thuộc hàm XY ∈ F, nếu trong bảng có hai hàng giống nhau trên tập thuộc tính X thi ta cần làm chúng giống nhau trên tập thuộc tính Y theo quy tắc sau:
Nếu một trong hai giá trị là tín hiệu phụ thì ta sửa lại tính hiệu phụ thành tín hiệu chính tức là sửa bjithành ai.
Nếu cả hai là tín hiệu phụ thì ta sửa lại một trong hai tín hiệu đó bằng một trong các ký hiệu bji, tức là sửa lại chỉ số cho giống nhau.
Tiếp tục áp dụng các phụ thuộc hàm trong bảng (kể cả các phụ thuộc hàm đã đượcsử dụng) cho tới khi không còn áp dụng đượcnữa.
Quan sát trong bảng cuối cùng: nếu xuất hiện ít nhất một hàng gồm toàn tín hiệu chính (hàng gồm toàn ký hiệu a) thì phép tách δ có kết nối không mất thông tin, ngượclại thì phép táchδlà phép tách có kết nối mất thông tin.
Ví dụ:
Cho lược đồ quan hệα= (U, F) với U={A1, A2, A3, A4, A5}
F={ A1A2A3, A2A4A5, A2A3}
δ={ A1 A2A4, A2 A3, A1 A4A5}
Hỏi rằng phép táchδtrên có kết nối không mất thông tin không
Giải:
Xây dựng bảng gồm 3 dòng 5 cột: -Điền các tín hiệu vào bảng
A1 A2 A3 A4 A5
U1 a1 a2 b13 a4 b15
U2 b21 a2 a3 b24 b25
U3 a1 b32 b33 a4 a5
- Biến đổibảng trên dựa vào tập phụ thuộc hàm F + Sử dụng phụ thuộc hàm A1 A2 A3ta biến đổi bảng + Sử dụng phụ thuộc hàm A2 A4 A5 A1 A2 A3 A4 A5 U1 a1 a2 b13 a4 b15 U2 b21 a2 a3 b24 b25 U3 a1 a2 b13 a4 a5 A1 A2 A3 A4 A5 U1 a1 a2 b13 a4 a5 U2 b21 a2 a3 b24 b25 U3 a1 a2 b13 a4 a5
+ Sử dụng phụ thuộc hàm A2A3
Trong bảng này có hàng cuối cùng gồm toàn các tín hiệu chính, do vậy phép táchδlà phép tách kết nối không mất thôngtin.
Định lý : Cho lược đồ α = (U, F), phép tách δ ={U1, U2 } nếu U1 ∩ U2
U1 \ U2 (1) hoặc U1∩ U2 U2 \ U1 (2) thì phép táchδlà phép tách có kết nối không mất thông tin.
Chứng minh:
Giả sử U={A1, A2, .., An}, U1={A1, A2, .., Am}, U2={Ak, A2, .., An} và U1 ∩U2= {Ak, Ak+1, .., Am}
Ta lập bảng gồm 2 dòng n cột và điền vào các tín hiệu
A1 A2 ... Ak Ak+1 ... Am ... An-1 An
U1 a1 A1 ... ak ak+1 ... am ... b1n-1 b1n
U2 b21 b22 ... ak ak+1 ... am ... an-1 an
U1 \ U2 U1∩U2 U2 \ U2
Giả sử (2) là đúng, ta thấy hai dòng của bảng trên giống nhau trên miền U1∩
U2 = {Ak, Ak+1, .., Am}, nên chúng phải giống nhau trên miền U2 \ U1, trên miền U2 \ U1 của dòng một gồm toàn các tín hiệu phụ còn trên dòng hai của miền này gồm toàn các tín hiệu chính do vậy tất cả các tín hiệu phụ trên miền U2 \ U1 đều được thay bằng các tín hiệu chính tương ứng trên dòng thứ hai, sau khi thay thì toàn bộ dòng thứ nhất gồm toàn các tín hiệu chính , do vậy phép táchδlà phép tách có kết nối không mất thông tin.
Hệ quả: Cho lược đồ quan hệ α =(U, F), X, Y ⊆U, nếu XY∈F+ thì phép
δ={U1 , U2} với U1=XY, U2 =XZ trong đó Z=U\XY, thì phép táchδlà phép tách có kết nối không mất thông tin.
Thật vậy ta có U1 ∩U2= X , U1\ U2 =Y theo giả thiết thiết thì XY nên U1 ∩U2 U1\ U2theo định lý trên thì phép táchδlà phép tách có kết nối không mất thông tin.
Bổ đề: Mọi lược đồ quan hệ chỉ có hai thuộc tính đều ở dạng BCNF
A1 A2 A3 A4 A5
U1 a1 a2 a3 a4 a5
U2 b21 a2 a3 b24 b25
a) Cho lược đồ quan hệα=(U, F), gọi δ={U1,U2,…, Uk} là phép tách không mất thông tin của α đối với F. Gọi Fi là hình chiếu của F lên Ui ( i=1,n ) tức là Fi={XY | XY∈F+ và XY⊆Ui}
Gọi σ={Ui1, Ui2, …Uim} là phép tách không mất thông tin của lược đồcon
α= (Ui, Fi).Khi đó phép tách lợc đồα thành {U1, U2, …, Ui-1, Ui1, Ui2,.., Uim, Ui+1, .., Uk) đối với F là phép tách có kết nối không mất thông tin.
b) Giả thiếtαvàδnhưtrong phần a) gọi:
∂={U1, U2, .., Uk, Uk+1, …, Un} là một phép tách củaα thành tập các lược đồ con bao gồm cảδthì∂cũng là phép tách không mất thông tin đối với F.
16.2. Phép tách bảo toàn phụ thuộc hàm
Để một quan hệ có thể phục hồi từ các phân rã thì các phân rã phải bảo toàn dữ liệu. Hơn thế nữa một phép tách còn phải thoả mãn một đặc tính khác đó là bảo toàn phụ thuộc hàm. Những gìđặc tính này yêu cầu là các phân rã phải thoả mãn tất cả các phụ thuộc hàm vốn thoả trong quan hệ gốc.
Hình chiếu của một tập phụ thuộc hàm trên một tập thuộc tính
Cho lược đồ quan hệ α =(U, F), Z⊆U hình chiếu của tập F lên tập thuộc tính Z, ký hiệu là F/Z và nó được xác định nhưsau
F/Z={XY | XY ∈F+và XY⊆Z}
Định nghĩa này không yêu cầu XY phải thuộc về F nhưng phải thuộc về F+, Trong đó, X và Y phải là các tập con của Z.
Thuật toán tìm hình chiếu của một tập phụ thuộc hàm lên tập thuộc tính
Để tìm hình chiếu của F lên Z ta lấy các tập con thực sự X của Z, đóng vai trò là vế trái của các phụ thuộc hàm
1. Tính X+
2. Gán Y=(X+∩Z) \X
3. Khi đó XY là một phụ thuộc hàm trong F/Z
Bảo toàn phụthuộc hàm:
Cho lược đồ quan hệ α =(U, F), vàδ ={U1, U2, .., Un} là một phép tách của
α, gọi Fi là hình chiếu của F lên Ui, phép tách δ được gọi là phép tách bảo toàn phụ thuộc hàm F nếu như (n
1
Fi)+=F+
16.3. Tách không mất thông tin thành các lược đồ ở dạng BCNF
Cho lược đồ α = (U, F), và phép tách δ ={U1, U2,.., Uk}, phép tách một lược đồ thành một tập các lược đồ ở dạng BCNF là phép tách thoả mãn: Phép tách
δlà phép tách kết nối không mất thông tin.
Tất cả các lược đồ con αi= (Ui, Fi) đều ở dạng BCNF.
Xuất phát từ một phụ thuộc hàm X A nào đó của F, phụ thuộc hàm XA này vi phạm điều kiện BCNF, ta xây dựng phép tách δ ={U1, U2}, tương ứng với lược đồα1 vàα2sao cho:
Phép tách đó là phép tách kết nối không mất thông tin
Phụ thuộc hàm XA là phụ thuộc hàm của lược đồ α1 và nó thoả mãn điều kiện của BCNF trong lược đồ này
Nếu như các lược đồ α1 và α2 vẫn chưa ở dạng BCNF thì tiếp tục quá trình đó, vì các điều vi phạm BCNF đều bị loại bỏ, cuối cùng ta thu được một tập các lược đồ con đều ở dạng BCNF và quá trình tách luôn luôn đảm bảo phép tách kết nối không mất thông tin.
Cơ sở của thuật toán trên là do giả thiết lược đồ α = (U, F) chưa ở dạng BCNF do đó tồn tại phụ thuộc hàm XA, A∉X, X không phải là siêu khoá U1=XA, U2 =U \ A
Nhận xét:
X=U1∩ U2, U1 \ U2=A, đã có XA do đó U1 ∩ U2 U1 \ U2 theo định lý ở phần trên thì phép tách δ={U1 , U2} là phép tách có kết nối không mất thông tin. Vì U1 =XA và phụ thuộc hàm XA là duy nhất trên lược đồ α1 = (U1, F1) nên X là siêu khoá.
Nếu α1 , α2 chưa ở dạng BCNF thì ta áp dụng quá trình tách tương tự. Cuối cùng ta thu được một tập các lược đồ ở dạng BCNF và quá trình tách là không mất thông tin.
Ví dụ:
Cho lược đồα= (U, F) với
U=CRHTSG (C: Course, T: Teacher, H: Hour, R: Room, S: Student, G: Group)
F ={CT , HR C, CHR, CS G, HSR}
Nhận xét
-Lược đồ này có duy nhất một khoá là HS -Lược đồ này chưa ở dạng BCNF
- Ta thấy trong lược đồ α = (U, F) có phụ thuộc hàm CS G vi phạm điều kiện BCNF nên ta tách lược đồ thành các lượcU1 =CGS, U2=CTHRS
- Ta thấy trong lược đồ α2 = (U2, F2) có phụ thuộc hàm C T vi phạm điều kiện BCNF nên ta tách lược đồ thành các lượcU3 =CT, U4 =CHRS
- Ta thấy trong lược đồα4 = (U4, F4) có phụ thuộc hàm CHR vi phạm điều kiện BCNF nên ta tách lược đồ thành các lược đồU5 =CHR, U6=CHS
Nhưvậy phép tách cuối cùng làδ={ CSG, CT , CHR , CHS }
16.4.Tổng kết
Trong chương này chúng ta đã nóiđến các nguy hiểm có thể xảy ra trong việc thiết kế cơ sở dữ liệu, xác định một cách không hình thức một số chuẩn mực để chỉ ra một lược đồ quan hệ là “tốt” hay “tồi” và đưa ra một số nguyên tắc không hình thức cho một thiết kế tốt. Sau đó chúng ta đã trình bày một vài khái niệm cho phép ta thiết kế quan hệ theo cách trên-xuống bằng cách phân tích các quan hệ một cách riêng rẽ. Chúng ta đó định nghĩa quá trình thiết kế này bằng phân tích và tách bằng cách giới thiệu quá trình chuẩn hóa.
Những vấn đề về các bất thường cập nhật xảy ra khi có sự dư thừa xảy ra trong các quan hệ cũng đó được đề cập đến. Các chuẩn mực không hình thức của các lược đồ quan hệ tốt bao gồm ngữ nghĩa của thuộc tính rừ ràng và đơn giản, ít giá trị null trong các mở rộng của quan hệ. Một phép tách tốt phải tránh được việc sinh ra các bộ giả khi thực hiện phép nối.
Chúng ta đó định nghĩa khái niệm phụ thuộc hàm và thảo luận một số tính chất của nó. Các phụ thuộc hàm là các nguồn thông tin ngữ nghĩa cơ bản về các thuộc tính của lược đồ quan hệ. Chúng ta đã chỉ ra cách suy diễn các phụ thuộc phụ thêm dựa trên một tập các phụthuộc hàm cho trước và một tập các quy tắc suy diễn. Chúng ta đó định nghĩa các khái niệm bao đóng và phủ tối thiểu của một tập phụ thuộc hàm và cung cấp thuật toán tính phủ tối thiểu. Ta cũng đó chỉ ra làm thế nào để kiểm tra xem hai tập phụ thuộc hàm có tương đương nhau hay không.
α = (U, F) U1 =CSG F1={CSG} K=CS U2 =CTHRS F2={CT, HRC, CHR, HSR} K=HS U3 =CT F3={CT} K=C U4 =CHSR F4={ HRC, CHR, HSR} K=HS U5 =CHR F5={ HRC, HRC} K=HR, K=HC U6=CHS F6={ HSC} K=HS
Tiếp theo, chúng ta đã mô tả quá trình chuẩn hóa để đạt đến các thiết kế tốt bằng cách kiểm tra các quan hệ đối với các kiểu phụ thuộc hàm không mong muốn. Chúng ta đó cung cấp cách chuẩn hóa liên tiếp dựa trên khóa chính được định nghĩa trước trong mỗi quan hệ và sau đó giảm nhẹ đòi hỏi này và đưa ra các định nghĩa tổng quát của các dạng chuẩn có tính đến tất cả các khóa dự tuyển của một quan hệ.
Trong phần IV chúng ta đã trình bày nhiều thuật toán chuẩn hóa. Đó là thuật toán tổng hợp quan hệ tạo ra các quan hệ 3NF từ một lược đồ quan hệ vũ trụ dựa trên một tập các phụ thuộc hàm do người thiết kế cơ sở dữ liệu xác định. Các thuật toán tạo ra các quan hệ BCNF (hoặc 4NF) bằng cách tách không mất mát liên tiếp các quan hệ không chuẩn hóa thành hai quan hệ thành phần tại một thời điểm. Chúng ta đã thảo luận về hai tính chất quan trọng của phép tách: tính chất nối không mất mát (hoặc không phụ thêm) và tính chất bảo toàn phụ thuộc. Một thuật toán kiểm tra phép tách không mất mát và một thuật toán kiểm tra tính không mất mát của một phép tách thành hai quan hệ cũng đã được trình bày. Chúng ta cũng đó thấy rằng việc tổng hợp các quan hệ ở dạng 3NF đảm bảo cả hai tính chất trên là có khả năng còn việc tổng hợp các quan hệ BCNF chỉ có khả năng đảm bảo tính không mất mát, không thể đảm bảo tính bảo toàn phụ thuộc.
Bài 17: Thảo luận bài tập về chuẩn hóa
17.1. Chia nhóm
17.2. Giao việc cho các nhóm
17.3. Theo dõi và tư vấn cho các nhóm
17.4. Nghiệmthu kết quả các nhóm
Bài 19: Giới thiệu ngôn ngữ truy vấn cấu trúc (SQL)
19.1. SQL là chuẩn ngôn ngữ ANSI để truy cập CSDL.
19.1.1. SQL là gì?
SQL là viết tắt Structured Query Language- Ngôn ngữ truy vấn cấu trúc.
SQL cho phép bạn truy cập vào CSDL.
SQL là một chuẩn ngôn ngữ của ANSI.
SQL có thể thực thi các câu truy vấn trên CSDL.
SQL có thể lấy dữ liệu từ CSDL.
SQL có thể chèn dữ liệu mới vào CSDL.
SQL có thể xóa dữ liệu trong CSDL.
SQL có thể sửa đổi dữ liệu hiện có trong CSDL.
19.1.2. SQL là một chuẩn
SQL là một chuẩn của ANSI (American National Standards Institute - Viện tiêu chuẩn quốc gia Hoa kỳ) về truy xuất các hệ thống CSDL. Các câu lệnh SQL được sử dụng để truy xuất và cập nhật dữ liệu trong một CSDL.
SQL hoạt động với hầu hết các chương trình CSDL như MS Access, DB2, Informix, MS SQL Server, Oracle, Sybase v.v...
Lưuý: Hầu hết các chương trình CSDL hỗ trợ SQL đều có phần mở rộng cho SQL chỉ hoạt động với chính chương trìnhđó.
19.2. Bảng CSDL
Một CSDL thường bao gồm một hoặc nhiều bảng (table). Mỗi bảng được xác định thông qua một tên (ví dụCustomers hoặcOrders). Bảng chứa các mẩu
tin - dòng (record - row), là dữ liệu của bảng.
Dưới đây là một ví dụ về một bảng có tên là Persons(người):
LastName FirstName Address City
Hansen Ola Timoteivn 10 Sandnes
Svendson Tove Borgvn 23 Sandnes
Pettersen Kari Storgt 20 Stavanger
Bảng ở trên bao gồm 3 mẩu tin (dòng), mỗi mẩu tin tương ứng với một người, và bốn cột (LastName, FirstName, Address và City).
19.3. Ngôn ngữtruy vấncấu trúc (SQL)
Với SQL ta có thể truy vấn CSDL và nhận lấy kết quả trả về thông qua các câu truy vấn.
Một câu truy vấn như sau:
SELECTLastNameFROMPersons Sẽ trả về kết quả như sau:
LastName
Hansen Svendson Pettersen
Lưu ý: Một số hệ thống CSDL đòi hỏi câu lệnh SQL phải kết thúc bằng một