Phân mảnh ngang
Có 2 u cầu: - (1) Tính đầy đủ (Completeness)
- (2) Tính cực tiểu (Minimality)
Tính đầy đủ: Hai bộ bất kỳ trong một mảnh được phân ra từ các vị từ cơ sở phải có cùng khả năng truy
cập như nhau bởi bất kỳ ứng dụng nào. Nghĩa là nếu dùng ứng A truy vấn vào mảnh F thì hoặc là tất cả
các bộ đều thõa mãn ứng dụng A (các bộ đều được hiển thị) hoặc là tất cả đều khơng thõa mãn. Nếu
trong mảnh F có bộ thõa mãn ứng dụng A, có bộ khơng thõa mãn thì ta nói mảnh F khơng đảm bảo tính
đầy đủ hay tập vị từ đơn giản (simple predicates) sinh ra mảnh F khơng đảm bảo tính đầy đủ cần sửa
lại tập vị từ này. Định nghĩa này là đúng khơng cần băn khoăn.
VD:
Giả sử có một bảng (quan hệ) PROJ[PNO, PNAME, BUDGET, LOC]
Tập vị từ đơn giản Pr(loc = “HaNoi”, loc=”HCM”, loc = “DaNang”)
Và 2 ứng dụng: (1) Truy xuất PROJ theo vị trí LOC
(2) Truy xuất PROJ theo ngân sách của dự án, cụ thể là bé hơn 200000$
Ta thấy tập vị từ Pr chia bảng thành 3 mảnh (quan hệ con), mỗi quan hệ gồm các bộ thõa mãn
một vị trí (LOC) nào đó trong 3 vị trí trên.
Đối với ứng dụng (1) khi truy xuất bất kỳ một mảnh trong 3 mảnh thì hoặc là tất cả các bộ được
hiển thì hoặc là khơng bộ nào được hiển thị. thõa tính đầy đủ.
Đối với ứng dụng (2) khi truy xuất bất kỳ một mảnh trong 3 mảnh thì có thể có những bộ trong
mảnh thõa điều kiện <200000$, có những bộ khơng thõa khơng thõa tính đầy đủ.
Kết luận: tập vị từ đơn giản Pr trên khơng thõa tính đầy đủ.
Giả sử: thêm hai vị từ đơn giản nữa vào Pr là BUDGET<200000 và BUDGET>=200000, lúc này tập
vì từ sẽ là Pr’(loc=”HaNoi”, loc=”HCM”, loc=”DaNang”, BUDGET<200000, BUDGET>=200000)
Lúc này 3 mảnh trước đó, cứ mỗi mảnh lại được chia thành 2 mảnh nữa theo BUDGET<200000
và BUDGET>=200000 -> tổng cộng 6 mảnh được chia từ bảng ban đầu.
Đối với ứng dụng (1) khi truy khi truy xuất bất kỳ một mảnh trong 6 mảnh thì hoặc là tất cả các
bộ được hiển thì hoặc là khơng bộ nào được hiển thị. thõa tính đầy đủ.
Đối với ứng dụng (2) khi truy khi truy xuất bất kỳ một mảnh trong 6 mảnh thì hoặc là tất cả các
bộ được hiển thì hoặc là khơng bộ nào được hiển thị. thõa tính đầy đủ.
Kết luận: tập vị từ đơn giản Pr’ trên là thõa tính đầy đủ.
Tính cực tiểu: Nếu 1 mảnh f được chia thành 2 mảnh f1 và f2 thì nên có ít nhất một ứng dùng truy xuất
đến f1 và f2 theo 2 cách khác nhau. Nếu khơng thõa điều kiện này thì mảnh khơng nên được chia ra hay
ta nói tập vị từ đơn giản khơng thõa tính cực tiểu.
VD: Giả sử có một bảng (quan hệ) PROJ[PNO, PNAME, BUDGET, LOC]
Tập vị từ đơn giản Pr(loc = “HaNoi”, loc=”HCM”, loc = “DaNang”, BUDGET<200000,
BUDGET>=200000).
Và 2 ứng dụng: (1) Truy xuất PROJ theo vị trí LOC
(2) Truy xuất PROJ theo ngân sách của dự án, cụ thể là bé hơn 20000$
*Ta thấy tập vị từ Pr này đã thõa tính cực tiểu do ứng dụng (1) truy cập vào 6 bảng theo 3 cách
khác nhau. Ứng dụng (2) truy cập vào 6 bảng theo 2 cách khác nhau.
*Tuy nhiên, nếu thêm vị từ đơn giản này vào Pr: PNAME = “Instrumentation” thì tập vị từ mới sẽ
khơng thõa tính cực tiểu. Vì khi thêm vào PNAME = “Instrumentation” thì mỗi mảnh trong 6
mảnh lại được chia thành 2 mảnh theo PNAME = “Instrumentation” và PNAME !=
“Instrumentation” nhưng cả hai ứng dụng (1), (2) khi truy xuất 2 mảnh mới được tạo từ cùng 1
mảnh đều truy xuất theo cùng một cách đến 2 mảnh mới đó. Nghĩa là hoặc là cả hai mảnh mới
cùng thõa điều kiện của ứng dụng hoặc cả hai mảnh đều khơng thõa mãn điều kiện ứng dụng.
Ví dụ như truy cập hai mảnh mới theo ứng dụng là tìm các PROJ với điều kiện BUDGET<200000
thì cả hai mảnh mới này hoặc là đều thõa mãn hoặc là không. Điều này rõ ràng vì cả 2 được phân
ra từ một mảnh trước đó, mà mảnh này có các bộ có BUDGET<200000 hoặc BUDGET>=200000.
Phân mảnh ngang dẫn xuất
Phân mảnh ngang dẫn xuất được thực hiện bằng phép kết nối nửa. Phép kết nối nửa là phép kết nối sau
đó chiếu lên các cột của quan hệ bên trái.
Ví dụ phân mảnh dẫn xuất quan hệ EMP theo quan hệ PAY
EMP1 và EMP2 có được bằng phép chiếu lên EMP sau khi đã thực hiện phép kết nối. Khơng hiểu có thể
xem lại đại số quan hệ ở môn csdl.
Phân mảnh dọc
Ma trận sử dụng thuộc tính A:
- Use(qk, ai) = 1 nếu ứng dụng qk (hay câu truy vấn qk) sử dụng thuộc tính ai. Bằng 0 nếu ngược
lại.
- Ma trận này thể hiện mối quan hệ giữa các ứng dụng và thuộc tính.
Ma trận lực hút AA:
- Ma trận này được tính từ ma trận A cùng với 2 hàm ref() và acc(). Chi tiết xem slide.
- Ma trận này thể hiện lực hút giữa 2 thuộc tính Ai và Aj. Hai thuộc càng được sử dụng cùng
nhau nhiều lần trong các câu truy vấn thì aff(Ai, Aj) càng cao.
Ma trận lực hút tụ nhóm CA:
- Ma trận này được tính từ ma trận AA.
- Kết quả của ma trận là sự sắp xếp lại các hàng và cột của ma trận AA sao cho số đo lực hút
chung AM là lớn nhất.
- AM thể hiện rằng các thuộc tính hay được truy xuất cùng nhau trong các câu truy vấn thì nên
nằm cạnh nhau.
- Các thuộc tính hay đi cùng nhau (được truy xuất cùng nhau) nếu nằm cạnh nhau trong ma trận
CA thì AM sẽ càng lớn.
- Giải thích cách tính CA trong slide:
+) Đây là vị trí các thuộc tính khi chưa được sắp xếp.
i−1
+) AM’ = ∑ [bond ( ax , a x−1 ) + bond(a x , a x+1)]
x=1
+) AM’’ =
n
∑
x= j+1
[bond ( a x , ax−1 ) +bond (a x , ax +1)]
+) Ta tính giá trị AM khi chưa bỏ thêm thuộc tính mới để làm thay đổi vị trí các thuộc tính.
+) Ta tính giá trị AM new sau khi thêm thuộc tính mới Ak vào giữa Ai và Aj. (Lưu ý lúc này số
lượng thuộc tính tăng lên 1 do có thêm Ak).
+) Giờ ta lấy AM new trừ đi AM old. Hiệu số này càng lớn thì càng tốt do các thuộc tính hay đi
cùng nhau đã được đặt gần nhau.
+) Từ đây ta thấy cần chọn vị trí đặt Ak sao cho giá trị cont() này là lớn nhất.
+) Có 3 cách để đặt Ak vào Ai và Aj là:
+) Điều kiện biên:
*Nếu đặt Ak vào ngoài cùng bên trái Ai, cần thêm cột A0 vào trước Ak để tính cont(A0,
Ak, Ai). Lưu ý aff(A0, Ak) = 0 theo quy ước trong khi tính ma trận AA.
*Nếu đặt Ak vào ngoài cùng bên phải Aj, cần thêm cột An+1 vào sau Ak để tính cont(Aj,
Ak, An+1). Lưu ý aff(Ak, An+1) = 0 theo quy ước trong tính ma trận AA do An+1 là cột ảo,
khơng có trong quan hệ R tồn cục.
+) Thuật tốn BEA cho phép tạo ra ma trận lực hút tụ nhóm CA từ ma trận AA.
Input: ma trận lực hút thuộc tính AA
Output: ma trận lực hút tụ nhóm CA
Begin
{Khởi tạo}
CA(*, 1) ←AA(*, 1);//Khởi tạo cột 1 và 2 của CA
CA(*, 2) ←AA(*, 2);// là cột 1 và 2 của AA.
index ← 3;//index bắt đầu từ cột 3.
While index <= n do
For( i = 1; i<=index-1; i++)
Tính:
End for
-Tính điều kiện biên: cont(As, Aindex, An + 1). Trong đó As là thuộc tính của cột thứ
index – 1 (tức cột tận cùng bên phải của CA).
- Từ các cont tính được (gồm cả cont trong vịng lặp for và cont điều kiện biên),
chọn ra cont có giá trị lớn nhất. Khi đó đặt cột index trong AA vào CA ở vị trí
tương ứng với giá trị cont max.
index ← index + 1;
end while
Kết thúc vòng lặp while thì sắp xếp lại các hàng theo thứ tự các cột.
End
+) Ví dụ về tính ma trận CA theo thuật toán BEA.
Hình trên là ma trận AA, đầu vào của thuật toán BEA.
*Đầu tiên là khởi tạo
* Đặt index = 3;
Tính cont(A2, A3, A4). A4 ở đây là An+1 chứ không phải A4 của quan hệ R.
Cont(A2, A3, A4) = 2bond(A2, A3) + 2bond(A3, A4) – 2bond(A2, A4)
= 2bond(A2, A3) + 2bond(A3, An+1) – 2bond(A2, An+1)
4
Bond(A2, A3) = ∑ aff ( Az , A 2 )∗aff ( Az , A 3)
z=1
= aff(A1, A2)*aff(A1, A3)+
aff(A2, A2)*aff(A2, A3)+
aff(A3, A2)*aff(A3, A3)+
aff(A4, A2)*aff(A4, A3)
= 0*45 + 80*5 + 5*53 + 75*3 = 890
Bond(A3, An+1) = aff(A1, A3)*aff(A1, An+1)+
aff(A2, A3)*aff(A2, An+1)+
aff(A3, A3)*aff(A3, An+1)+
aff(A4, A3)*aff(A4, An+1) = 45*0 + 5*0 + 53*0 + 3*0 = 0
bond(A2, An+1) = aff(A1, A2)*aff(A1, An+1)+
aff(A2, A2)*aff(A2, An+1)+
aff(A3, A2)*aff(A3, An+1)+
aff(A4, A2)*aff(A4, An+1) = 0*0 + 80*0 + 5*0 + 75*0 = 0
cont(A2, A3, A4) = 2*890 + 2*0 – 2*0 = 1780
Từ 3 vị trí của A3, ta thấy vị trí (A1, A3, A2) có cont() = 10150 là lớn nhất ta sẽ đặt A3
ở vị trí này. Cách làm tương tự với cột A4 của ma trận AA.
Từ lần sau khi tính thì bond(Ax, An+1) = 0 với mọi x.
Để xem cách làm đầy đủ có thể xem bài cô làm đã chụp trong điện thoại.
cô bảo BEA chắc chắn có trong đề thi, học thuật tốn này thật kỹ. Học tất cả phân mảnh
dọc cho chắc ăn.
Về bài đơn giản hóa câu truy vấn
- Khi rút gọn mềnh đề sau where đầu tiên phải chuyển thành dạng chuẩn hội hoặc dạng
chuẩn tuyển như dưới đây. Sau đó mới tiến hành rút gọn.
- Sử dụng 10 luật sau để rút gọn.
Một ví dụ rút gọn truy vấn.
Một số luật khác có thể áp dụng để rút gọn câu truy vấn.