Ваш 4-столбцовый «натуральный» ключ - хорошая идея. Добавление столбца (суррогатного) идентификатора не помогает ограничить допустимые значения; вы должны объявить ключ, добавляете ли вы id. И когда другая таблица имеет FK на идентификаторе в исходной таблице и имеет любой из 4 столбцов, а значение для идентификатора и эти столбцы также должны отображаться в исходной таблице, тогда вам все равно необходимо ограничение в таблице ссылок, которое будет иметь не было необходимости, если бы у вас только FK для 4 столбцов и без id. (И в большинстве СУБД, что ограничение вряд ли будет исполнено декларативно, в отличие от FK.)
PS Оправдывающ, что таблица нормализована до некоторой нормальной форме требует, показывая, что она имеет определенные свойства или после определенных процедур. Недостаточно лишь показать, что конкретный набор столбцов является ключом-кандидатом (т.е. уникальным без меньшего уникального подмножества).
PPS
Даже если ваш стол в 6NF следует принуждать ограничение, которое связанно с вложенным присоединиться к зависимости.
В бою, как правило, более одного бойца. Поэтому, когда появляется строка с данным раундом и одним бойцом, должен быть ряд с тем же боем, судья и круглый, но еще один боец. Могут быть более одного судьи боя. Если есть ряды с двумя судьями того же боя, истребитель и круглый, и еще один ряд с одним из этих судей и тот же бой, истребитель и другой раунд, то должен быть еще один ряд с другим судьей с этим боем, истребитель и круглые. Поэтому, хотя ваши четыре столбца образуют ключ-кандидат для вашей таблицы с пятью столбцами, а ваша таблица находится в 6NF, ваша таблица подвержена «аномалиям», которые не устраняются путем нормализации через разложение к проекциям.
Рассмотрите таблицы Particpated (fighterID, fightID), Судья (judID, fight_ID, judID) & Round_of (roundNum, fight_ID). Проекция вашей таблицы на fightID, fighterID, judID & roundNum всегда участвует JOIN Судья JOIN Round_of. К сожалению, большинство СУБД не позволяют вам принудительно применять это ограничение декларативно.
Совокупный ключ * не * означает 4 столбца, объединенные в 1. Совокупный ключ - это ключ, который охватывает несколько столбцов. Вы должны добавить ограничение по ключу, которое включает все 4 столбца. – sqlvogel
Да, я понимаю, я конкатенировал столбцы выше, чтобы показать, о чем я думал. Я предполагаю, что мой вопрос: если есть недостаток или недостаток, связанный с добавлением ограничения ключа на 4 строки, а просто с авто увеличивающим столбец, который идентифицирует каждую из этих строк? –