Задать вопрос

Почему первичный ключ в БД это какое-то число, а не имя?

Число (первичный ключ) обычно задается sequence, поэтому дубликация, конечно невозможна. - Почти всегда в таблицах p_id (int) - это первичный ключ, а, допустим, mark_of_telephone (марка телефона) - простое поле. Почему так? По идее должна быть марка телефона первичным ключом.
  • Вопрос задан
  • 2850 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
@dr_yand
Все зависит от архитектуры. Никто не мешает сделать первичным ключом марку телефона.
Но например у вас есть связь нескольких таблиц, таблица Марки телефонов и таблица Пользователи телефонов, где марка телефона будет внешним ключом. Так зачем там дублировать полное название марки телефона, если можно записать более короткое числовое значение.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
svd71
@svd71
в первичный ключь может входить любой тип (алфавитный - только до 128символов или 256 - зависит от огранизации в СУБД. если поле больше, то остальные символы не учитываются при создании ключа). Так же в ключь может входить не одно поле, а несколько и с разными типами. Но самая высокая скорость работы именно с ключами типа integer. Некоторых СУБД специально оптимизируют код обработки ключей с такими типами, что бы добиться наивысшей скорости работы с подобными сурогатными ключами.

Крометого, при сложном составном ключе из нескольких полей получается некоторая избыточность базы в том, что все значения этих ключей нужно хранить в референсируемых таблицах и составлять более сложные запросы при выборке и обработки данных.
Ответ написан
Комментировать
@killla
Первичный ключ выполняет только функцию уникальности. Обеспечивает однозначную идентификацию, не повторяемость.
Это минимальный набор полей по которым можно идентифицировать строку.

Если есть уверенность что марка телефона никогда не повторяется, то столбец ID можно вообще выбросить из таблицы.
Если марки повторяются, то добавляют столбец ID для возможности однозначной идентификации строки. Делать составной первичный ключ из двух полей нет смысла.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы