Boyce-Codd Normal Form (BCNF)
- Boyce-Codd Normal Form or BCNF is an extension to the third normal form. It is also known as 3.5 Normal Form.
- Rules for BCNF
- For a table to satisfy the Boyce-Codd Normal Form, it should satisfy the following two conditions:
- It should be in the Third Normal Form.
- And, for any dependency A → B, A should be a super key.
- The second point sounds a bit tricky, right?
- In simple words, it means, that for a dependency A → B, A cannot be a non-prime attribute, if B is a prime attribute.
- Example:
- Below we have a college enrolment table with columns student_id, subject and professor.
- As you can see, we have also added some sample data to the table.
- In the table above:
- One student can enroll for multiple subjects.
- For example, a student with student_id 101, has opted for subjects - Java & C++
- For each subject, a professor is assigned to the student.
- And, there can be multiple professors teaching one subject like we have for Java.
- What do you think should be the Primary Key?
- Well, in the table above student_id, subject together form the primary key, because using student_id and subject, we can find all the columns of the table.
- One more important point to note here is, one professor teaches only one subject, but one subject may have two different professors.
- Hence, there is a dependency between subject and professor here, where subject depends on the professor name.
- This table satisfies the 1st Normal form because all the values are atomic, column names are unique and all the values stored in a particular column are of same domain.
- This table also satisfies the 2nd Normal Form as their is no Partial Dependency.
- And, there is no Transitive Dependency, hence the table also satisfies the 3rd Normal Form.
- But this table is not in Boyce-Codd Normal Form.
- Why this table is not in BCNF?
- In the table above, student_id, subject form primary key, which means subject column is a prime attribute.
- But, there is one more dependency, professor → subject.
- And while subject is a prime attribute, professor is a non-prime attribute, which is not allowed by BCNF.
- How to satisfy BCNF?
- To make this relation(table) satisfy BCNF, we will decompose this table into two tables, student table and professor table.
- Below we have the structure for both the tables.
- And now, this relation satisfy Boyce-Codd Normal Form.
- Other ways of BCNF
Tags:
DBMS