TU 2.7.1 Tách lƣợc đồ module thời gian về dạng T3NF: UT

Một phần của tài liệu Cơ sở dữ liệu thời gian (Trang 89 - 96)

(subtype), sự phân hoạch của một kiểu, và hợp của các kiểu con trong một phân hoạch.

Một kiểu con của kiểu µ qua trực giác là một kiểu mà có duy nhất một tập con các thời khắc của µ. Ví dụ: ngày Chủ nhật có dụng ý chỉ một tập của các thời khắc tƣơng ứng với các ngày là ngày chủ nhật, thì chu_nhat đƣợc xem là một kiểu con của kiểu ngay.

Định nghĩa: Ta nói rằng một kiểu µB1B là một kiểu con của kiểu µ nếu với mỗi số nguyên dƣơng i, µB1B(i) = µ(j) với j nguyên dƣơng nào đó.

Qua trực giác, một phân hoạch của kiểu µ là một tập của các tập con rời nhau mà tập của mọi thời khắc của nó là tập các thời khắc của µ. Xét ví dụ trên thì tập của bảy kiểu {thu_hai, thu_ba,....,chu_nhat} là một phân hoạch của kiểu ngay.

Định nghĩa: Ta nói rằng một tập các kiểu {µB1B ,...,µBnB} là một phân hoạch của kiểu µ

- mỗi µBiB với 1≤ in là một kiểu con của µ; và

- với mỗi số nguyên dƣơng l, µ(l) = µBkB (j) với 1 ≤ kn; j là số nguyên dƣơng. Thêm vào đó µBkB(j) ≠ µBiB (r) với i ≠ k;j, r là hai số nguyên dƣơng.

Chúng ta cũng có thể thực hiện phép hợp hai kiểu con có cùng kiểu để tạo ra một kiểu mới. Ví dụ, thu_bay⋃chu_nhat là kiểu mà mỗi thời khắc của chúng tƣơng ứng với các ngày chỉ là ngày Thứ 7 và CN. Nó có thể rất hữu dụng nếu ta muốn lƣu trữ thông tin chỉ liên quan đến hai ngày đó, nhƣng vẫn có khả năng liên kết thông tin này với các thông tin khác xảy ra với những ngày khác.

Định nghĩa: Cho trƣớc các kiểu µB1B và µB2B mà cả hai đều là kiểu con của µ, ta định nghĩa hợp của chúng là µB1B  µB2B mà với mỗi thời khắc thuộc µB1B  µB2B tồn tại một thời khắc thuộc µB1B hoặc thuộc µB2B mà bằng chính thời khắc đó và ngƣợc lại với mỗi thời khắc thuộc µB1B và thuộc µB2B thì tồn tại mội thời khắc thuộc µB1B  µB2B mà bằng chính thời khắc đó. [6]

Nghĩa là, với mọi i: (µB1BµB2B )(i) = µB1B( jB1B) hoặc (µB1BµB2B )(i) = µB2B( jB2B) với một jB1B và jB2B nào đó; và với mọi jB1B và jB2B : µB1B( jB1B) = (µB1B  µB2B )(iB1B) và µB2B( jB2B) = (µB1B  µB2B )(iB2B) với một iB1 Bvà iB2B nào đó.

Chú ý rằng hợp của hai kiểu con của  vẫn là một kiểu con của  và tập có đƣợc bởi thực hiện một phân hoạch của  và thay thế hai kiểu con bằng hợp của chúng vẫn là một phân hoạch của .

Trong lý thuyết về CSDL truyền thống: một phủ tối tiểu của tập F các FDs là một tập FBcB các FDs mà nó tƣơng đƣơng với F và thỏa mãn các điều kiện sau: (i) vế phải của mỗi phụ thuộc hàm thuộc FBcB chỉ là một thuộc tính đơn; (ii) không có

XA thuộc FBcB nào mà FBcB-{XA} là tƣơng đƣơng với F; (iii) không có XA

thuộc FBc Bvà một tập con thực sự Z của X nào mà (F-{XA}) ⋃ {ZA} là tƣơng đƣơng với F.

Tƣơng tự nhƣ dạng chuẩn ba (3NF) truyền thống, ta sử dụng phủ tối tiểu thời gian cho thuật toán tách T3NF.

Định nghĩa(Phủ tốitiểuthời gian): [6]

Cho F là tập các TFDs và NTC(F) là phủ tối tiểu không có yếu tố thời gian truyền thống của πBØB (F). Ta nói rằng G là một phủ tối tiểu (thời gian) của F nếu:

G = {X →BµBA | (A, µ) ∈X} và XA ∈NTC(F)}.

Ví dụ: Xét các kiểu thời gian và TFDs đã cho trong Ví dụ 3. Rõ ràng là NTC(F) = πBØB (F) = {AB, BA}. Theo định nghĩa, phủ tối tiểu của F sẽ là: {A →wBrBB, B →BthangBA}.

Định lý 6: Thuật toán trong hình 2.7 luôn kết thúc và cho ta một phép tách T3NF

không mất thông tin của một lược đồ module thời gian đầu vào và phép tách đó là

bảo toàn các phụ thuộc. [6]

Chúng ta sẽ minh hoạ thuật toán tách T3NF bằng cách tiếp tục ví dụ vừa nêu trƣớc định lý 6. Giả sử (AB, ngay) là một lƣợc đồ module thời gian. Phủ tối tiểu của F chính là F. Do đó πBØB (Min-Cov(F)) = {AB, BA}. Với bƣớc 1, ta sử dụng hai kiểu thang và wBrB để phân hoạch kiểu thời gian ngay. Ở đây ngay là đã đƣợc phân hoạch thành hai kiểu: dBpB và dBrB, (nghĩa là dBpB là các ngày trƣớc ngày 04- 07-1994 và dBrB là ngày 04-07-1994 và các ngày sau đó). Nên FdpBB = {B →BthangB A} và

FdBrB = F. Bây giờ với AB BA thuộc πBØB (Min-Cov(F)) ta xây dựng lƣợc đồ module tƣơng ứng (AB, Raise(dBrB, FBABB)) và (AB, Raise(dBp B dBrB, FBBAB)). Chú ý rằng Raise(dBrB, FBABB) = wBr Bvà Raise(dBp BdBrB, FBBAB)) = thang.

Ta đã xây dựng đƣợc hai lƣợc đồ (AB, wBrB) và (AB, thang). Tƣơng tự bƣớc cuối cùng ta xây dựng (B, dBrB) và (B, dBpB), chúng có thể đƣợc tổ hợp lại thành một lƣợc đồ (B, ngay). Tóm lại phép tách T3NF của (AB, ngay) là (B, ngay), (AB,

wBrB) và (AB, thang). Ba lƣợc đồ mới này là ở dạng T3NF, phép tách là không mất thông tin và bảo toàn các phụ thuộc.

Tƣơng tự nhƣ thuật toán tách TBCNF, trong nhiều trƣờng hợp thuật toán T3NF có dạng đơn giản hơn rất nhiều. Thông thƣờng, nếu µ (là kiểu đầu vào cho trƣớc) là mịn hơn mỗi kiểu của các TFDs trong phủ tối tiểu thời gian, thì khi đó bƣớc 1 chỉ bao gồm tính phủ tối tiểu thời gian và không cần phân hoạch. Với cùng điều kiện đó thì Bƣớc 2 sẽ trở thành:

 Cho  = . Với mỗi XA trong πBB(MinCov(F)) thêm:

(XA, Raise(, X →Bi B A | X →Bi B A MinCov(F))) vào .

Rõ ràng là nếu kiểu đầu vào là ngay thì các kiểu của TFDs thuộc phủ tối tiểu là trong số {ngay, tuan, thang, nam}, khi đó điều kiện đơn giản hoá ở trên là thoả mãn.

THUẬT TOÁN TÁCH LƢỢC ĐỒ VỀ DẠNG CHUẨN T3NF [6] INPUT:

Một lƣợc đồ module thời gian (R, ), với một tập F các TFDs OUTPUT:

Một phép tách không mất thông tin  ={(RB1B, B1B),....,(RBnB, BnB)} mà mỗi lƣợc đồ (RBiB, BiB) đều ở dạng T3NF.

METHOD:

1. Cho MinCov(F) là một phủ tối tiểu của F. Từ tập của mọi kiểu {B1B,...,BtB} xuất hiện trong các TFDs của MinCov(F), tìm phân hoạch P = {B1B,...,BmB} bằng cách sau:

Khởi đầu với PP

(0)

P = {}, với mỗi vBiB trong các TFDs mà 1 i l, tính PP

(i)

P bằng cách thay thế mỗi Bk Bthuộc PP

(i-1)

P với Bk1B, Bk2B, trong đó Bk1B là có đƣợc từ BkB bằng cách loại bỏ mọi thời khắc không rỗng chứa trong vBiB và Bk2B là kiểu bù (tức là kiểu chỉ có những thời khắc đó). P = PP

(l)

P sẽ là phân hoạch cần tìm. Với mỗi thời khắc không rỗng j thuộc , có một và chỉ một kiểu BkBtrong PP

(l)

P

với một thời khắc s phủ nó. Thêm vào đó (j) = BkB(s). Với mỗi BkB trong P định nghĩa tập:

  |  

X A X A

F

k  

Mincov(F) và i, j,BkB(j) ≠  B^BBkB(j) (i)}.

Chú ý:Các tập này là dễ dàng tìm đượcbằng cách kết hợp vào Bk2Bcác TFDs với kiểu vBi Btại mỗi bước của quá trình tính toán .

2. Cho  = . Với mỗi XA trong πBB(Mincov(F)), cho trƣớc:

 {BrB,...,BsB} = {BkBP | BiB sao cho X →Bi B A FBkB} và

FBX→AB = {X →Bi B A | BkBP sao cho X →Bi B A FBkB}, thêm (XA, Raise(BrB⋃...⋃BsB, FBX→AB)) vào .

3. Với mỗi Bk Btrong P thêm (Z, BkB) vào , trong đó Z là một khóa dự tuyển thời gian của (R, BkB), nếu không có (V, BkB) trong , với Z  V và BkB là một kiểu con của BrB. 4. Nếu (X, ) và (Y, ) với X  Y đều trong , loại bỏ (X, ) khỏi . Thêm vào đó,

nếu (X, B1B) và (X, B2B) đều trong  và B1B và B2Bđều là những kiểu con của một kiểu thời gian, loại bỏ (X, B1B) và (X, B2B) nhƣng thêm vào (X, B1B⋃B2B).

Bƣớc cuối cùng này có thể đƣợc lặp lại cho đến khi không có sự thay đổi nào có thể thực hiện đƣợc.

Hình 2.7

Ví dụ 8: Trong ví dụ này ta sẽ thực hiện áp dụng thuật toán tách trên lƣợc đồ module thời gian (KHOA_HOC, ngay). Ta giả sử rằng các TFDs (1) – (4) mô tả trong Ví dụ 7 là vẫn đúng. Tuy nhiên, do phép tách có đƣợc bằng cách áp dụng

thuật toán TBCNF trong ví dụ đó là bảo toàn các phụ thuộc, chúng ta sẽ sửa đổi giả thiết trên quan hệ KHOA_HOC một chút để chỉ ra khi nào phải sử dụng thuật toán T3NF. Giả sử rằng ràng buộc “tiền trả cho một giảng viên là không thay đổi trong một tháng” (nghĩa là TFD: GIANG_VIEN thangLUONG_GV) đƣợc ban quản trị trung tâm trƣờng đại học quyết định.

Những giảng viên của khoá học độc lập quyết định việc trả cho các trợ giảng hàng tuần. Điều đó dẫn đến cần phải thêm TFD dƣới đây vào ràng buộc “lƣơng trả cho trợ giảng là không thay đổi trong một tuần”:

(5)GIANG_VIEN BtuanB LUONG_GV.

Sự xuất hiện của TFD này sẽ không làm thay đổi phép tách kết quả khi áp dụng thuật toán TBCNF, vì có thể có cũng sự chọn lựa trình tự trong sự định giá của TFDs. Thực vậy, mọi lƣợc đồ trong P

(3)

P là ở dạng TBCNF đối với tập các TFDs mới; tuy nhiên P

(3) không bảo toàn mọi TFDs.

Nếu chúng ta muốn bảo toàn đƣợc các phụ thuộc, ta sẽ phải sử dụng thuật toán tách T3NF. Ta sẽ thực hiện lần lƣợt từng bƣớc nhƣ sau:

Bước 1: Ta tìm phủ tối tiểu MinCov(F) trong đó F là tập các TFDs (1)-(4) và (5). Trong trƣờng hợp này, ta có MinCov(F) = F. Ta không phải thực hiện phân hoạch trong bƣớc này vì kiểu của module (ngay) là mịn hơn bất kỳ kiểu nào trong phủ tối tiểu. Tức là P = {ngay} và FBngayBgồm cả 5 TFDs từ (1) đến (5).

Bƣớc 2: Có thể áp dụng lập luận tƣơng tự cho Bƣớc 2 trong thuật toán tách với phiên bản đơn giản hơn của nó đã đƣợc trình bày ở trên. Trong trƣờng hợp này, tập πBØB(MinCov(F)) đơn giản bao gồm 4 phụ thuộc hàm có đƣợc sau khi loại bỏ kiểu từ 5 TFDs trong F. Xét các phụ thuộc hàm tƣơng ứng với TFDs (1), (2) và (4), ta thêm vào  rỗng các lƣợc đồ sau:

(#KHOA_HOC,GIANG_VIEN,tuan) và (#KHOA_HOC,#SO_HOC_VIEN, ngay).

Thực vậy với những phụ thuộc hàm này, hàm Raise() -là hàm xác định kiểu của mỗi lƣợc đồ mới- có đối là kiểu ngay và một TFD có kiểu của nó là thô hơn (hoặc bằng) ngay. Kết quả của hàm Raise trong trƣờng hợp này luôn là kiểu thô hơn. Phụ thuộc hàm còn lại GIANG_VIEN  LUONG_GV, là đáng chú ý nhiều vì nó xác định phần thêm vào  một lƣợc đồ với một kiểu mới: (GIANG_VIEN, LUONG_GV,

Raise(µ, F’)), trong đó F‟ gồm các TFDs (3) và (5) có các kiểu tƣơng ứng là thang và tuan. Kiểu mới này là kiểu thô nhất mà ta có thể sử dụng nếu ta muốn bảo toàn các phụ thuộc. Sự biểu diễn bằng đồ thị đƣợc minh hoạ ở Hình 2.6. Vì Bƣớc 3 và 4 của thuật toán không làm thay đổi gì, bốn lƣợc đồ trong  là kết quả của phép tách T3NF.

CHƢƠNG 3: NGÔN NGỮ TRUY VẤN TSQL2

3.1- GIỚI THIỆU

Một phần của tài liệu Cơ sở dữ liệu thời gian (Trang 89 - 96)

Tải bản đầy đủ (PDF)

(120 trang)