Я проектирую базу данных со столом для хранения транспортных средств, и поскольку идентификационный номер автомобиля представляет собой 17-значный буквенно-цифровой серийный номер, моя идея состоит в том, чтобы использовать его в качестве первичного ключа с типом данных char(17)
.Как использование char (17) в качестве первичного ключа для хранения номеров VIN в таблице с SQL Server влияет на производительность?
Многочисленные другие таблицы будут иметь VIN в качестве внешнего ключа.
Ряд запросов/поисков будет выполняться с номером VIN в качестве параметра, так как мы хотели бы отслеживать транспортные средства, а также другие данные, относящиеся к нему.
Номер VIN никогда не изменится, но я не уверен, если это приведет к какой-либо серьезной деградации производительности (или других осложнений, я не знаю), так как некоторые запросы будут использовать соединения и другие не:/
При использовании VIN в качестве первичного ключа не должен создать уникальное ограничение/дополнительный индекс - НО он должен быть char(17)
типа данных, кроме int
, для которых первичных ключи якобы оптимизированные ...
Что я также не 200% уверены, что каждый номер VIN там такой же длины (очень маловероятно), но в этом случае, как использование varchar(17)
повлияет на целую e положение дел ... если вообще.
Спасибо!
** В основном основанные на мнениях ** Многие полезные вопросы порождают определенное мнение на основе экспертного опыта, но ответы на этот вопрос будут, как правило, почти полностью основаны на мнениях, а не на фактах, ссылках или конкретном опыте. – melancia
В основном, для первичного ключа предпочтительнее какой-либо целочисленный тип, или если вы хотите, чтобы номер VIN в качестве первичного ключа составлял как составной первичный ключ, или ставил его как уникальный –
Что касается ошибок данных, например: a) у вас будет два автомобиля с одним VIN; b) кому-то нужно изменить VIN c) у вас есть автомобиль без VIN? Они подпадают под другие осложнения. – Arvo