Индекс - это отсортированный список значений полей, предназначенный для ускорения поиска в базе данных.
Интересны, как правило, не сами индексы, а уникальные индексы.
Уникальный индекс представляет собой список значений, в котором каждое значение уникально. К примеру, в таблице базы данных, содержащей паспортные данные уникальный индекс можно создать для поля "номер паспорта", поскольку каждый такой номер является единственным в своём роде. А вот дата рождения уже не уникальна, поэтому индекс по полю "Дата рождения" не может быть уникальным. Возвращаясь к нашей базе данных Forum, нужно заметить, что дата добавления сообщения в форум также не является уникальной, так как несколько участников форума могут добавить свои сообщения одновременно.
Первичный ключ (primary key) представляет собой один из примеров уникальных индексов и применяется для уникальной идентификации записей таблицы. Никакие из двух записей таблицы не могут иметь одинаковых значений первичного ключа. Первичный ключ обычно сокращенно обозначают как PK (primary key).
Как мы уже говорили, в реляционных базах данных практически всегда разные таблицы логически связаны друг с другом. Первичные ключи как раз используются для однозначной организации такой связи.
К примеру, в базе данных Forum таблицы themes и posts связаны между собой следующим образом.
Первичным ключом таблицы themes является id_theme, а таблицы posts - id_post. Обратите внимание, что поле id_theme присутствует и в таблице posts. Каждое значение этого поля в таблице posts является внешним ключом (в данном случае это внешний ключ для первичного ключа таблицы themes). Внешний ключ сокращенно обозначают как FK (foreign key).Как видно из рис.1, внешний ключ ссылается на первичный ключ таблицы themes, устанавливая однозначную логическую связь между записями таблиц themes и posts. Иначе говоря, если внешний ключ для записи (сообщения) с PK=1 в таблице posts имеет значение внешнего ключа равное 1, то это значит, что это сообщение относится к теме с PK=1 таблицы themes.