Преимущества, которые вы имеете для выбора типа символьного символа в качестве поля первичного ключа, - это то, что вы можете выбрать, какие данные он может отобразить. Например, вы могли бы указать адрес электронной почты в качестве ключевого поля для таблицы пользователей. Это устраняет необходимость в дополнительном столбце. Другим преимуществом является наличие общей таблицы данных, содержащей индексы нескольких других таблиц (считайте таблицу NOTES с внешней ссылкой на таблицы FINANCE, CONTACT и ADMIN), вы можете легко узнать, из какой таблицы это произошло (например, ваша таблица FINANCE имеет индекс F00001, таблица CONTACT имеет индекс C00001 и т. д.). Боюсь, что недостатки в этом ответе будут более значительными, поскольку я против такого подхода.
Недостатки заключаются в следующем:
- Последовательный тип данных существует именно по этой причине в PostgreSQL
- Числовые индексы будут введены в порядок и минимальный переиндексации нужно будет сделать (то есть, если у вас есть стол с ключами Apple, Carrot и хотите вставить Banana, таблица должна будет перемещаться по индексам так, чтобы банана была вставлена посередине. Вы редко вставляете данные в середине индекса, если индекс является числовым).
- Числовые индексы, не привязанные к данным, не будут меняться.
- Числовые индексы короче и их длина может быть исправлена (4 байта по сравнению с тем, что вы выбираете в качестве длины вашего varchar).
В вашем случае вы можете поместить внешний ключ в числовой индекс, поэтому я не уверен, почему вы хотели бы заставить его быть varchar. Поиск и фильтрация в числовом поле теоретически быстрее, чем текстовое поле, поскольку сервер будет вынужден сначала преобразовать данные. Вообще говоря, у вас будет числовой первичный ключ, который не кластеризуется, а затем создайте кластерный ключ в столбце данных, который вы собираетесь фильтровать много.
Это обычные стандарты при написании SQL, но когда дело доходит до бенчмаркинга, вы обнаружите, что столбцы varchar немного медленнее при объединении и фильтрации, чем целые столбцы. Пока ваши первичные ключи не меняются КОГДА-ЛИБО, вы в порядке.
Некоторые сведения можно найти здесь: http://stackoverflow.com/questions/337503/whats-the-best-practice-for-primary-keys-in-tables –
http://stackoverflow.com/questions/404040/how-do-you-like-your-primary-keys –