Точка разложения BCNF заключается в исключении функциональных зависимостей, которые не вида key -> everything else
Так что если в таблице есть FD, скажем, A -> B, такой, что A не является ключом, это означает, что вы храните избыточные данные в вашей таблице. В результате вы создаете новую таблицу со столбцами A и B, ключом которой является A, а затем удаляете B из исходной таблицы.
В результате этого изменения вы больше не будете страдать от аномалий удаления, и вам не придется обновлять несколько строк только для того, чтобы внести изменения в отношение A -> B.
Итак, для тривиального, наивного примера, допустим, у вас есть таблица сотрудников со столбцами:
employeeId name jobTitle salary
Предположим, что jobTitle -> salary
то есть каждый с одинаковым названием должности всегда получает одинаковую зарплату. Предположим, что jobTitle «разработчика» приравнивается к зарплате в 90 000 долларов. Если у вас есть 20 разработчиков в вашей базе данных, было бы глупо хранить одно и то же избыточное значение в $ 90 000 для каждой строки. Таким образом, вы удаляете столбец окладов из таблицы сотрудников и создаете новую таблицу окладов с:
jobTitle_[key] salary
Затем, чтобы получить зарплату сотруднику, вы смотрите ее в таблице зарплат.