Просто чтобы быть противоположным, нет, вам не нужно всегда иметь числовой ПК AutoInc.
Если вы тщательно анализируете свои данные, вы часто идентифицируете естественные ключи в данных. Это часто тот случай, когда данные имеют внутреннее значение для бизнеса. Иногда PK - это артефакты древних систем, которые бизнес-пользователи используют в качестве второго языка для описания атрибутов своей системы. Например, я видел VIN-номера транспортных средств, используемые в качестве основного ключа таблицы «Автомобиль» в системе управления автопарком.
Как бы то ни было, если у вас уже есть уникальный идентификатор, используйте его. Не создавайте второй, бессмысленный первичный ключ; это расточительно и может привести к ошибкам.
Иногда вы можете использовать AutoInc PK для создания значимого для клиента значения, например, номера политик. Установка начального значения на что-то разумное и применение бизнес-правил о ведущих нулях и т. Д. Это, вероятно, подход «лучшее из обоих миров».
Если у вас есть небольшое количество значений, которые являются относительно статическими, используйте значения, которые имеют смысл для пользователя системы. Зачем использовать 1,2,3, если вы можете использовать L, C, H, где L, H и C представляют Life, Car и Home в контексте страхового «Типа полиса», или, возвращаясь к примеру VIN, как насчет использования «TO» для Тойоты? Все автомобили Toyata имеют VIN-код, начинающийся с буквы «TO». Пользователи должны помнить об этом меньше, снижают вероятность появления ошибок программирования и ошибок пользователя и даже могут быть полезным заменителем полного описания в управленческих отчетах, делая отчеты проще. писать и, возможно, быстрее генерировать.
Дальнейшее развитие этого вопроса, вероятно, является «слишком большим мостом», и я, как правило, не рекомендую его, но я включаю его для полноты, и вы можете найти для него хорошее применение. То есть используйте описание в качестве первичного ключа. Для быстро меняющихся данных это мерзость. Для очень статичных данных, которые сообщаются в All The Time , возможно, нет. Просто упомянув об этом, чтобы он сидел там как возможность.
Я действительно использую AutoInc PKs, я просто задействую свой мозг и сначала ищу лучшие альтернативы. Искусство проектирования баз данных делает что-то значимое, что можно быстро запросить. Слишком много соединений мешает этому.
РЕДАКТИРОВАТЬ Еще один важный случай, когда вам не нужен автоматически сгенерированный PK, - это случай таблиц, которые представляют пересечение двух других таблиц. Чтобы придерживаться аналогии с автомобилем, у автомобиля есть 0 ..n аксессуаров, каждый аксессуар можно найти на многих автомобилях. Таким образом, чтобы представить это, Вы создаете таблицу Car_Accessory, содержащую PK от Car и Accessory и другую соответствующую информацию о Дате ссылки и т. Д.
То, что вам (обычно) не нужно, - это AutoInc PK на этом столе - доступ к нему можно получить только через автомобиль «скажи мне, какие аксессуары есть на этом автомобиле» или из аксессуара «скажи им, какие автомобили имеют этот аксессуар»