Почему первичный ключ в БД это какое-то число, а не имя?
Число (первичный ключ) обычно задается sequence, поэтому дубликация, конечно невозможна. - Почти всегда в таблицах p_id (int) - это первичный ключ, а, допустим, mark_of_telephone (марка телефона) - простое поле. Почему так? По идее должна быть марка телефона первичным ключом.
Все зависит от архитектуры. Никто не мешает сделать первичным ключом марку телефона.
Но например у вас есть связь нескольких таблиц, таблица Марки телефонов и таблица Пользователи телефонов, где марка телефона будет внешним ключом. Так зачем там дублировать полное название марки телефона, если можно записать более короткое числовое значение.
Это-то да. Просто неудобно видеть в таблице цифры. Это надо залезть в еще одну таблицу и посмотреть какая цифра соответствует марке телефона. Просто первая таблица, (где id и марка телефона), если там id - первичный ключ, то нет гарантии, что поля таблицы уникальны - id - увеличивается всегда, а марка телефона, если это поле не первичный ключ, может дублироваться хоть тыщу раз. Самый оптимал, на мой взгляд, - это сделать первичный ключ и id и марку телефона. Но щас смотрю примеры таблиц - нигде такого не вижу. Это все из-за экономии памяти?
в первичный ключь может входить любой тип (алфавитный - только до 128символов или 256 - зависит от огранизации в СУБД. если поле больше, то остальные символы не учитываются при создании ключа). Так же в ключь может входить не одно поле, а несколько и с разными типами. Но самая высокая скорость работы именно с ключами типа integer. Некоторых СУБД специально оптимизируют код обработки ключей с такими типами, что бы добиться наивысшей скорости работы с подобными сурогатными ключами.
Крометого, при сложном составном ключе из нескольких полей получается некоторая избыточность базы в том, что все значения этих ключей нужно хранить в референсируемых таблицах и составлять более сложные запросы при выборке и обработки данных.
Первичный ключ выполняет только функцию уникальности. Обеспечивает однозначную идентификацию, не повторяемость.
Это минимальный набор полей по которым можно идентифицировать строку.
Если есть уверенность что марка телефона никогда не повторяется, то столбец ID можно вообще выбросить из таблицы.
Если марки повторяются, то добавляют столбец ID для возможности однозначной идентификации строки. Делать составной первичный ключ из двух полей нет смысла.