Professional Documents
Culture Documents
Chuong5 Phan2
Chuong5 Phan2
Phép tách lược đồ R là việc thay thế R=<U, F> bằng các lược đồ
con R1 =<U1 , F1>, R2 =<U2 , F2>, …, Rk=<Uk, Fk>
Kí hiệu phép tách: =(R1, R2, …, Rk) hoặc =(U1, U2, …, Uk)
Phép tách kết nối không tổn thất
Cho lược đồ quan hệ R=<U, F>
r là một quan hệ bất kỳ trên R thỏa mãn F
U1, U2, …, Uk là các tập con của U sao cho U=U1 U2 … Uk
Fi= Ui(F)={XY| XY F+, XYUi}, i=1,..,k
Ri=<Ui,Fi>, i=1,..,k
ri=Ui(r), i=1,..,k
Phép tách R thành {R1, R2, …, Rk} được gọi là tách kết nối không
tổn thất (Lossless Join Decomposition) đối với tập phụ thuộc hàm
F nếu r=r1 * r2 *…* rk
Phép tách kết nối không tổn thất
Bổ đề
Cho, R=<U,F> là một lược đồ quan hệ,
r là một quan hệ trên R thỏa F
U1, U2, …, Uk là các tập con của U sao cho U=U1 U2 … Uk
Fi= Ui(F)={XY| XY F+, XYUi}, i=1,..,k
Ri=<Ui,Fi>, i=1,..,k
=(R1, R2, …, Rk) là một phép tách của R
ri=Ui(r), i=1,..,k
m(r)=r1 * r2 *…* rk
Khi đó i) r m(r)
ii) Nếu s=m(r) thì Ui(s)=ri, i=1,..,k
iii) m(m(r))=m(r)
Kiểm tra tính kết nối không tổn thất của
một phép tách
Bài toán
Cho lược đồ R <U, F>, trong đó, U={A1, A2, …, An} là tập các thuộc
tính, F là tập các phụ thuộc hàm,
U1, U2, …, Uk là các tập con của U sao cho U1 U2 … Uk=U
Kiểm tra phép tách =(U1, U2, …, Uk) có phải là phép tách kết nối
không tổn thất hay không?
Kiểm tra tính kết nối không tổn thất của
một phép tách
Thuật toán
Vào: U={A1, A2, …, An}, F, =(U1, U2, …, Uk)
Ra: Kết luận có phải là phép tách kết nối không tổn thất hay không?
Phƣơng pháp:
Bước 1: Lập bảng kxn,
Tại dòng i, cột j ta kí hiệu là aj nếu AjUi, ngược lại, ta kí hiệu là bij
Bước 2: Với mỗi XY F, xét các dòng có kí hiệu bằng nhau trên tập X. Các dòng này sẽ
được thay đổi kí hiệu để chúng mang giá trị bằng nhau trên tập Y, 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 aj
- Nếu không có giá trị nào có dạng aj thì lấy tùy ý một ký hiệu bij để làm bằng
Bước 2 được lặp lại cho đến khi không có thay đổi nào trên bảng nữa
Nếu tại bước kết thúc, bảng có một dòng gồm toàn ký hiệu dạng aj thì là phép tách kết nối
không tổn thất, ngược lại là phép tách kết nối tổn thất
Kiểm tra tính kết nối không tổn thất của
một phép tách
Ví dụ
Cho R=<U, F>, trong đó U={S, A, I, P} và F={SA, SI P}
Kiểm tra =(SA, SIP) có là phép tách không tổn thất hay không?
SA a1 a2 b13 b14
SIP a1 b22 a3 a4
Kiểm tra tính kết nối không tổn thất của
một phép tách
Ví dụ 1:
Cho U={S, A, I, P} và F={SA, SI P}
Kiểm tra =(SA, SIP) có là phép tách không tổn thất hay không?
Xét SA
S A I P S A I P
Xét SI P
S A I P S A I P S A I P
Xét SI P
S A I P S A I P S A I P
U1 U 2 U1 \ U 2 F
=> là phép tách kết nối tổn thất
U1 U 2 U 2 \ U1 F
Kiểm tra tính kết nối không tổn thất của
một phép tách
Ví dụ
Cho R=<U,F>, trong đó U={S, A, I, P} và F={SA, SI P}
Kiểm tra =(SA, SIP) có là phép tách không tổn thất hay không?
Phép tách =(R1, R2, …, Rk k) được gọi là phép tách bảo toàn tập
phụ thuộc hàm F nếu Fi phủ F
i 1
Khóa của R là HS
Vì CT F và HS C, nên R ∉ BCNF
Ví dụ
Phép tách U=CTHRSG
F={CT, HR C, HT R, CS G, HS R }
Khóa HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR C, HT R, CS G, HS R }
Khóa HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR C, HT R, CS G, HS R }
Khóa HS
CS G
U1=CSG V1=CTHRS
F1={CS G} FV1={ C T, HR C, HT R, HS R}
Khóa CS Khóa HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR C, HT R, CS G, HS R }
Khóa HS
CS G
U1=CSG V1=CTHRS
F1={CS G} FV1={ C T, HR C, HT R, HS R}
Khóa CS Khóa HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR C, HT R, CS G, HS R }
Khóa HS
CS G
U1=CSG V1=CTHRS
F1={CS G} FV1={ C T, HR C, HT R, HS R}
Khóa CS Khóa HS
CT
U2=CT V2=CHRS
F2={C→T} FV2={HR C, HC R, HS R}
Khoá C Khoá HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR C, HT R, CS G, HS R }
Khóa HS
CS G
U1=CSG V1=CTHRS
F1={CS G} FV1={ C T, HR C, HT R, HS R}
Khóa CS Khóa HS
CT
U2=CT V2=CHRS
F2={C→T} FV2={HR C, HC R, HS R}
Khoá C Khoá HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR C, HT R, CS G, HS R }
Khóa HS
CS G
U1=CSG V1=CTHRS
F1={CS G} FV1={ C T, HR C, HT R, HS R}
Khóa CS Khóa HS
CT
U2=CT V2=CHRS
F2={C→T} FV2={HR C, HC R, HS R}
Khoá C Khoá HS
HC R
U3=HRC U4=CHS
F3={HR C, HC R} F4={HS→C}
Khoá HC hoặc HR Khoá HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR C, HT R, CS G, HS R }
=(U1,U2,U3,U4) Khóa HS
CS G
U1=CSG V1=CTHRS
F1={CS G} FV1={ C T, HR C, HT R, HS R}
Khóa CS Khóa HS
CT
U2=CT V2=CHRS
F2={C→T} FV2={HR C, HC R, HS R}
Khoá C Khoá HS
HC R
U3=HRC U4=CHS
F3={HR C, HC R} F4={HS→C}
Khoá HC hoặc HR Khoá HS
Các phép tách lược đồ quan hệ
Định nghĩa phép tách lược đồ quan hệ
Phép tách kết nối không tổn thất về chuẩn BCNF
Phép tách bảo toàn tập phụ thuộc hàm về chuẩn 3NF
Bài toán
Cho lược đồ R=<U, F>. Hãy tách lược đồ R thành các lược đồ con
ở dạng chuẩn 3NF và bảo toàn tập phụ thuộc hàm F
Thuật toán
Đầu vào: R=<U, F>, F tối tiểu
Đầu ra: =(R1, R2, …, Rk) là phép tách bảo toàn tập phụ thuộc hàm F và Ri
3NF, i=1,…,k
Phương pháp:
- Nếu có những thuộc tính không xuất hiện trong bất kỳ một phụ thuộc hàm
nào của F, ở cả vế trái lẫn vế phải, thì ta xác định 1 lược đồ quan hệ gồm
những thuộc tính này và xoá chúng ra khỏi U
- Nếu 1 trong các phụ thuộc hàm của F chứa toàn thể các thuộc tính của U thì
phép tách chỉ gồm R
- Trường hợp còn lại, phép tách gồm các lược đồ tương ứng với tập thuộc tính
có dạng XA, với X→A F. Tuy nhiên, nếu trong F gồm các thuộc tính X→A1 ,
X→A2 , …, X→Am thì thay cho các lược đồ với tập thuộc tính có dạng XAi, ta
sử dụng lược đồ với tập thuộc tính: XA1 A2 …Am
Ví dụ
Bài toán
Cho R=<CTHRSG, {C→T, HR→C, HT→R, CS→G, HS→R}>.
Tìm phép tách bảo toàn phụ thuộc thành 3NF của R
Ví dụ
R có thuộc 3NF không?
R=<CTHRSG, {C→T, HR→C, HT→R, CS→G, HS→R}>
Đặt U= CTHRSG
F={CT, HR C, HT R, CS G, HS R}
Khóa của R là HS
Các thuộc tính không khóa: C,T,R,G
Vì HS → C F+(do HS là khóa của R) và C →T F
=> T phụ thuộc hàm bắc cầu vào khóa HS
=> R không thuộc 3NF
Ví dụ
F đã là tập phụ thuộc hàm tối thiểu chƣa?
R=<U, F>
U= CTHRSG
F={CT, HR C, HT R, CS G, HS R}
- Mỗi phụ thuộc hàm trong F có thể tách thành một lược đồ như sau:
Đường
phố NHÂN VIÊN
Số nhà
Xã
Tỉnh
Đường
phố NHÂN VIÊN
Số nhà
Xã
Tỉnh
Tổ hợp khóa bộ phận của kiểu thực thể yếu và các khóa chính của
các kiểu thực thể chủ liên kết với nó -> Khóa chính của lược đồ
Ví dụ
Mã nhân Giới
viên tính
Ngày
sinh Bậc Lương
Họ tên lương
Đường 1 PHỤ N
phố NHÂN VIÊN THUỘC PHỤ THUỘC Quan
Số nhà VÀO hệ
Xã
Họ tên Giới
Ngày tính
sinh
Huyện Địa chỉ
Tỉnh
Tên
phòng
Địa
Mã phòng điểm
PHÒNG
ĐỊA_ĐIỂM(Mã_phòng, địa_chỉ)
Bước 4. Chuyển kiểu liên kết cấp 2, tỉ số
liên kết 1:1 thành lược đồ quan hệ
Nguyên tắc:
Giảsử, các lược đồ tương ứng với các thực thể tham gia vào liên
kết này là S và T. Chọn một lược đồ (S)
Khóa chính của T -> Khóa ngoài của S
Các thuộc tính đơn (hoặc các thành phần đơn của các thuộc tính phức
hợp) của kiểu liên kết -> các thuộc tính của S
Ví dụ
Mã nhân Giới Tên
viên tính phòng
Ngày Địa
Ngày bổ
sinh Bậc Lương Mã phòng điểm
Họ tên nhiệm
lương
Đường 1 1
phố NHÂN VIÊN QUẢN LÍ PHÒNG
Số nhà
Xã
Tỉnh
PHÒNG(Mã phòng, Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm)
ĐỊA_ĐIỂM(Mã_phòng, địa_chỉ)
Bước 5. Chuyển kiểu liên kết cấp 2, tỉ số
liên kết 1:N thành lược đồ quan hệ
Nguyên tắc:
Giả sử, lược đồ quan hệ S tương ứng với thực thể tham gia ở phía
N, lược đồ quan hệ T tương ứng với thực thể tham gia ở phía 1 của
kiểu liên kết.
Khóa chính của T -> Khóa ngoài của S
Các thuộc tính đơn (hoặc các thành phần đơn của các thuộc tính phức
hợp) của kiểu liên kết -> các thuộc tính của S
Ví dụ
Mã nhân Giới Tên
viên tính phòng
Ngày Địa
sinh Bậc Lương Mã phòng điểm
Họ tên lương
Tỉnh
Đường M N
NHÂN VIÊN THAM DỰ ÁN
phố
GIA
Số nhà
Xã
Số giờ Địa
Mã dự án
điểm
Huyện Địa chỉ Tên dự
án
Tỉnh
ĐỊA_ĐIỂM(Mã_phòng, Địa_chỉ)
ĐỊA_ĐIỂM(Mã_phòng, Địa_chỉ)
F4={}
=>ĐỊA_ĐIỂM BCNF
Bước 3. Kiểm tra dạng chuẩn của lược
đồ
DỰ_ÁN(Mã_dự_án, Tên_dự_án, Địa_điểm, Mã_phòng)
F5={Mã_dự_án {Tên_dự_án, Địa_điểm, Mã_phòng}}
=>DỰ_ÁN BCNF