Sự khác biệt giữa BCNF và 3NF
Sử dụng định nghĩa BCNF
Nếu và chỉ nếu với mỗi một trong các phụ thuộc của nó X → Y, thì ít nhất một trong các điều kiện sau giữ :
- X → Y là một phụ thuộc chức năng tầm thường (Y ⊆ X), hoặc
- X là một siêu khóa cho lược đồ R
và định nghĩa 3NF
Nếu và chỉ khi, đối với mỗi phụ thuộc chức năng của nó X → A, ít nhất một trong các điều kiện sau đây được giữ:
- X chứa A (nghĩa là X → A là phụ thuộc chức năng tầm thường), hoặc
- X là một siêu khóa, hoặc
- Mỗi phần tử của AX, sự khác biệt được đặt giữa A và X, là một thuộc tính nguyên tố (nghĩa là, mỗi thuộc tính trong AX được chứa trong một số khóa ứng cử viên)
Chúng tôi thấy sự khác biệt sau đây, trong điều kiện đơn giản:
- Trong BCNF : Mọi khóa một phần (thuộc tính nguyên tố) chỉ có thể phụ thuộc vào một siêu khóa,
trong khi
- Trong 3NF : Khóa một phần (thuộc tính nguyên tố) cũng có thể phụ thuộc vào một thuộc tính không phải là siêu khóa (tức là một thuộc tính khóa / nguyên tố một phần khác hoặc thậm chí là thuộc tính không phải là số nguyên tố).
Ở đâu
- Một thuộc tính quan trọng là một thuộc tính được tìm thấy trong một chìa khóa ứng cử viên, và
- Một khóa ứng viên là một superkey tối thiểu cho mối quan hệ đó, và
- Một superkey là một tập hợp các thuộc tính của một biến mối quan hệ mà nó cho rằng trong tất cả các mối quan hệ giao cho biến đó, không có hai bộ dữ liệu khác nhau (hàng) có cùng giá trị cho các thuộc tính trong này set.Equivalently một superkey cũng có thể được định nghĩa là một tập hợp các thuộc tính của lược đồ quan hệ mà trên đó tất cả các thuộc tính của lược đồ phụ thuộc chức năng. (Một siêu khóa luôn chứa khóa ứng viên / khóa ứng viên luôn là tập con của siêu khóa. Bạn có thể thêm bất kỳ thuộc tính nào trong mối quan hệ để có được một trong các siêu khóa.)
Nghĩa là, không có tập hợp con một phần (bất kỳ tập hợp con không tầm thường nào ngoại trừ bộ đầy đủ) của khóa ứng viên có thể phụ thuộc chức năng vào bất cứ thứ gì ngoài siêu khóa.
Một bảng / quan hệ không có trong BCNF có thể bị dị thường, chẳng hạn như các bất thường cập nhật được đề cập trong ví dụ về pizza bởi một người dùng khác. Không may,
- BNCF không thể luôn luôn có được , trong khi
- 3NF luôn có thể thu được .
Ví dụ 3NF Versus BCNF
Một ví dụ về sự khác biệt hiện có thể được tìm thấy tại " bảng 3NF không đáp ứng BCNF (dạng thông thường BoyceTHER Codd) " trên Wikipedia, trong đó bảng sau gặp 3NF nhưng không phải BCNF vì "Sân tennis" (thuộc tính một phần khóa / chính) trên "Loại tỷ lệ" (thuộc tính khóa / nguyên tố một phần không phải là siêu khóa), đây là một phụ thuộc mà chúng ta có thể xác định bằng cách hỏi các khách hàng của cơ sở dữ liệu, câu lạc bộ tennis:
Đặt chỗ sân tennis ngày nay ( 3NF, không phải BCNF )
Court Start Time End Time Rate Type
------- ---------- -------- ---------
1 09:30 10:30 SAVER
1 11:00 12:00 SAVER
1 14:00 15:30 STANDARD
2 10:00 11:30 PREMIUM-B
2 11:30 13:30 PREMIUM-B
2 15:00 16:30 PREMIUM-A
Các siêu khóa của bảng là:
S1 = {Court, Start Time}
S2 = {Court, End Time}
S3 = {Rate Type, Start Time}
S4 = {Rate Type, End Time}
S5 = {Court, Start Time, End Time}
S6 = {Rate Type, Start Time, End Time}
S7 = {Court, Rate Type, Start Time}
S8 = {Court, Rate Type, End Time}
ST = {Court, Rate Type, Start Time, End Time}, the trivial superkey
Vấn đề 3NF : Thuộc tính khóa / thuộc tính một phần "Tòa án" phụ thuộc vào thứ gì đó không phải là siêu khóa. Thay vào đó, nó phụ thuộc vào thuộc tính khóa / thuộc tính một phần "Loại tỷ lệ". Điều này có nghĩa là người dùng phải thay đổi thủ công loại tỷ lệ nếu chúng tôi nâng cấp tòa án hoặc thay đổi thủ công tòa án nếu muốn áp dụng thay đổi tỷ lệ.
- Nhưng nếu người dùng nâng cấp tòa án nhưng không nhớ tăng tỷ lệ thì sao? Hoặc nếu loại tỷ lệ sai được áp dụng cho một tòa án?
(Về mặt kỹ thuật, chúng tôi không thể đảm bảo rằng phụ thuộc chức năng "Loại tỷ lệ" -> "Tòa án" sẽ không bị vi phạm.)
Giải pháp BCNF : Nếu chúng tôi muốn đặt bảng trên vào BCNF, chúng tôi có thể phân tách mối quan hệ / bảng đã cho thành hai quan hệ / bảng sau (giả sử chúng tôi biết rằng loại tỷ lệ chỉ phụ thuộc vào trạng thái thành viên và tòa án, mà chúng tôi có thể khám phá bằng cách hỏi các khách hàng của cơ sở dữ liệu của chúng tôi, chủ sở hữu của câu lạc bộ quần vợt):
Các loại tỷ lệ ( BCNF và 3NF yếu hơn, được ngụ ý bởi BCNF)
Rate Type Court Member Flag
--------- ----- -----------
SAVER 1 Yes
STANDARD 1 No
PREMIUM-A 2 Yes
PREMIUM-B 2 No
Đặt chỗ sân tennis ngày nay ( BCNF và 3NF yếu hơn, được ngụ ý bởi BCNF)
Member Flag Court Start Time End Time
----------- ----- ---------- --------
Yes 1 09:30 10:30
Yes 1 11:00 12:00
No 1 14:00 15:30
No 2 10:00 11:30
No 2 11:30 13:30
Yes 2 15:00 16:30
Giải quyết vấn đề : Bây giờ nếu chúng tôi nâng cấp tòa án, chúng tôi có thể đảm bảo loại tỷ lệ sẽ phản ánh sự thay đổi này và chúng tôi không thể tính giá sai cho một tòa án.
(Về mặt kỹ thuật, chúng tôi có thể đảm bảo rằng phụ thuộc chức năng "Loại tỷ lệ" -> "Tòa án" sẽ không bị vi phạm.)