Должен ли я создать таблицу с первичным ключом varchar или int? - PullRequest
18 голосов
/ 19 августа 2009

Я знаю, что это субъективно, но я хотел бы узнать мнения людей и, надеюсь, некоторые лучшие практики, которые я могу применить при проектировании структур таблиц SQL Server.

Лично я чувствую, что наложение таблицы на varchar фиксированной (максимальной) длины - нет-нет, потому что это означает необходимость распространять ту же фиксированную длину на любые другие таблицы, которые используют это в качестве внешнего ключа. Использование int позволит избежать применения одинаковой длины по всей доске, что неизбежно приведет к человеческим ошибкам, т. Е. 1 таблица имеет varchar (10), а другая varchar (20).

Это звучит как кошмар для первоначальной настройки, плюс означает, что дальнейшее ведение таблиц также затруднительно. Например, скажем, столбец с ключом varchar внезапно становится 12 символами вместо 10. Теперь вам нужно пойти и обновить все другие таблицы, что может оказаться огромной задачей спустя годы.

Я не прав? Я что-то здесь пропустил? Я хотел бы знать, что другие думают об этом, и если придерживаться int для первичных ключей - это лучший способ избежать кошмаров, связанных с обслуживанием.

Ответы [ 13 ]

0 голосов
/ 19 августа 2009

Надо задуматься о том, достаточно ли 32-битного диапазона для того, что вы делаете. Идентификаторы статуса Twitter были 32-битными INT, и у них были проблемы, когда они заканчивались.

Вопрос о том, использовать ли BIGINT или UUID / GUID в этой ситуации, является дискуссионным, и я не хардкорный специалист по базам данных, но UUID можно хранить в VARCHAR фиксированной длины, не беспокоясь о том, что вам нужно будет изменить поле размер.

0 голосов
/ 19 августа 2009

В PostgreSQL я обычно использую «Serial» или «BigSerial» «тип данных» для генерации первичных ключей. Значения автоматически увеличиваются, и я всегда нахожу целые числа, с которыми легко работать. По сути, они эквивалентны целочисленному полю MySQL, для которого установлено значение "auto_increment".

0 голосов
/ 19 августа 2009

Хотя обычно рекомендуется INT, это действительно зависит от вашей ситуации.

Если вас интересует ремонтопригодность, тогда возможны и другие типы. Например, вы можете очень эффективно использовать Guid в качестве первичного ключа. Есть причины не делать этого, но последовательность не входит в их число.

Но да, если только у вас нет веской причины не делать этого, int является самым простым в использовании и наименее вероятным источником каких-либо проблем.

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