Оправдано ли использование строкового первичного ключа?
=========================================================

 Например есть таблица, хранящая каталог автомобилей. Оправдано ли будет сделать первичным ключем гос.номер, т.е. , допустим, поле nchar(6)? А если нет, то в каких случаях это бывает оправдано? Тут ведь и избавляемся от интового поля с автоинкрементом, и не надо делать дополнительно проверок на уникальность номера.  

Как скажется использование строкового pk на производительности? 

> Оправдано ли будет сделать первичным ключем гос.номер, т.е. , допустим, поле nchar(6)? 

  

Оправдано, если а) поле фиксированной длины - неважно, строка это или число; б) вы действительно уверены в том, что значения будут уникальны, в том числе во времени. Есть предметные области, где это действительно так, но далеко не везде.  

Если строка переменной длины, первичным ключом её лучше не делать, но можно сделать полнотекстовой поиск по ней, если он нужен.  
  

Для СУБД небольшая строка фиксированной длины (напр, 12 байт) - все равно что большое число, особой разницы в общем-то нет. А вот строки переменной длины как правило хранятся иначе, в отдельной области, а в самой записи ставится указатель. Все это, разумеется, удорожает запросы. 

 1. Никуда не годится. Ключ должен быть числом, это раз. Это влияет на производительность.  

2. Допущение об уникальности номеров автомобилей - мрак. Вполне возможна ситуация, когда появятся две машины с одинаковым номером, просто одна из них 100500 лет назад снята с учета. 

 не правильно. автомобильный номер - не уникален.   

в 2013 я пошел в ГИБДД, заплатил 2000 руб и на новую машину поставить свой старый гос номер 

 Если строковый ключ не слишком широкий, то он гораздо лучше использования "фальшивого" PK. На производительность вставок/джойнов в пределах реальной погрешности НЕ влияет: не нужно слушать тех, кто когда-то прочел эту байку, достаточно самому поставить нехитрый опыт с реальной средней шириной записи. Единственное ограничение тут - возможное переиспользование ключа, но если этого не допускается, как в данной задаче - так и нужно делать. 

> Например есть таблица, хранящая каталог автомобилей. Оправдано ли будет сделать первичным ключем гос.номер

 Оправдано, но гос. номер не определяет сущность (автомобиль). Возможно определяет VIN, но это нужно определять по предметной области. Использование суррогатного ключа (обычно автоинкрементное число, хотя может быть всё, что угодно, например, uniqueidentifier 0E984725-C51C-4BF4-9960-E1C80E27ABA0) избавляет от необходимости искать (и понимать его уникальность) естественный ключ.