DE CUONG CSDL

ÔN TẬP

HỌC PHẦN CƠ SỞ DỮ LIỆU

Lý thuyết:

Cơ sở dữ liệu:

Một CSDL là một tập hợp các dữ liệu có liên quan tới nhau, chứa thông tin về 1 tổ chức nào đó (như 1 trường học, ngân hàng, thư viện...) được lưu trữ trên các thiết bị nhớ của máy tính để đáp ứng nhu cầu khai thác thông tin của nhiều người sử dụng với nhiều mục đích khác nhau.

Hệ quản trị CSDL

: Phần mềm cho phép nhiều người dùng giao tiếp với CSDL, cung cấp 1 môi trường thuận lợi và hiệu quả để tìm kiếm và lưu trữ thông tin của CSDL được gọi là hệ quản trị CSDL.

Hệ CSDL

: Ngươi ta dùng cụm từ hệ CSDL để chỉ một CSDL và một hệ quản trị CSDL áp dụng trên CSDL đó.

Lược đồ CSDL

: toàn bộ mô tả CSDL được gọi là lược đồ CSDL. VD hoten: kiểu text 30, namsinh kieu so>1980

Thể hiện của CSDL: Cần phân biệt mô tả của CSDL (lược đồ) với bản thân CSDL.

- Lược đồ CSDL được xác định trong quá trong quá trình thiết kế CSDL và gần như không thay đổi theo thời gian.

- Trong khi đó bản thân CSDL lại thường xuyên thay đổi do dữ liệu được thêm vào, xóa đi hay cập nhật.

Toàn bộ dữ liệu được lưu trữ trong CSDL tại 1 thời điểm nhất định, gọi là thể hiện của CSDL.

Siêu khóa:

Siêu khóa của 1 lược đồ quan hệ R là một tập hợp gồm 1 hay nhiều thuộc tính cảu lược đồ R có tính chất xác định duy nhất 1 bộ trong mỗi thể hiện của R.

VD cho lược đồ R

{SDB, ten,diem} => các khóa con K1={SBD}; K2={SBD,Ten}; K3={SBD,Diem}; K4={SBD,diem, ten}.

=> K1,K2,K3,K4 là các siêu khóa

Khóa:

Khóa của 1 lược đồ quan hệ là một siêu khóa của lược đồ này sao cho cho mọi tập con thực sự của nó không là siêu khóa.

VD: Xét K2 có 2 tập con thực sự {SBD}, {ten}, vì SBD là siêu khóa nên K2 không là khóa => K1= {SBD} là khóa của lược đồ quan hệ R.

Chú ý: Một lược đồ quan hệ có thể có nhiều khóa.

Khóa của lược đồ quan hệ:

Cho U là tập các thuộc tính, F: là tập các phụ thuộc hàm trên U, K: là tập con của U (K

Í

U). Ta nói K là 1 khóa của lược đồ quan hệ nếu:

i)K+ = U;

ii)

"

A

Î

K thì {K = {A}}+ ≠ U

Siêu khóa: Nếu K chỉ thỏa mãn (i) thì K gọi là siêu khóa của lược đồ quan hệ

VD: R {SBD, Ten, Diem}

F = {SBD → Ten; SBD → Diem}

K1 {SBD,Ten}

K1+ ={SBD, Ten, Diem} = U

Þ

K1là siêu khóa khi (K1,{Ten} + = (SBD)+

= U

Þ

Không thỏa mãn (ii) nên K­1 không là khóa

Khóa ngoài:

Khóa ngoài của một lược đồ quan hệ là một tập hợp 1 hay nhiều thuộc tính là khóa của 1 lược đồ quan hệ khác.

VD: R1 {SBD, ten, NS, Fach}; R2

{FACH, Diem} = Fach là khóa ngoài.

Các thao tác trên CSDL quan hệ:

SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn

[INTO tên_bảng_mới]

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]

[COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]]

1 Phép chèn:

Cú pháp: Insert (<tên quan hệ>;<giá trị bộ dữ liệu >)

VD: R{SBD, ten, diem}

INSERT (R;’A009”,’Mai’,9)

Phép xóa:

Cú pháp: DELETE (<Tên quan hệ>;<Giá trị bộ dữ liệu cần xóa>)

Hoặc DELETE (<Tên quan hệ>;<khóa>=<Giá trị

khóa>)

VD: DELETE (R;’A009’,’Mai’,9)

DELETE (R;SBD=’A009’)

Phép cập nhật

UPDATE (<Tên quan hệ>;<Giá trị bộ cần cập nhật>;<biểu thức giá trị mới>)

Hoặc UPDATE (<Tên quan hệ>;<Biểu thức khóa của bộ cần cập nhật>;<biểu thức giá trị mới>)

VD: UPDATE( R;’A009’,’Mai’,9:Diem=7)

UPDATE (R;”SBD=’A009’; Diem=7)

Bao đóng:

Cho U là tập thuộc tính, F là tập phụ thuộc hàm xác định trên U, và X là tập con của U (X

Í

U)

Ta gọi bao đóng của tập thuộc tính X đối với tập phụ thuộc F, ký hiệu X+F là tập các thuộc tính A, sao cho X xác định A được suy diễn từ F nhờ các quy tắc suy diễn Amstrong ( X+

º

X+F = {A

Î

U/(X->A)

Î

F+}

Bổ để: X--> Y (X xác định Y) được suy diễn từ F nhờ vào hệ quy tắc Amstrong khi và chỉ khi Y

Í

X+

Thuật toán tìm bao đóng:

-Vào:

+U

+F

+X

Í

U

-Ra: X+

Phương pháp:

Ta tìm 1 dãy những tập thuộc tính X1,X2,X3 theo quy tắc sau đây:

B1: Đặt X0 = X

B2:Với mỗi chỉ số i lần lượt nhận giá trị =1, mỗi bước tăng lên 1 đơn vị ta thực hiện như sau:

+Tìm phụ thuộc hàm trong F sao cho { Vế trái

Í

Xi-1 ; Vế phái không

Í

Xi-1

+Nếu tìm thấy thì Xi= (Xi-1

È

Vế phải

+Nếu không tìm được một phục thuộc hàm nào như vậy thì chuyển tới bước 3.

Bước 3: Thuật toán kết thúc khi Xi = Xi-1

và X+=Xi

Hệ tiên đề Armstrong

1.Các quy tắc suy diễn:

Cho U là tập các thuộc tính

F là tập các phụ thuộc hàm

X,Y,Z

Í

U

Khi đó có:

+Tính phản xạ: Nếu Y là con của X ( Y

Í

X) thì X-->Y ( X xác định Y)

+Tính tăng trưởng:

Nếu X-->Y thì XZ-->YZ và Z

Í

U

+Tính bắc cầu:

Nếu X-->Y và Y-->Z thì X-->Z

2.Hệ quy tắc bổ sung:

+Quy tắc hợp: Nếu X-->Y và X-->Z thì X-->YZ

+Quy tắc giả bắc cầu: Nếu X-->Y và WY-->Z thì WX-->Z

+Quy tác tách: Nếu X-->Y và Z

Í

Y thì X-->Z

Bài tập

Đại số quan hệ và SQL:

KN Khả hợp: hai quan hệ được gọi là khả hợp với nhau nếu chúng có chung tập thuộc tính.

Phép hợp:

Cho hai quan hệ r và s khả hợp, tập hợp của r và s ký hiệu là (r

È

s) là tập hợp tất cả các bộ thuộc vào r hoặc s.

r

È

s ={t/t

Î

r hoặc t

Î

s)

Phép giao:

Cho hai quan hệ r và s khả hợp

Giao của r và s ký hiệu là (r

Ç

s) là tập tất cả các bộ thuộc đồng thời cả r và s

r

Ç

s ={t/t

Î

r và t

Î

s)

Phép trừ: Cho hai quan hệ r và s khả hợp, hiệu của r và s ký hiệu (r-s) là tập hợp tất cả các bộ thuộc r nhưng không thuộc s

r - s = {t/t

Î

r và t

Ï

s)

Phép tích đề các:

Cho quan hệ r xác định trên tập thuộc tính {A1,A2,A3,...,Am}

s xác định trên tập thuộc tính {B1,B2,..,Bn}

Tích đề các của r và s ký hiệu là (r*s) được định nghĩa như sau: là tập các bộ có m+n thành phần trong đó có m thành phần đầu là một bộ thuộc r và n thành phần sau là 1 bộ thuộc s.

r*s={(A1,A2,...,Am),(B1,B2,...,Bn) =T|(A1,A2,...,Am)

Î

r và (B1,B2,...,Bn)

Î

s}

Phép chia: Cho quan hệ r xác định trên tập thuộc tính {A1,A2,A3,...,Am,Am+1, ...An,}

s xác định trên tập thuộc tính {A1,A2,..,Am}

Phép chia r cho s ký hiệu là (r

¸

s) là tập các bộ gồm (n-m) thành phần sao cho mỗi bộ này khi ghép với mọi bộ trong s sẽ cho kết quả là bộ trong r

(r

¸

s) = {t=(Am=1,...,An)|

"

(A1,A2,...,Am) thì (A1,A2,...,An)

Î

r}

Các phép toán đặc biệt trên quan hệ:

1. Phép chọn:

Ký hiệu là

d

Phép chọn được dùng để xây dựng để xây dựng 1 tập con các bộ của 1 quan hệ đã cho, các bộ này phải thỏa mãn 1 điều kiện (gọi là điều kiện chọn). Điều kiện chọn được biểu diễn bằng 1 biểu thức logic, là tổ hợp của các toán hạng, mỗi toán hạng là phép so sánh đơn giản. Biểu thức logic sẽ cho giá trị là True hoặc False.

Các phép so sánh

trong biểu thức: >;<;=;<=;<=;<>

-Các phép logic: And, or, not (

Ù

: và;

Ú

: Hoặc;

Ø

phủ định)

d

C

(r)={t

Î

r/c(t)=true}}

Phép chọn c trên r là tập tất cả các bộ t sao cho c(t) = true.

-Phép chiếu:

(

Õ

)

-Phép chiếu 1 quan hệ r trên tập thuộc tính X dùng để xây dựng 1 quan hệ mới từ quan hệ r đã cho bằng cách loại bỏ

đi một số thuộc tính của r, chỉ giữ lại các thuộc tính X

Õ

X

(r) = {t[X]| t

Î

r}

Phép kết nối: (

)

khái niệm “xếp cạnh nhau”

Cho 2 bộ p=(p1,p2,...,pm)

q=(q1, q2,q3,...,qn)

xếp cạnh nhau của p và q kí hiệu là (p,q) và được định nghĩa như sau:

(p,q) = (p1,p2,...,pm,q1,q2,...,qn)

-Phép kết nối : cho r là 1 quan hệ xác định trên tập thuộc tính r[a1,a2,...,an}; s{b1,b2,b3,...,bm}

q

là 1 trong 6 phép so sánh (>, <, =;

³

;

£

;

¹

); ai

Î

{a1,a2,...,an}; bj

Î

{b1,b2,...,bm}.

Phép kết nối

q

(tê ta) của quan hệ r và s theo điều kiện ai

q

bj

được ký hiệu là

r

s = {(t,u)| t

Î

r, u

Î

s; t[ai]

q

u[bj]}

ai

q

bj

Định nghĩa: phép kết nối

q

là tập các xếp cạnh nhau sao cho t

Î

r, u

Î

s và t[ai]

q

u[bj]

Phép kết nối bằng : Khi

q

là phép so sánh “=” ta có phép kết nối bằng.

Phép kết nối tự nhiên: Khi kết nối bằng tại thuộc tính cùng tên của hai quan hệ, ta có phép kết nối tự nhiên và ký hiệu là (*). Trong kết quả của phép kết nối tự nhiên chỉ giữ lại một thuộc tính cùng tên của 2 quan hệ.

Các phép toán bổ sung:

Max: giá trị lớn nhất; Min: giá trị nhỏ nhất; Average: Giá trị trung bình; cout: Đếm;

*Kiểu câu hỏi thứ hai

cũng không thực hiện được là các câu hỏi cần phải sử dụng phép gộp nhóm. Do đó người ta xây dựng phép toán bổ sung để thực hiện 2 kiểu câu hỏi kiểu như sau:

<Thuộc tính gom nhóm>

F

< tên quan hệ>

<hàm><thuộc tính>

Nếu trong biểu thức không có biểu thức gộp nhóm thì các hàm được áp dụng trên thuộc tính của toàn bộ bảng quan hệ.

Bài tập: Cho 3 quan hệ

CT ( MCT, TenCT): Danh sách công ty (mã công ty, tên công ty)

SP (MSP,TenSP,Gia): Danh sách sản phẩm (mã sản phẩm, tên sản phẩm, giá)

BAN (MCT, MSP,SL): Danh sách chuyến hàng

1.Đưa ra thông tin đầy đủ về các công ty

P

MCT, TenCT

(CT)

2.Đưa ra mã sản phẩm của những sản phẩm có giá lớn hơn 5 triệu.

P

SP

(

d

Gia>5

(SP)

3.Đưa ra tên công ty đã bán các sản phẩm có số lượng = 100

KQ1

¬

d

SL = 100

(BAN)

KQ2

¬

CT*KQ1

KQ

¬

P

TenCT

(KQ2)

4.Đưa ra tên công ty , tên sản phẩm, giá của các sản phẩm đã được bán, có giá bằng 1 triệu đồng

Đưa ra sản phẩm có giá 1 triệu:

KQ1

¬

P

MSP,TenSP

(

d

Gia = 1

(SP))

Tìm chuyến hàng bán sản phẩm đó

KQ2

¬

KQ1*BAN

Lấy ra MCT, tên sản phẩm

KQ3

¬

P

MCT,TenSP

(KQ2)

Đưa ra tên công ty, tên sản phẩm

KQ

¬

P

MCT,TenSP

(KQ3*CT)

Ví dụ 2:

Cho CSDL gồm 4 quan hệ sau:

NV (Ten, TP)

Nhân viên

(tên, thành phố sinh sống)

LAM (Ten, TenCT,Luong) Làm việc

CT (TenCT, TP)

Công ty

QL (Ten, TT)

Quản lý (tên, thủ trưởng)

Hãy biểu diễn các câu hỏi sau bằng ngôn ngữ đại số quan hệ và SQL.

1, Tìm tên và thành phố sinh sống của các nhân viên làm việc cho công ty FBC:

KQ1

¬

d

TenCT=’FBC’

(LAM)

Tìm tên và thành phố sinh sống:

KQ

¬

P

Ten,TP (KQ1*NV)

Creat view FBC as (Selection *

From LAM

Where (TenCT=”FBC”)

Select Ten,TenTP

From NV

Where Ten in (select Ten

From FBC)

2.Tìm tên và thành phố sinh sống của các nhân viên làm việc cho FBC và có lương >2 triệu

KQ1

¬

d

TenCT=’FBC’,Luong>2

(LAM)

Tìm tên và thành phố sinh sống:

KQ

¬

P

Ten,TP (KQ1*NV)

Creat view FBC as (Selection *

From LAM

Where (TenCT=”FBC”) and (Luong>2)

Select Ten,TenTP

From NV

Where Ten in (select Ten

From FBC)

3.Tìm tên các nhân viên sống trong cùng thành phố với công ty họ làm việc

*Kết nối CT với làm

KQ1

¬

(CT*LAM)

*Kết nối NV với KQ1

KQ2

¬

(KQ1*NV)

*Tìm tên nhân viên

KQ

¬

P

Ten

(KQ2)

Select Ten

From NV,LAM,CT

Where (NV.Ten=Lam.Ten) and (LAM.TenCT=CT.TenCT)

4.Tìm các nhân viên không làm việc cho FBC

KQ

¬

d

TenCT

¹

‘FBC’

(LAM)

Select Ten

From LAM

Where (TenCT <>’FBC’

5.Tìm tên của các nhân viên có lương cao hơn lương của mọi nhân viên ở công ty FBC

*Chọn các nhân viên làm việc ở FBC

KQ

¬

d

TenCT = ‘FBC’

(LAM)

*Tìm max lương của FBC

KQ2

¬

F­Max

Luong

(KQ1)

*Tìm các nhân viên có lương cao hơn lương của mọi nhân viên FBC

KQ

¬

P

Ten

(

d

Lương>Max_Luong

(LAM

KQ2)

Select Ten

From LAM

Where Luong>(Select Max(Luong)

From LAM

Where (TenCT =’FBC’)

6.Giả sử công ty FBC đặt tại nhiều thành phố. Tìm tên tất cả các công ty đặt tại nơi có công ty FBC

*Tìm các thành phố mà ct FBC đặt tại đó

KQ

¬

P

TP

(

d

TenCT=’FBC’

(CT)

*.Chọn các công ty không phải là FBC, TenTP

KQ2

¬

d

TenCT

¹

’FBC”

(CT)

*Tìm công ty mà đặt trụ sở tại mọi nơi mà có FBC

KQ

¬

P

TenCt

(KQ2*KQ1)

Select TenCT

From CT

Where TP as (Select TP

From CT

Where TenCT = ‘FBC’)

7. Tìm tên của tất cả các nhân viên có lương cao hơn lương trung bình của công ty của họ.

*Tính lương trung bình của từng công ty

KQ1

¬

TenCT

F

Average Luong

(LAM)

KQ2

¬

LAM

KQ1)

TenCT=TenCT

Luong >Avarege_Luong

*Đưa ra tên NV

KQ

¬

P

Ten

(KQ2)

Select TenCT, AVG(Luong)

From LAM

Group by TenCT

as KQ1 ( TenCT,TBL)

Select Ten

From KQ1,LAM

Where (KQ1.TenCT = LAM.TenCT) and (Luong>TBL)

8.Tìm tên của các nhân viên sống trong cùng thành phố với thủ trưởng của họ.

Thông tin về nhân viên

KQ1

¬

(NV*QL)

Thông tin về thủ trưởng

KQ2

¬

P

TT,TP

­ (NV

QL )

Ten = TT

Tìm nhân viên cùng thành phố với thủ trưởng của họ

KQ

¬

P

Ten

(KQ1*KQ2)

Creat view Thutruong as

select Ten, TT,TP

From NV,QL

where NV.Ten = QL.TT

Select Ten

From NV,Thutruong

Where (NV.Ten = Thutruong.Ten) and (NV.TP=Thutruong.TP)

9.Tìm công ty có nhiều nhân viên nhất.

*Đếm số nhân viên của từng công ty

KQ1 ← TenCT FCount Ten(LAM)

*Tìm công ty có nhiều nhân viên nhất

KQ2 ← FMax Count_Ten(KQ1)

KQ ← ∏TenCT(KQ1

KQ2)

Creat view TongNV as

(Select TenCT, Count(ten) as SoNV

From LAM

Group by TenCT

Select TenCT

From TongNV

Where (SoNV = (Select Max (SoNV)

From TongNV)

Bao đóng

Bài 1: Cho U= ABCDE

F = {A→C (1); BC→D(2); D→E(3); E→A(4)}

A, Tính AB+

B1: Đặt X0 = AB

B2: Tính X­1:

Có (1) thỏa mãn

{ A

Í

AB = X0 và C không

Í

AB) Khi đó X1 =X0

È

C = ABC

Tính X2: =X1

È

D = ABCD

Tính X3:

Có (3) thỏa mãn {D

Í

ABCD = X2 và E không

Í

ABCD)

Þ

X3= X2

È

E = ABCDE

Tính X4: Không tìm thấy phục thuộc hàm nào

Vậy (AB)+ = ABCDE

b) Tính (BD)+ - D+

X0= BD

X1=BD

È

E = BDE vì từ (3) {D

Í

BD và E không

Í

BD}

X2= BDE

È

A = BDEA vì {E

Í

BDE và A không

Í

BDE}

X3=ABDE

È

C = ABCDE vì từ 1 {A

Í

ABDE và C không

Í

ABDE)

Vậy (BD)+ = ABCDE

X0=D

X1=D

È

E = DE

vì từ (3) {D

Í

D và E không

Í

D}

X2= DE

È

A = ADE vì từ (4) {E

Í

DE và A không

Í

DE}

X3= ADE

È

C = ACDE vì từ (1) { A

Í

ADE và C không

Í

ADE}

(D)+ = ACDE

Vậy (BD)+ - (D)+ = {ABCDE} – {ACDE} = {B}

Khóa

Thuật toán tìm 1 khóa

* Vào :+ Cho U: tập thuộc tính

+F={ti-pi| ti,pi

Í

U,ti

Ç

pi =

Æ

, i=1,2,3..,n

}

* Ra: Khóa X

Phương pháp:

Đặt P=Un Pi

i = 1

T = Un Ti

i = 1

Bước 1: Đặt X:=U\V

Bước 2: Nếu X+ = U thì tới bước 5

Bước 3: X:=(U\P)

È

(T

Ç

P)

Bước 4: Với mỗi Ai

Î

(T

Ç

P) làm như sau :

+) X := X-Ai

+)Nếu X+ ≠ U thì X :=X

È

{Ai}

Bước 5 : Kết luận : X là khóa

VD : U=ABCDE

F={AB →E (1) ; E →AB(2) ; D→ C(3)}. Tìm 1 khóa của lược đồ trên.

Giải : Đặt T = Un Pi = ABCD

i =1

P=UnPi = ACDE

i = 1

Bước 1 : Gán X=U\P = ABCDE \ ACDE = {B}

Bước 2 : Tính X+=B+ =B ≠U (vì B không suy được ra cái gì cả}

Bước 3 : X :=(U\P)

È

(T

Ç

P) = P

È

ADE = BADE

Không có thuộc tính nào suy ra được B chắc chắn trong khóa nhất định chứa B. Còn các thành phần ADE thì trong khóa sẽ chứa 1 trong các thành phần này : Thử từng thành phần trong nhóm ADE

Nếu thử bỏ từng phần tử đi rồi lấy bao đóng mà bao đóng ≠U

Þ

Phần tử đó rất quan trọng

Þ

Trong khóa chứa nó.

Với mỗi phần tử trong ADE làm như sau :

+Xét bỏ A : Khi đó X=BDE

Có X+ =(BDE)+ = BDECA = U

Þ

Bỏ được A

+Xét bỏ D = X còn BDE; Khi đó X=BE

Có X+= (BDE)+= BACDE = U

Þ

Bỏ được D

+Xét bỏ E: Khi đó X=B có X+=B+ =B≠U

Þ

Không bỏ được E.

Vậy khóa là BE

Kiểm tra tính kết nối không thất thoát (tổn thất) của 1 phép tách

Vào:

+ U = {A1,A2,..,An}

+ Tập các phụ thuộc hàm F

+ Phép tách

Ã

= (U1, U2, …, Uk}

Ra: Kết luận

Ã

có phải là phép tách kết nối không thất thoát hay không?

Phương pháp:

Bước 1: Lập bảng kxn, với k dòng được đại diện bởi U1,U2,…,Uk; n cột được đại diện bởi n thuộc tính A1,A2,…,An. Ô giao nhay tại dòng I, cột j ta điền ký tự aj nếu aj

Î

ui, ngược lại ta điền ký hiệu bj

Bước 2: với mỗi X → Y

Î

F, ta xét các dòng có ký hiệu bằng nhau trên tập thuộc tính X, ta sẽ làm các dòng này bằng nhau trên X theo quy tắc: Nếu tồn tại một ký hiệu có dạng aj thì các ký hiệu còn lại được đổi thành ạ. Nếu không có giá trị nào dạng aj thì lấy tùy ý một ký hiệu bij để làm bằng.

Bước 3: Quá trình lặp sẽ dừng khi xảy ra trong 2 khả năng sau:

-Nếu trong bảng có 1 dòng gồm toàn ký hiệu dạng aj thì phép tách

Ã

là phép tách không thất thoát.

- Sau khi áp dụng 1 lượt các phép thuộc hàm trong F mà không có thêm một thay đổi nào nữa so với bảng ở lượt trước thì phép tách

Ã

là phép tách thất thoát.

VD: Cho U = {S,A,I,P} và F = {S→A (1) , SI → P (2)}. Kiểm tra xem P = (SA,SIP) có thất thoát hay không?

Bước 1: Lập bảng khởi tạo

i

0

1

2

3

4

i =1

SA

a1

a2

i = 2

SIP

a1

a3

a4

Bước 2: Áp dụng lượt 1 các phụ thuộc hàm F

i

0

1

2

3

4

i =1

SA

a1

a2

i = 2

SIP

a1

a2

a3

a4

Þ

Sau khi áp dụng trong bảng xuất hiện 1 dòng chứa toàn bộ ký hiệu a

Þ

Phép tách không thất thoát

Tách BCNF

Thuật toán:

* Vào: R=<U,F>

* Ra: Phép tách

Ã

= (R1, R2, …,Rk) không thất thoát với Ri ở dạng chuẩn BCNF

"

I = 1,…,k

Phương pháp:

Bước 1:

Ã

chỉ gần R:

Ã

= (R)

Bước 2: + Nếu mọi lược đồ trong

Ã

đều thuộc BCNF thì chuyển sang bước 3

+ Ngược lại, tìm được lược đồ S = <Us, Fs> trong

Ã

mà S không là BCNF. Chọn một phụ thuộc hàm X→A

Î

Fs mà x không phải là siêu khóa của S, và A

Î

X. Khi đó ta thay thế S bởi 2 lược đồ ứng với tập thuộc tính XA và Us-{A}. Quay trở lại bước 2.

Bước 3: Kết thúc.

VD: Cho R = (U,F); U = CTHRSG

F = {C→T (1); HR →C (2); HT →R (3); CS →G (4); HS →R (5)}

Tách R thành các lược đồ quan hệ ở BCNF

Khóa của R là HS

Giải:

U2=CT

F2=(C

T)

Khóa là C

V1=CTHRS

FV1 =

{C→T; HR →C ; HT →R; HS →R }

Khóa là HS

U= CTHRSG

F = {C→T; HR →C; HT →R; CS →G; HS →R}

U1=CSG

F1=(CS

G)

Khóa là CS

V3=CHRS

FV3 =

{HR →C ; HC →R; HS →R }

Khóa là HS

V4=CHC

FV4 ={

HS →C }

Khóa là HS

U3=HRC

F2=(HR

→C, HC → R

)

Khóa là CH hoặc HR

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: #csdl