Dạng chuẩn Boyce Codd theo thời gian (TBCNF) Định nghĩa 2.25 (TBCNF)

Một phần của tài liệu nghiên cứu các phụ thuộc hàm theo thời gian, thông qua hai quan điểm của wang và wijsen (Trang 49 - 58)

- Nếu F├f X →tY thì t là cận dưới lớn nhất (glb) của một số các kiểu thờ

2.4.1.Dạng chuẩn Boyce Codd theo thời gian (TBCNF) Định nghĩa 2.25 (TBCNF)

i Y Áp dụng T4, ta có: F├ X →tY Định lý được chứng mnh □

2.4.1.Dạng chuẩn Boyce Codd theo thời gian (TBCNF) Định nghĩa 2.25 (TBCNF)

Định nghĩa 2.25. (TBCNF)

Cho lược đồ môđun thời gian (R, t) với tập các phụ thuộc hàm theo thời gian F. Khi đó, (R, t) được gọi là thoả TBCNF nếu: với mỗi X →t’Y ∈ F+ mà XY ⊆ R; Y ∉ X và ít nhất một thời điểm của t được phủ bởi thời điểm của t’ thì:

1). X là siêu khóa của (R, t) và,

2). Nếu mọi thời điểm i1 ≠ i2 của t khác rỗng, thì X → Y ∉ πt(i1,i2) (F).

Hay nói cách khác: khơng tồn tại hai thời điểm khác nhau của t chứa trong cùng

một thời điểm của t’.

Nhận xét:

+ Điều kiện (1) tương tự như điều kiện của BCNF truyền thống.

+ Điều kiện (2) khơng cho phép có dư thừa do các TFD gây nên. Nếu tồn tại một TFD với kiểu thời gian t’ sao cho hai thời điểm khác nhau của kiểu thời gian t (là kiểu thời gian của môđun) chứa trong cùng một thời điểm của t’ thì

xuất hiện dư thừa dữ liệu vì trong trường hợp này, nếu có hai bộ riêng biệt trên hai thời điểm thì một trong hai bộ đó là dư thừa.

Ví dụ 2.23. Xét lược đồ môđun thời gian (R, Giây), với R = (ABCD) và

F = {A →NgàyD}. Hỏi (R, Giây) thoả TBCNF không ?

Vì A+

F = {(A, tTop); (D, Ngày)}. Vậy A ↛Giây R, do đó A khơng là siêu

khóa của R. Vậy (R, Giây) khơng thoả TBCNF.

Trong ví dụ 2.23, rõ ràng (R, Giây) làm cho (R, Giây, φ) dư thừa dữ liệu do tồn tại A →NgàyD. Để tránh được điều này, ta có thể thực hiện việc phân tách

(R, Giây) thành hai lược đồ môđun thời gian riêng biệt thoả TBCNF mà vẫn bảo tồn được thơng tin.

Định nghĩa 2.26. (Phân tách)

Một phân tách của lược đồ mô đun thời gian (R, t) là tập các lược đồ môđun thời gian ρ = {(R1, t1), ..., (Rk, tk)} sao cho:

i. Ri ⊆ R, với i = 1,k ii. R = k i i R 1 =

iii. Với mỗi ti khơng có thời điểm nào của t phủ lên một thời điểm của

ti, tức là với ∀l, j: t(l) ∩ ti(j) = ∅ hoặc t(l) ⊆ ti(j).

Nhận xét:

Điều kiện (i) và (ii) tương tự như các điều kiện của định nghĩa phân tách truyền thống.

Với điều kiện (iii), mỗi thời điểm của nó giao nhau với một thời điểm của kiểu thời gian gốc, hay kiểu thời gian trong phân tách lớn hơn kiểu thời gian gốc. Điều kiện này được đưa ra nhằm giảm dư thừa dữ liệu, vì nếu một thời điểm nào

đó của kiểu thời gian gốc chứa hai hay nhiều thời điểm của một kiểu thời gian trong phân tách thì một vài giá trị của các thuộc tính sẽ bị lặp lại trong cả hai thời điểm của kiểu thời gian mới.

Định nghĩa 2.27. (Tách bảo tồn thơng tin)

Cho lược đồ môđun thời gian (R, t) và tập phụ thuộc hàm theo thời gian F. Khi đó, một phân tách ρ của (R, t) đối với F được gọi là bảo tồn thơng tin nếu

tồn tại các tập con ρ1, ..., ρm của ρ sao cho với mỗi môđun thời gian M trên (R, t)

thoả tất cả các TFD trong F thì ta có:

M = Join(ρ1) ∪T ... ∪T Join(ρ2) (adsbygoogle = window.adsbygoogle || []).push({});

Với: Join(ρi) = Down(Up(πR

i 1(M), t1i), t) ⋈T ... ⋈TDown(Up(πR i k(M), tik), t) với ρi = {(Ri 1, ti 1), ...,(Ri k, ti k)}

Ví dụ 2.24. Cho lược đồ mơđun thời gian (R, Ngày). Giả sử ta phân tách lược đồ

đó thành hai lược đồ (R, t1) và (R, t2), trong đó t1 là những ngày Thứ bảy và Chủ nhật, t2 là những ngày từ Thứ hai đến Thứ sáu.

Cho M = (R, Ngày, φ) + Với ρ1 = {(R, t1)} ta có:

Join(ρ1) = Down(Up(πR(M), t1), Ngày) = (R, Ngày, φ1); φ1(i) = φ(i), với i là các ngày Thứ bảy, Chủ nhật và φ1(i) = ∅ đối với các ngày còn lại.

+ Với ρ2 = {(R, t2)} ta có:

Join(ρ2) = Down(Up(πR(M), t2), Ngày) = (R, Ngày, φ2); φ2(i) = φ(i), với i

là các ngày từ Thứ hai đến Thứ sáu và φ2(i) = ∅ đối với các ngày còn lại.

Như vậy, M = M1 ∪T M2 = (R, Ngày, φ), với φ(i) = φ1(i) ∪ φ2(i). Vậy phép

Trong định nghĩa 2.27, nếu khi m = 1 thì điều kiện cho một phân tách bảo tồn thơng tin là M = Join(ρ). Phép tốn Join gồm một phép nối giữa các mơđun được phân tách theo ρ, nghĩa là các môđun được tạo ra từ Up(πT

Rj(M), ti), với (Rj, tj) là lược đồ tương ứng trong ρ.

Tuy nhiên, phép nối tự nhiên theo thời gian (⋈T) đòi hỏi các mơđun phải

có cùng kiểu và kết quả của phép nối sẽ là một mơđun với kiểu t, vì ta phải kiểm

tra xem có bằng với mơđun gốc hay khơng.

Việc chuyển mỗi môđun thời gian sang kiểu t trước khi thực hiện nối là điều cần thiết. Theo định nghĩa phân tách, rõ ràng phép Down là phép toán dự bị cho mục đích này, phép Down và Up có thể dẫn đến các giá trị khơng có trong mơđun gốc.

Ví dụ 2.25. Cho M = (KHỐHỌC, Ngày,φ )

Với ρ1 = {(KH1, tT)}, KH1 = (Mã KH, Số ĐVHT)

ρ2 = {(KH2, Tháng)}, KH2 = (Họ tên GVGD, Lương )

ρ3 = {(KH3, Tuần)}, KH3 = (Mã KH, Họ tên GVGD)

ρ4 = {(KH4, Ngày)}, KH4 = (Mã KH, Số HV)

Khi đó:

Join(ρ1) = Down(Up(πKH1(KHỐHỌC), tT), Ngày)

Join(ρ2) = Down(Up(πKH2(KHOÁHỌC), Tháng), Ngày)

Join(ρ3) = Down(Up(πKH3(KHOÁHỌC), Tuần), Ngày)

Join(ρ4) = Down(Up(πKH4(KHỐHỌC), Ngày), Ngày)

Ta có thể nhận thấy rằng phép Down trên mỗi phép biến đổi bằng với các môđun KH1, KH2, KH3 và KH4. Phép biến đổi cuối khơng làm thay đổi mơđun

KH4 vì Down và Up khơng hiệu quả đối với KHỐHỌC khi các kiểu thời gian đều ở dưới dạng Ngày. Do đó, ta thực hiện nối Down(KH1, Ngày),

Down(KH2, Ngày), Down(KH3, Ngày) với KH4 để được quan hệ KHỐHỌC.

Trước khi trình bày thuật tốn phân tách lược đồ mơđun thời gian thành các lược đồ con thoả TBCNF, chúng ta sẽ tìm hiểu hai phép tốn sau: (adsbygoogle = window.adsbygoogle || []).push({});

Phép che lấp (collapse): Cho một kiểu thời gian t và một số nguyên dương i. Khi

đó, phép che lấp của t, ký hiệu tc được tạo ra bằng cách nối thời điểm i và i+1 lại thành một thời điểm và giữ lại tất cả các thời điểm khác của t. Với mọi j ≥ 1, kiểu tc được xác định như sau:

t(j) với 1 ≤ j ≤ i - 1

t(i, i + 1) với j = i

t(j + 1) với j > i

Phép lược bỏ (Prune): Cho một kiểu thời gian t và một số nguyên dương i. Khi

đó, phép lược bỏ của t, ký hiệu tp được tạo ra bằng cách bỏ đi thời điểm i của t và giữ lại tất cả các thời điểm khác của t. Với j ≥ 1, kiểu tp được xác định như sau:

t(j) với 1 ≤ j ≤ i -1

t(j + 1) với j ≥ i

Ta có thể nhận thấy rằng, nếu lược đồ (Ri, ti) không thuộc dạng TBCNF đối với πRi(F) thì tồn tại một TFD trong πRi(F) sao cho một trong hai điều kiện của định nghĩa TBCNF bị vi phạm. Vì thế thuật tốn phân tách địi hỏi bước 2 ln được thực hiện. Sau đây là một thuật tốn cho phép tách một lược đồ môđun thời gian thành các lược đồ con thoả TBCNF mà không mất thơng tin.

tc =

Thuật tốn 2.4. (Thuật tốn tách một lược đồ mơđun thời gian thành các lược

đồ con thoả TBCNF bảo tồn thơng tin)

Vào: + Lược đồ môđun thời gian (R, t).

+ Tập các phụ thuộc hàm theo thời gian F.

Ra: ρ = {(R1, t1), ..., (Rk, tk)} bảo tồn thơng tin và (Ri, ti) ∈ TBCNF, i=1,k

Phương pháp:

+ Bước 1. ρ(0) = {(R, t)}

+ Bước 2. Giả sử ρ(j) là tập cuối cùng ta tính được. Nếu có ít nhất một lược đồ

con trong ρ(j ) khơng phải là TBCNF thì ta sẽ tính ρ(j + 1) như sau:

Với (Ri, ti) ∉ TBCNF và TFD X →t’A ∈ πRi(F) của lược đồ này vi phạm các điều kiện của TBCNF thì:

ρ(j + 1) = (ρ(j) \ {(Ri, ti)}) ∪ {(Ri, t'

1); (Ri - A, t' 2); (XA, t' 3)}, với t' 1, t' 2, t'

3 là các kiểu thời gian mới được xác định như sau:

t'

1 có được từ ti bằng cách áp dụng phép toán lược bỏ theo cách đệ quy để bỏ bớt tất cả các thời điểm khác rỗng của ti chứa trong các thời điểm của t’. Nếu t'

1 dẫn đến một kiểu rỗng thì lược đồ tương ứng (Ri, t'

1) sẽ không được thêm vào trong ρ(j + 1).

t'

2 là phần bù của t' (adsbygoogle = window.adsbygoogle || []).push({});

1, nghĩa là các thời điểm của nó là tất cả các thời điểm của ti chứa trong các thời điểm của t’.

t'

3 có được từ t'

2 bằng cách áp dụng phép toán che lấp theo cách đệ quy để nối mỗi cặp thời điểm của t'

điểm khác rỗng của t'

3 là sự kết nối của một hay nhiều thời điểm của t'

2. Ngoài ra, khơng có hai thời điểm nào của t'

3 được chứa trong một thời điểm của t’.

Bước 2 được lặp lại cho đến khi mỗi lược đồ trong ρ(j) đều thuộc TBCNF. Thuật tốn trả về phân tách ρ(j).

Ví dụ 2.26. Cho (R, Giây) với R = (ABCD) và F = {A →NgàyD}

Theo ví dụ 2.23, rõ ràng (R, Giây) khơng thoả TBCNF nên áp dụng thuật tốn 2.4, ta có:

Với (R, Giây) ∉ TBCNF và với TFD A →NgàyD ∈ πR(F):

Vì TFD A →NgàyD vi phạm điều kiện của TBCNF nên ta tách (R, Giây)

thành hai lược đồ con là (R1, Giây) với R1 = ABC và (R2, Ngày) với R2 = AD. Vậy ta có phép tách ρ = {(R1, Giây); (R2, Ngày)}

Định lý 2.3. (Điều kiện cần để 1 phân tách thành hai lược đồ con bảo tồn thơng

tin)

Cho F là tập các TFD. Khi đó, phân tách (R1, t) và (R2, t’) của (R1 ∪ R2, t) với t ≼ t’ là bảo tồn thơng tin đối với F nếu với mọi i1, i2, t(i1, i2) ⊆ t’(j) với j nào đó suy ra R1 ∩ R2 → R2 ∈ πt(i1,i2)(F)

Ví dụ 2.27. Theo ví dụ 2.26, từ lược đồ môđun thời gian (R, Giây) với

R = (ABCD) và F = {A →NgàyD}, sau khi được tách thành hai lược đồ con là

(R1, Giây) với R1 = (ABC) và (R2, Ngày) với R2 = (AD).

Vì R1 ∩ R2 → R2 ∈ πGiây(F) hay ABC ∩ AD → AD ∈ {A → D} nên theo định lý 2.3, phép tách trên là bảo tồn thơng tin.

Ví dụ 2.28. Cho lược đồ mơđun thời gian (KHỐHỌC, Ngày), với:

F = { Mã KH →tTopSố ĐVHT Mã KH →TuầnHọ tên GVGD

Họ tên GVGD →ThángLương Mã KH →NgàySố HV }

Để thuận lợi cho việc theo dõi, giả sử ta ký hiệu A: Mã KH, B: Số ĐVHT; C: Họ tên GVGD; D: Lương và E: Số HV. Khi đó ta có:

+ Lược đồ mơđun thời gian (KHỐHỌC, Ngày) với: KHOÁHỌC = ABCDE và

F = {A →tTopB; A →TuầnC; C ThángD; A NgàyE}

Áp dụng thuật tốn 2.4 ta có: • A+

F = {(A, tTop); (B, tTop); (C, Tuần); (D, Ngày); (E, Ngày)}.

Vậy A →NgàyKHOÁHỌC, hay A là siêu khố của (KHỐHỌC, Ngày). (adsbygoogle = window.adsbygoogle || []).push({});

• πNgày(F) = {A →B; A →C; C →D; A →E} Bước 1. Ta có: ρ(0) = (ABCDE, Ngày)

Bước 2.

+ Xét TFD A →tTopB: vì A → B ∈ πNgày(F) nên (ABCDE, Ngày) ∉ TBCNF. Với (ABCDE, Ngày) ∉ TBCNF và A →tTopB ∈ πABCDE(F), ta có ti = Ngày,

t’ = tTop. Vì Ngày ≼ tTop nên t'

1 = tBottom, t'

2 = Ngày, t'

3 = tTop. Khi đó: ρ(1) = (ρ(0) \ (ABCDE, Ngày)) ∪ {(ACDE, Ngày); (AB, tTop)} + Xét TFD C →ThángD: vì C → D ∈ πNgày(F) nên (ACDE, Ngày) ∉ TBCNF.

Với (ACDE, Ngày) ∉ TBCNF và C →ThángD ∈ πACDE(F), ta có ti = Ngày,

t’ = Tháng. Vì Ngày ≼ Tháng nên t'

1 = tBottom, t'

2 = Ngày, t'

ρ(2) = (ρ(1) \ (ACDE, Ngày)) ∪ {(ACE, Ngày); (CD, Tháng)} = {(AB, tTop); (ACE, Ngày); (CD, Tháng)}

+ Xét TFD A →TuầnC: vì A → C ∈πNgày(F) nên (ACE, Ngày) ∉ TBCNF.

Với (ACE, Ngày) ∉ TBCNF và A →TuầnC ∈ πACE(F), ta có ti = Ngày,

t’ = Tuần. Vì Ngày ≼ Tuần nên t'

1 = tBottom, t'

2 = Ngày, t'

3 = Tuần. Khi đó: ρ(3) = (ρ(2) \ (ACE, Ngày)) ∪ {(AE, Ngày); (AC, Tuần)}

= {(AB, tTop); (CD, Tháng); (AE, Ngày); (AC, Tuần)} + Xét TFD A →NgàyE. Rõ ràng (AE, Ngày) ∈ TBCNF.

Vậy ρ = {(AB, tTop); (CD, Tháng); (AC, Tuần); (AE, Ngày)}

Như vậy, để tránh tất cả các dư thừa dữ liệu do các phụ thuộc hàm gây nên thì đổi lại ta phải chịu tồn tại một số phụ thuộc hàm khơng bảo tồn. Vì BCNF là một trường hợp đặc biệt của TBCNF nên sẽ không ngạc nhiên nếu việc phân tách một lược đồ môđun thời gian thành các lược con thoả TBCNF mà khơng bảo tồn được các TFD. Với các lược đồ phi thời gian, nếu lược đồ đó chỉ chứa hai thuộc tính thì nó ln thuộc BCNF và khơng có dư thừa nào cả. Trong khi đó thì với các lược đồ mơđun thời gian, ngay cả khi nó chỉ có hai thuộc tính cũng khơng hồn tồn tránh được dư thừa mà không làm mất các TFD. Chẳng hạn, xét lược đồ (AB, Ngày) với F = {A →TuầnB, A ThángB}. Rõ ràng (AB, Ngày) không

thoả TBCNF do tồn tại A →B ∈ πNgày(F) , sử dụng thuật toán 2.4 ta tách

(AB, Ngày) thành hai lược đồ con ρ = {(A, Ngày), (AB, Tháng)}. Rõ ràng ρ bảo tồn thơng tin, song TFD A →TuầnB không được ràng buộc trong hai lược đồ con. Việc tách một lược đồ môđun thời gian thành các lược đồ con thoả TBCNF mà vẫn bảo toàn được các TFD là hồn tồn khơng thể thực hiện được. Vì vậy, chúng ta cần phải tách một lược đồ môđun thời gian thành các lược đồ

con thoả một dạng chuẩn khác mà khơng phải là TBCNF, dạng chuẩn đó chính là T3NF được giới thiệu sau đây.

Một phần của tài liệu nghiên cứu các phụ thuộc hàm theo thời gian, thông qua hai quan điểm của wang và wijsen (Trang 49 - 58)