
Для различных служебных целей в таблице можно создать ключи:
· первичный ключ (primary key) - множество столбцов, по которым можно уникально идентифицировать запись в таблице. Поля таких столбцов обязательно должны иметь значение и не повторяться. В нашем примере столбец id во всех таблицах может использоваться для первичного ключа;
· уникальный ключ (unical key) - множество столбцов, чье общее значение должно быть уникально. Например, если в уникальный ключ входит два столбца, то две записи могут иметь одинаковое значение в первом столбце только в том случае, если значения во втором столбце у них различны;
· внешний ключ (foreign key) - определяет ссылку на запись в другой таблице. Значения полей столбца входящего во внешней ключ одной таблицы идентичны значениям полей столбца другой таблицы (обычно это первичный ключ), на которую ссылается ключ. Пустое значение (null) для внешних ключей разрешается, что означает отсутствие ссылки на данный момент. Использование внешних ключей устраняет избыточность информации в базе данных, позволяя не вводить одни и те же данные несколько раз. В нашем примере столбцы fk_author и fk_janr являются внешними ключами, ссылающиеся на первичные ключи таблиц авторов и жанров соответственно. Таблицы без внешних ключей, как таблицы жанров и авторов называют словарями или справочниками.
Кроме ключей обычно позволяется наложить ограничения (constraints) на значения столбцов таблицы. За правильностью обычно следит СУБД. Например, если попытаться вставить в таблицу две записи с одинаковым значением первичного ключа, то сразу возникнет ошибка. То же самое произойдет, если в качестве значения внешнего ключа указать ссылку на не существующую запись или значение поля не удовлетворяет условию ограничения.