Giới thiệu về BCNF
BCNF (Boyce-Codd Normal Form) là dạng chuẩn mở rộng từ Dạng chuẩn thứ ba (3NF) và chặt chẽ hơn 3NF.
Một quan hệ R được gọi là ở dạng BCNF nếu mọi phụ thuộc hàm trivia P → Q đều có P là siêu khóa (superkey) của R.
Nếu một quan hệ ở dạng BCNF, nghĩa là sự dư thừa dựa trên phụ thuộc hàm đã được loại bỏ, tuy nhiên vẫn có thể tồn tại một số dạng dư thừa khác.
Ví dụ minh họa
Bảng <SportsClub> (Câu lạc bộ Thể thao)
| Sân (Ground) | Giờ bắt đầu (Begin_Time) | Giờ kết thúc (End_Time) | Gói (Package) |
|---|---|---|---|
| G01 | 07:00 | 09:00 | Gold |
| G01 | 10:00 | 12:00 | Gold |
| G01 | 10:30 | 11:00 | Bronze |
| G02 | 10:15 | 11:15 | Silver |
| G02 | 08:00 | 09:00 | Silver |
Quan hệ trên ở 1NF, 2NF, 3NF nhưng không ở BCNF. Lý do:
Phụ thuộc hàm {Package → Ground}
Thuộc tính quyết định (determinant) Package mà Ground phụ thuộc vào nó không phải là khóa ứng viên (Candidate Key) cũng không phải là siêu tập của khóa ứng viên.
Phân rã để đạt BCNF
Chia thành hai bảng:
Bảng <Package>
| Package | Ground |
|---|---|
| Gold | G01 |
| Silver | G02 |
| Bronze | G01 |
Bảng <TomorrowBookings> (Đặt sân ngày mai)
| Ground | Begin_Time | End_Time |
|---|---|---|
| G01 | 07:00 | 09:00 |
| G01 | 10:00 | 12:00 |
| G01 | 10:30 | 11:00 |
| G02 | 10:15 | 11:15 |
| G02 | 08:00 | 09:00 |
Bây giờ hai bảng trên đều ở dạng BCNF.
- Khóa ứng viên của bảng <Package>: Package và Ground
- Khóa ứng viên của bảng <TomorrowBookings>: {Ground, Begin_Time} và {Ground, End_Time}
Dị thường đã được loại bỏ vì chúng ta sử dụng Package làm khóa trong quan hệ <Package>.