Дизайн базы данных: зачем использовать автоинкрементное поле в качестве первичного ключа? - PullRequest
1 голос
/ 13 января 2010

вот мой вопрос: почему я должен использовать автоинкрементные поля в качестве первичных ключей в моих таблицах вместо чего-то вроде значений UUID?

Каковы основные преимущества одного над другим?В чем их проблемы и сильные стороны?

Ответы [ 3 ]

8 голосов
/ 13 января 2010

Простые числа занимают меньше места. Значения UUID принимают 128 бит каждый. Работать с числами также проще. Для большинства практических целей 32-разрядные или 64-разрядные целые числа могут хорошо работать как первичный ключ. 2 64 - очень большое число.

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

4 голосов
/ 13 января 2010

Вам не нужно использовать автоинкрементные первичные ключи, но я использую. И вот почему.

Во-первых, если вы используете int, они меньше, чем UUID.

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

Также рассмотрите код, который вы напишите на любом уровне доступа к данным. Многие из моих конструкторов принимают один идентификатор как int. Он чистый, и на языке, безопасном для типов, таком как C #, любые проблемы обнаруживаются во время компиляции.

Недостатки автоинкрементаторов? Потенциально не хватает места. У меня есть таблица, которая на данный момент находится на 200M в поле id. Если я уйду, как есть, это приведет к нарушению 2-миллиардного лимита в год.

Вы также можете утверждать, что автоинкрементный идентификатор не имеет внутреннего значения, но то же самое верно и для UUID.

3 голосов
/ 13 января 2010

Полагаю, под UUID вы подразумеваете GUID? GUID лучше, когда позже вам придется объединять таблицы. Например, если у вас есть локальные базы данных, разбросанные по всему миру, каждая из них может генерировать уникальные идентификаторы GUID для идентификаторов строк. Позже данные могут быть объединены в одну базу данных, и идентификаторы не должны конфликтовать. С автоинкрементом в этом случае вам понадобится составной ключ, где другая половина ключа идентифицирует исходное местоположение, или вам придется изменить идентификаторы при импорте данных в базу данных master.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...