Что такое третья нормальная форма
Что проверяют
Владеете ли вы формальным определением, а не пересказом своими словами. Для java-разработчика к этому добавляется практическое умение увидеть нарушение в схеме, которую выдаёт слой доступа к данным,.
Как отвечать
Отношение находится в третьей нормальной форме, если оно во второй и ни один неключевой атрибут не зависит транзитивно ни от одного ключа-кандидата. Формально: для каждой нетривиальной функциональной зависимости левая часть либо надключ, либо правая часть входит в какой-нибудь ключ-кандидат. По-человечески: каждый атрибут зависит от ключа, от всего ключа и ни от чего, кроме ключа.
Пример нарушения: таблица сотрудников с полями номер сотрудника, имя, код отдела, название отдела, адрес отдела. Ключ это номер сотрудника, но название и адрес определяются кодом отдела. Отсюда дубли, правка названия во многих строках и невозможность завести отдел без сотрудников. Приведение простое: сотрудники и отделы разъезжаются в две таблицы, связь по внешнему ключу.
Соседняя ступень: нормальная форма Бойса Кодда строже и требует, чтобы левая часть любой нетривиальной зависимости была надключом; разница видна на таблицах с несколькими пересекающимися ключами-кандидатами.
Практический вывод: третья форма это нормальное состояние схемы под нагрузкой из коротких операций, а денормализация уместна для чтения и отчётов, но тогда согласованность обеспечивает код, триггер или регулярный пересчёт.
Где спотыкаются
Формулируют определение через первичный ключ и забывают про остальные ключи-кандидаты. Заодно теряется оговорка про атрибуты, входящие в ключ: без неё классические учебные примеры не описываются, и на уточняющем вопросе ответ рассыпается.
Приводят пример с составным ключом и называют нарушением третьей формы то, что на самом деле нарушает вторую. Зависимость от части ключа и зависимость через неключевой атрибут это разные вещи, и путаница здесь видна сразу.
Считают, что добавление технического идентификатора нормализует таблицу. Суррогатный ключ меняет способ адресации строки, но зависимость между атрибутами остаётся, а вместе с ней дубли и аномалии. Нормализация это разбиение по зависимостям, а не замена ключа на число.