Câu hỏi của bạn
Điều nào sau đây là sự phân hủy liên kết không mất mát của R thành Dạng chuẩn Boyce-Codd (BCNF)?
gợi ý rằng bạn có một tập hợp các tùy chọn và bạn phải chọn tùy chọn nào trong số đó là phân rã không mất dữ liệu nhưng vì bạn chưa đề cập đến các tùy chọn nên trước tiên tôi ( PHẦN A ) sẽ phân tách mối quan hệ thành BCNF (đầu tiên thành 3NF rồi đến BCNF) và sau đó ( PHẦN B ) minh họa cách kiểm tra xem phân rã đã cho này có phải là phân rã nối không mất dữ liệu hay không. Nếu bạn chỉ quan tâm đến việc biết cách kiểm tra xem phân rã BCNF nhất định có mất dữ liệu hay không, hãy chuyển trực tiếp đến PHẦN B của câu trả lời của tôi.
PHẦN A
Để chuyển đổi một quan hệ R
và một tập hợp các phụ thuộc hàm ( FD's
) thành, 3NF
bạn có thể sử dụng Tổng hợp của Bernstein . Để áp dụng tổng hợp của Bernstein -
- Trước tiên, chúng tôi đảm bảo rằng tập hợp đã cho
FD's
là một trang bìa tối thiểu
- Thứ hai, chúng tôi lấy từng cái
FD
và biến nó thành một lược đồ con của riêng nó.
- Thứ ba, chúng tôi cố gắng kết hợp các lược đồ con đó
Ví dụ trong trường hợp của bạn:
R = {A, B, C, D}
FD's = {A-> B, C-> D, AD-> C, BC-> A}
Trước tiên, chúng tôi kiểm tra xem đó có phải FD's
là một bìa tối thiểu hay không ( đơn phía bên phải, không có thuộc tính bên trái không liên quan, không có FD dư thừa )
- Singleton RHS: Tất cả các FD đã cho đều đã có singleton RHS.
- Không có thuộc tính LHS không liên quan: Không có FD nào có thuộc tính LHS không liên quan cần phải loại bỏ.
- Không có FD dư thừa: Không có FD dư thừa.
Do đó, tập hợp FD đã cho đã là một trang bìa tối thiểu.
Thứ hai, chúng tôi tạo mỗi FD
lược đồ con của riêng nó. Vì vậy, bây giờ chúng ta có - ( các phím cho mỗi quan hệ được in đậm )
R 1 = { A, D , C}
R 2 = { B, C , A}
R 3 = { C , D}
R 4 = { A , B}
Thứ ba, chúng tôi xem liệu có thể kết hợp bất kỳ lược đồ con nào không. Chúng ta thấy rằng R 1 và R 2 đã có tất cả các thuộc tính của R
và do đó R 3 và R 4 có thể được bỏ qua. Vì vậy, bây giờ chúng tôi có -
S 1 = {A, D, C}
S 2 = {B, C, A}
Đây là trong 3NF . Bây giờ để kiểm tra BCNF chúng tôi kiểm tra nếu có của các mối quan hệ (S 1 , S 2 ) vi phạm các điều kiện của BCNF ( tức là cho mỗi phụ thuộc chức năng X->Y
phía bên tay trái ( X
) phải là một superkey ). Trong trường hợp này không có cái nào vi phạm BCNF và do đó nó cũng bị phân hủy thành BCNF .
PHẦN B
Khi bạn áp dụng Tổng hợp Bernstein như trên để phân rã R
thì việc phân hủy luôn luôn được bảo toàn phụ thuộc. Bây giờ câu hỏi là, sự phân hủy có mất mát không? Để kiểm tra xem chúng ta có thể làm theo phương pháp sau:
Tạo một bảng như thể hiện trong hình 1, với số hàng bằng số quan hệ đã phân tách và số cột bằng số thuộc tính trong ban đầu của chúng tôi R
.
![BCNF Decompositions và Lossless tham gia cho Cơ sở dữ liệu]()
Chúng ta đặt một trong tất cả các thuộc tính mà chúng ta có trong mối quan hệ phân tách tương ứng như trong hình 1. Bây giờ chúng ta lần lượt xem qua tất cả các thuộc tính của FD {C-> D, A-> B, AD-> C, BC-> A} một và thêm một bất cứ khi nào có thể. Ví dụ, FD đầu tiên là C-> D. Vì cả hai hàng trong cột C đều có a và có một ô trống ở hàng thứ hai của cột D nên chúng ta đặt một ở đó như thể hiện trong phần bên phải của hình ảnh. Chúng tôi dừng lại trong thời gian sớm là một trong những hàng được hoàn toàn đầy một mà chỉ ra rằng nó là một phân hủy lossless. Nếu chúng ta xem qua tất cả các FD và không có hàng nào trong bảng của chúng ta được lấp đầy hoàn toàn bằng a thì đó là một sự phân rã mất mát.
Ngoài ra, hãy lưu ý nếu đó là một phân tách mất dữ liệu, chúng ta luôn có thể làm cho nó không bị mất bằng cách thêm một quan hệ nữa vào tập hợp các quan hệ đã phân rã của chúng ta bao gồm tất cả các thuộc tính của khóa chính.
Tôi khuyên bạn nên xem video này để biết thêm ví dụ về phương pháp này. Cũng có một cách khác để kiểm tra sự phân rã nối không mất dữ liệu liên quan đến đại số quan hệ.