Числовой первичный ключ vs текстового первичного ключа

Рейтинг: 0Ответов: 2Опубликовано: 30.04.2015

Всех с наступающими майскими праздниками! Возможно, тема избитая, хотя я не нашел все же явных указаний в базовых мануалах к СУБД и книгах по БД. Хотел спросить, что будет более правильным, если первичный ключ будет числовым значением и соответственно иметь индекс PK или же же первичный ключ текстового поля, тоже уникального значения? Это про целесообразность и производительность работы с такой таблицей. Почему-то склоняюсь все же к первому, что числовой инкремент более правильный для таблицы имеющей справочную информацию, допустим, номера автомобилей. Использую СУБД Postgres. Хотел бы знать как для этой субд, так и для других СУБД преимущества и минусы в использовании первичным ключом числового значения или текстового поля.

Ответы

▲ 1Принят

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

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

Разумеется, я говорю про длинные строки. Если строка занимает меньше места, чем "обычное" число - проблем с ней не должно возникнуть.

▲ 3

В общем случае быстрее будет тот, что меньше по размеру, т.е. числовой практически всегда.

Преимущество в использовании текста может быть если "кто-то" делает очень много WHERE по этому полю, но при этом этот "кто-то" не знает внутрениих Id. Такие ситуации бывают довольно редко, т.к. обычно для выбора значения предварительно предоставляется справочник вида {Id: Name}, т.е. Id доступно клиенту.