2015-01-20 1 views
-3

Я проектирую базу данных со столом для хранения транспортных средств, и поскольку идентификационный номер автомобиля представляет собой 17-значный буквенно-цифровой серийный номер, моя идея состоит в том, чтобы использовать его в качестве первичного ключа с типом данных char(17).Как использование char (17) в качестве первичного ключа для хранения номеров VIN в таблице с SQL Server влияет на производительность?

Многочисленные другие таблицы будут иметь VIN в качестве внешнего ключа.

Ряд запросов/поисков будет выполняться с номером VIN в качестве параметра, так как мы хотели бы отслеживать транспортные средства, а также другие данные, относящиеся к нему.

Номер VIN никогда не изменится, но я не уверен, если это приведет к какой-либо серьезной деградации производительности (или других осложнений, я не знаю), так как некоторые запросы будут использовать соединения и другие не:/

При использовании VIN в качестве первичного ключа не должен создать уникальное ограничение/дополнительный индекс - НО он должен быть char(17) типа данных, кроме int, для которых первичных ключи якобы оптимизированные ...

Что я также не 200% уверены, что каждый номер VIN там такой же длины (очень маловероятно), но в этом случае, как использование varchar(17) повлияет на целую e положение дел ... если вообще.

Спасибо!

+0

** В основном основанные на мнениях ** Многие полезные вопросы порождают определенное мнение на основе экспертного опыта, но ответы на этот вопрос будут, как правило, почти полностью основаны на мнениях, а не на фактах, ссылках или конкретном опыте. – melancia

+0

В основном, для первичного ключа предпочтительнее какой-либо целочисленный тип, или если вы хотите, чтобы номер VIN в качестве первичного ключа составлял как составной первичный ключ, или ставил его как уникальный –

+0

Что касается ошибок данных, например: a) у вас будет два автомобиля с одним VIN; b) кому-то нужно изменить VIN c) у вас есть автомобиль без VIN? Они подпадают под другие осложнения. – Arvo

ответ

0

Просто личное мнение ..

Я всегда использую Int в качестве первичного ключа. Первичный ключ в большинстве случаев всегда является кластеризованным индексом. Это 4 байта против 17 байт, и вы всегда можете помещать некластеризованный индекс в столбец VIN. Держите вещи простыми и ясными. Это мое мнение.

0

По моему мнению, в отношении производительности это действительно не очень хорошая идея. Это очень зависит от того, сколько автомобилей вы будете хранить в базе данных. С другой стороны, если ваши приложения и запросы используют параметр VIN как параметр, то это лучший вариант, поскольку столбец индексируется и должен быть уникальным.

надеюсь, что это помогает

пс: akward видеть предложения других людей на эту тему!