С точки зрения нормализации
В основе алгоритмов баз данных лежит много компьютерных наук, и, как и любой другой науке, приходится делать предположения, и одним из них является то, что данные хранятся в форме, нормализованной . Все в строке должно зависеть от ключа (1-ая нормальная форма), целом ключ (2-ая нормальная форма) и ничего, кроме ключа (3-ая нормальная форма). Если вы отойдете от этого, вы получите менее предсказуемую и, как правило, низкую производительность.
Строка может иметь любое количество ключей-кандидатов , каждый из которых может удовлетворять критерию первичного ключа. И я полагаю, вы могли бы назвать другие «вторичными» или «третичными ключами». Никто не делает этого, правда. Если требуется другое значение, например естественный ключ , обычно он устанавливается как атрибут, а не ключ.
При этом вы можете взять любые два столбца и назвать их составной ключ , а также объявить этот ключ первичным ключом. Таким образом, в отношениях первичного ключа действительно есть два столбца. Но это приводит к проблемам с производительностью.
С точки зрения производительности
Один ключ необходим и достаточен для достижения нормализованной схемы. Можно настроить более одного ключа, но они будут содержать избыточные данные - если вы знаете один, вы знаете другой, если вы знаете, кого спрашивать, - и нарушаете 2-ую нормальную форму. Это также означает, что каждый ряд будет занимать больше места, чем ему действительно нужно. Большая строка означает меньшее количество строк на странице, что означает более низкую производительность, особенно с учетом того, что первичный ключ используется в качестве ключа кластеризации и содержится в конечных страницах всех индексов в базе данных. Зачем тратить байты на то, что вы уже знаете?
Типичная практика
Сохраните любые дополнительные «ключи» как атрибуты в строке, где определена сущность. Например, вы можете сохранить номер социального страхования в качестве атрибута таблицы Employee, где EmployeeID является первичным (и, возможно, суррогатным) ключом. Всякий раз, когда вам это нужно, присоединяйтесь к таблице сотрудников. (И, между прочим, вы можете захотеть ужесточить разрешения на уровне столбцов SSN.) Не храните его в нескольких местах; в этом нет необходимости.