Cho lược đồ quan hệ Q(BROKER, OFFICE, STOCK, QUANTITY, INVESTOR, DIVIDENT) F={STOCK > DIVIDENT, INVESTOR > BROKER INVESTOR, STOCK > QUANTITY BROKER > OFFICE } Thực hiện các yêu cầu sau: 1. Tìm tất cả các khóa của Q 2. Xác định dạng chuẩn cao nhất của Q 3. Nếu Q chưa đạt chuẩn 3 NF thì phân rã Q thành các lược đồ ở dạng chuẩn 3NF vừa bảo toàn PTH vừa bảo toàn thông tin.
Cho lược đồ quan hệ p(Q,F) Q=(ABCDE), F={A->B, B->C, C->D, DE->C, CE->A} Phân rã lược đồ thành R1(AD), R2(AB), R3(BE), R4(CDE) Hỏi phép phân rã có bảo tồn thơng tin không ? R1(AD) R2(AB) R3(BE) R4(CDE) a1 A a1 a1 b7 b10 a2 B b1 a2 a2 b11 a3 C b2 b4 b8 a3 a4 D a4 b5 b9 a4 a5 E b3 b6 a5 a5 a2 B a2 a2 a2 a2 a3 C b2 b4 b8 a3 a4 D a4 b5 b9 a4 a5 E b3 b6 a5 a5 a2 B a2 a2 a2 a2 a3 C b2 b2 b2 a3 a4 D a4 b5 b9 a4 a5 E b3 b6 a5 a5 a2 B a2 a2 a2 a2 a3 C b2 b2 b2 a3 a4 D a4 a4 a4 a4 a5 E b3 b6 a5 a5 a2 B a2 a3 C a3 a4 D a4 a5 E b3 Xét phụ thuộc hàm A->B R1(AD) R2(AB) R3(BE) R4(CDE) a1 A a1 a1 b7 b10 Xét phụ thuộc hàm B->C R1(AD) R2(AB) R3(BE) R4(CDE) a1 A a1 a1 b7 b10 Xét phụ thuộc hàm C->D R1(AD) R2(AB) R3(BE) R4(CDE) a1 A a1 a1 b7 b10 Xét phụ thuộc hàm DE->C R1(AD) a1 A a1 R2(AB) R3(BE) R4(CDE) a1 b7 b10 a2 a2 a2 a3 a3 a3 a4 a4 a4 b6 a5 a5 a2 B a2 a2 a2 a2 a3 C a3 a3 a3 a3 a4 D a4 a4 a4 a4 a5 E b3 b6 a5 a5 Xét PTH CE->A R1(AD) R2(AB) R3(BE) R4(CDE) a1 A a1 a1 b7 b7 KL: nhận thấy khơng có dịng chứa tồn a nên phép phân rã khơng bảo tồn Cho R(ABCD) F=(A->B, B->C, A->D, D->C} Tách thành R1(AB) R2(AC) R3(BD) R1(AB) R2(AC) R3(BD) a1 A a1 a1 b5 a2 B a2 b3 a2 a3 C b1 a3 b6 a4 D b2 b4 a4 a1 A a1 a1 b5 a2 B a2 a2 a2 a3 C b1 a3 b6 a4 D b2 b4 a4 a1 A a1 a1 b5 a2 B a2 a2 a2 a3 C b1 a3 b1 a4 D b2 b4 a4 Xét PTH A->B R1(AB) R2(AC) R3(BD) Xét PTH B->C R1(AB) R2(AC) R3(BD) Xét PTH A->D R1(AB) R2(AC) R3(BD) a1 A a1 a1 b5 a2 B a2 a2 a2 a3 C b1 a3 b1 a4 D b2 b2 a4 a1 A a1 a1 b5 a2 B a2 a2 a2 a3 C b1 a3 b1 a4 D b2 b2 a4 a1 A a1 a1 b5 a2 B a2 a2 a2 a3 C b1 a3 b1 a4 D b2 b2 a4 Xét PTH D->C R1(AB) R2(AC) R3(BD) Xét PTH A->B R1(AB) R2(AC) R3(BD) KL: nhận thấy khơng có dịng có tồn a nên khơng bảo tồn Cho lược đồ quan hệ p=(Q,F) với Q(A,B,C,D,E,G) tập phụ thuộc hàm F ={A -> B; D -> C,A; C,B ->D; A,E ->G; C,E ->D} a Tìm tất khóa lược đồ quan hệ p, cho biết p có siêu khóa ? L=ADCBE ; R=BCAGD TN = Q\R = {E} TG = {ABCD} = L GIAO R NHÁP: TÍNH BAO ĐĨNG E+ = E # Q+ => E KHƠNG PHẢI LÀ KHĨA Đặt Xi tập cua tập trung gian Xi ∅ A B C D AB AC AD BC BD CD ABC ABD BCD ABCD Xi∪ TN E AE BE CE DE ABE ACE ADE BCE BDE CDE ABCE ABDE BCDE ABCDE (Xi∪ TN)+ E AEGB BE CEDAGB=Q+ DECAGB=Q+ AEBG Q+ Q+ Q+ Q+ Q+ Q+ Q+ Q+ Q+ siêu khóa khóa CE DE CE DE ACE ADE BCE BDE CDE ABCE ABDE BCDE ABCDE TÍNH BAO ĐĨNG AE+ = AEBG BE+ = BE KL: CÓ 11 SIÊU KHÓA VÀ KHÓA B, xác định dạng chuẩn cao lược đồ quan hệ Khóa = CE, DE F ={A -> B; D -> C,A; C,B ->D; A,E ->G; C,E ->D} + ĐẠT CHUẨN - KHÔNG ĐẠT CHUẨN A->B D->CA CB->D AE->G CE->D KẾT LUẬN BCNF + - 3NF + + - THUỘC TÍNH KHƠNG KHĨA: ABG 2NF + + + + + + 1NF + + + + + + CE->A, CE->B, CE->G, DE->A, DE->B, DE->G LÍ GIẢI: XÉT A->B: - Nhận thấy vế trái A khơng siêu khóa => Q không đạt chuẩn BCNF Nhận thấy vế trái A không siêu khóa, B khơng thuộc tính khóa => Q không đạt chuẩn 3NF ∀ PTH ∈ F ta có CE->A, CE->B, CE->G, DE->A, DE->B, DE->G, phụ thuộc hàm đầy đủ vào khóa => Q đạt chuẩn 2NF KL: Vậy Q đạt chuẩn cao 2NF Câu 3: Cho lược đồ quan hệ Q(BROKER, OFFICE, STOCK, QUANTITY, INVESTOR, DIVIDENT) F={STOCK -> DIVIDENT, INVESTOR -> BROKER INVESTOR, STOCK -> QUANTITY BROKER -> OFFICE } Thực yêu cầu sau: Tìm tất khóa Q Xác định dạng chuẩn cao Q Nếu Q chưa đạt chuẩn NF phân rã Q thành lược đồ dạng chuẩn 3NF vừa bảo tồn PTH vừa bảo tồn thơng tin Đặt Q=(ABCDEG) F={C->G, E->A, EC->D,A->B} - Tìm khóa L = CEA R=GADB TN = Q\R = CE TG= A CE+ = CEGADB = Q+ CE LÀ KHÓA CỦA LĐQH Q - XÁC ĐỊNH DẠNG CHUẨN CAO NHẤT BCNF 3NF 2NF 1NF C->G E->A EC->D A->B KẾT LUẬN + - + - + + - + + + + + Thuộc tính khơng khóa ABGD CE->A, CE->B, CE-> G, CE->D LÍ GIẢI: XÉT C->G: - Nhận thấy vế trái C siêu khóa => Q khơng đạt chuẩn BCNF Nhận thấy vế trái C khơng phải siêu khóa, vế phải A khơng phải thuộc tính khóa => Q khơng đạt chuẩn 3NF ∀ PTH ∈ F ta có CE->A, CE->B, CE-> G, CE->D ta thấy có C->G, E->A khơng phụ thuộc hàm đầy đủ vào khóa => Q không đạt chuẩn 2NF Q đạt chuẩn cao 1NF Phân rã Q THÀNH 3NF F={C->G, E->A, EC->D, A->B} Tìm phủ tối thiểu: Bước 1: Đưa PTH có vp nhiều thuộc tính thành PTH có vp thuộc tính F1 = F={C->G, E->A, EC->D, A->B} Bước 2: Loại bỏ PTH dư thừa XÉT C->G: C+ = C ⊉G XÉT E->A: E+ = E ⊉ A XÉT EC->D: E+ = EAB ⊉ D, C+= CG ⊉ D XÉT A->B: A+= A ⊉ B F2 = {C->G, E->A, EC->D, A->B} Bước 3: Loại bỏ PTH có vế trái dư thừa XÉT C->G: C+ = C ⊉G XÉT E->A: E+ = E ⊉ A XÉT EC->D: EC+=ECGADB ⊃D => LOẠI EC->D XÉT A->B: A+= A ⊉ B F3 = {C->G, E->A, A->B} Vậy F3 phủ tối thiểu F Ta có khóa k = CE Q1 = CG Q2 = EA Q3 = AB NHẬN THẤY PHÂN RÃ TRÊN KHƠNG CHỨA KHĨA NÊN TA CĨ Q1, Q2, Q3, Q4={CE} LÀ KẾT QUẢ CỦA PHÂN RÃ Bài 6.5/26 Bài tập sở liệu Cho lược đồ quan hệ Q(C,D,E,G,H,K) tập phụ thuộc hàm F F = { C,K ->H; C -> D; E -> C; E -> G; C,K ->E} Tìm khố Q Xác định dạng chuẩn Q Phân rã lược đồ quan hệ Q thành lược đồ CSDL đạt dạng chuẩn (hoặc đạt dạng chuẩn 3) Tìm khóa: L = CKE R = HDCGE TN = Q\R = {}K TG = L ∩ R = {CE} K+ = K # Q+ => K Khơng phải khóa Gọi Xi tập tập trung gian Xi ∅ C E CE Xi ∪ TN K CK EK CEK (Xi ∪ TN)+ K CKHDEG = Q+ EKGCHD = Q+ Q+ XÁC ĐỊNH DẠNG CHUẨN CAO NHẤT KHÓA = CK, EK Siêu khóa Khóa CK EK CEK CK EK Xét chuẩn BC vế trái phải siêu khóa Xét chuẩn 3NF vế trái phải khóa vế phải có chứa thuộc tính khóa CK->H C->D E->C E->G CK->E KẾT QUẢ BCNF + + - 3NF + + + - 2NF + + + - 1NF + + + + + + Thuộc tính khơng khóa DGH CK->D, CK->G, CK->H, EK-> D, EK->G, EK->H Vậy Q đạt chuẩn cao chuẩn 1NF LÍ GIẢI: Xét C->D: - Nhận thấy vế trái C siêu khóa => Q khơng đạt chuẩn BCNF Nhận thấy vế trái C khơng phải siêu khóa, vế phải khơng chứa thuộc tính khóa => Q khơng đạt chuẩn 3NF ∀ PTH ∈ F ta có CK->D, CK->G, CK->H, EK-> D, EK->G, EK->H nhận thấy có C- >D, E->G làm cho không phụ thuộc hàm đầy đủ vào khóa => Q khơng đạt chuẩn 2NF Q đạt chuẩn 1NF Tìm phủ tối thiểu cách khác: CHÚ Ý ĐÂY LÀ CÁCH TÌM CHUẨN NHẤT, CÁC BÀI TRÊN NÊN LÀM LẠI THEO CÁCH NÀY Bước 1: tách vế phải có nhiều thuộc tính thành vế phải có thuộc tính F1 = F = { C,K ->H; C -> D; E -> C; E -> G; C,K ->E} Bước 2: loại bỏ phụ thuộc hàm dư thừa Xét CK->H: C+ = CD ⊉ H, K+ = K ⊉ H Xét C -> D: C+ = C ⊉ D Xét E -> C: E+ = EG ⊉ C Xét E -> G: E+ = ECD ⊉ G Xét CK->E: C+ = CD ⊉ E, K+ = K ⊉ E F2 = { C,K ->H; C -> D; E -> C; E -> G; C,K ->E} Bước 3: loại bỏ phụ thuộc hàm có vế trái dư thừa Xét CK->H: CK+ = CKDEG ⊉H Xét C -> D: C+ = C ⊉ D Xét E -> C: E+ = EG ⊉ C Xét E -> G: E+ = ECD ⊉ G Xét CK->E: CK+ = CKHD ⊉ E F3 = { C,K ->H; C -> D; E -> C; E -> G; C,K ->E} Ta có khóa = CK, EK Q1 = (CKH) VÌ CK->H Q2 = (CD) VÌ C->D Q3 = (EC) VÌ E->C Q4 = (EG) VÌ E->G Q5 = (CKE) VÌ CK->E NHẬN THẤY CĨ Q1, Q5 CHỨA KHÓA NÊN ĐÂY LÀ KẾT QUẢ CỦA VIỆC PHÂN RÃ THONGTINTHUEBAO(SOHĐ, HOTENKH, DIACHIKH, MAKH, NGAYKIHOPDONG, MAGOITHUEBAO, TENGOITHUEBAO, GIATHUEBAOTHEOTHANG) Xác định phụ thuộc hàm MAKH - > HOTENKH, DIACHIKH MAGOIKENHTHUEBAO -> TENGOITHUEBAO, GIATHUEBAOTHEOTHANG SOHĐ -> NGAYKIHOPDONG, MAKH, MAGOITHUEBAO Xác định dạng chuẩn cao TÌM KHĨA L: MAKH, MAGOITHUEBAO, SOHĐ R: HOTENKH, DIACHIKH, TENGOITHUEBAO, GIATHUEBAOTHEOTHANG, NGAYKIHOPDONG, MAGOITHUEBAO, MAKH TN = Q\R = { SOHĐ} TG = {MAKH, MAGOITHUEBAO} (SOHĐ)+ = SOHĐ, NGAYKIHOPDONG, MAGOITHUEBAO, MAKH, HOTENKH, DIACHIKH, TENGOITHUEBAO, GIATHUEBAOTHEOTHANG = (THONGTINTHUEBAO)+ SOHĐ LÀ KHĨA CHÍNH BCNF - 3NF - 2NF + 1NF + MAGOIKENHTHUEBAO -> TENGOITHUEBAO, GIATHUEBAOTHEOTHANG - - + + SOHĐ -> NGAYKIHOPDONG, MAKH, MAGOITHUEBAO + + + + KETLUAN - - + + MAKH - > HOTENKH, DIACHIKH Thuộc tính khơng khóa: NGAYKIHOPDONG, MAGOITHUEBAO, MAKH, HOTENKH, DIACHIKH, TENGOITHUEBAO, GIATHUEBAOTHEOTHANG SOHĐ -> NGAYKIHOPDONG SOHĐ -> MAKH SOHĐ -> HOTENKH GIẢI THÍCH: Y NHƯ MẤY BÀI TRÊN TÌM PHỦ TỐI THIỂU Bước 1: tách PTH vế phải có nhiều thuộc tính thành PTH vế phải có thuộc tính F1= { MAKH - > HOTENKH, MAKH-> DIACHIKH, MAGOIKENHTHUEBAO -> TENGOITHUEBAO, MAGOIKENHTHUEBAO -> GIATHUEBAOTHEOTHANG, SOHĐ -> NGAYKIHOPDONG, SOHĐ-> MAKH, SOHĐ -> MAGOITHUEBAO } Bước2: loại bỏ phụ thuộc hàm dư thừa F2 = { MAKH - > HOTENKH, MAKH-> DIACHIKH, MAGOIKENHTHUEBAO -> TENGOITHUEBAO, MAGOIKENHTHUEBAO -> GIATHUEBAOTHEOTHANG, SOHĐ -> NGAYKIHOPDONG, SOHĐ-> MAKH, SOHĐ -> MAGOITHUEBAO} Bước 3: loại bỏ PTH có vế trái dư thừa F3 = { MAKH - > HOTENKH, MAKH-> DIACHIKH, MAGOIKENHTHUEBAO -> TENGOITHUEBAO, MAGOIKENHTHUEBAO -> GIATHUEBAOTHEOTHANG, SOHĐ -> NGAYKIHOPDONG, SOHĐ-> MAKH, SOHĐ -> MAGOITHUEBAO} Vậy PTH F F3 Ta có khóa SOHĐ Phân rã THONGTINTHUEBAO thành Q1(MAKH, HOTENKH, DIACHIKH) Q2(MAGOITHUEBAO, TENGOITHUEBAO, GIATHUEBAOTHEOTHANG) Q3(SOHĐ, NGAYKIHOPDONG, MAKH, MAGOITHUEBAO) NHẬN THẤY Q3 CÓ CHỨA KHÓA NÊN ĐÂY LÀ KẾT QUẢ CỦA PHÂN RÃ Sử dụng LĐQH vừa chuẩn hóa, thực truy vấn ĐSQH SQL yêu cầu sau: a Đưa tên giá thuê bao theo tháng gói thuê bao ĐSQH: π tengoithuabao, giathuebaotheothang (Q2) SQL: SELECT TENGOITHUEBAO, GIATHUEBAOTHEOTHANG FROM Q2 b Tìm gói th bao chưa khách hàng kí hợp đồng ĐSQH: π magoithuebao (Q2) - π magoithuebao (Q3) SQL: SELECT A.MAGOITHUEBAO FROM Q2 A WHERE NOT EXISTS (SELECT * FROM Q2 A1 INNER JOIN Q3 B ON A1.MAGOITHUEBAO = B.MAGOITHUEBAO AND A1.MAGOITHUEBAO = A.MAGOITHUEBAO)