Первичный ключ SQL, INT или GUID или..?

Есть ли причина, по которой я не должен использовать Integer в качестве первичного ключа для моих таблиц?

База данных - SQL-CE, две основные таблицы - около 50 000 записей в год и несколько небольших таблиц. Только два подключения будут постоянно открываться в базе данных. Но обновления будут запускаться через несколько соединений сокетов TCP, поэтому будет много перекрестных потоков, которые будут обращаться к одному и тому же соединению с базой данных и использовать их. Хотя активность очень низкая, поэтому одновременные обновления весьма маловероятны, но могут произойти, может быть, пару раз в день максимум.

Скорее всего, будет использовать LINQ2SQL для DAL или типизированных наборов данных.

Не уверен, что эта информация актуальна, но вот почему я спрашиваю, так как я не знаю:)

Ответ 1

Преимущество использования GUID primkey заключается в том, что он должен быть уникальным в мире, например, переносить данные из одной базы данных в другую. Значит, вы знаете, что строка уникальна.

Но если мы говорим о небольшом db, поэтому предпочитаю целое число.

Edit:

Если вы используете SQL Server 2005 ++, можете ли вы также использовать NEWSEQUENTIALID(), это генерирует GUID, основанный на строке выше. При этом проблема с индексом newid() больше не существует.

Ответ 2

Вы должны использовать целое число - оно меньше, то есть меньше памяти, меньше IO (диск и сеть), меньше работы для присоединения.

База данных должна обрабатывать проблемы concurrency, независимо от типа ПК.

Ответ 3

Есть ли причина, по которой я не должен используйте Integer в качестве первичного ключа для моего таблицы?

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

Ответ 4

Я не вижу причин не использовать в этом сценарии целочисленное значение auto-increment. Если вы когда-нибудь дойдете до точки, когда целое число не может обрабатывать объем данных, тогда вы говорите о приложении, масштабированном до такой степени, что в любом случае задействовано гораздо больше работы.

Имейте в виду несколько вещей:

  • Целое число - это размер родного слова для аппаратного обеспечения. Это примерно так же быстро и просто и легко на компьютере, как и тип данных.
  • Если вы, возможно, используете GUID, знаете, что они делают для ужасных первичных ключей. Реляционные базы данных вообще (я не могу говорить для всех, но MS SQL - хороший пример) не индексируют GUID хорошо. Там есть взломы, чтобы попытаться сделать больше идентификаторов GUID, ориентированных на индекс, взять их или оставить. Но, как правило, GUID следует избегать как ПК по соображениям производительности.

Ответ 5

Определенно использовать целое число, вы не хотите использовать GUID в кластерном индексе (PK), так как это приведет к ненужному фрагменту таблицы.