3NF имеет узкий крайний случай: таблица может удовлетворить его и при этом иметь избыточность, когда у нее есть несколько перекрывающихся ключей-кандидатов. BCNF закрывает этот пробел более строгим правилом — каждый детерминант (левая часть функциональной зависимости) должен быть потенциальным ключом. Большинство реальных схем 3NF на практике уже используются в BCNF.
Пример
SELECT*FROM products WHERE price BETWEEN3000AND50000;
SELECT*FROM products WHERE category IN ('phones', 'laptops');
SELECT*FROM products WHERE stock <>0;
SELECT*FROM users WHERE name ILIKE 'a%'; -- case-insensitive
Итог
3NF имеет узкий крайний случай: таблица может удовлетворить его и при этом иметь избыточность, когда у нее есть несколько перекрывающихся ключей-кандидатов.