В каждый момент времени любая БД содержит конкретную конфигурацию значений, которая представляет определённое состояние объекта реального мира. Следовательно, БД нуждается в определении правил целостности, чтобы информировать СУБД об ограничениях реального мира. Например, для атрибутов «рост», «вес» необходимо ограничение неотрицательности. Такого рода правила, характерные для конкретной БД, называются специфическими. Кроме специфических правил существуют общие правила целостности для всех БД. Такие правила связаны с потенциальными, первичными и внешними ключами и будут рассмотрены далее в этой лекции.
Пусть R – некоторое отношение. Тогда потенциальный ключ K для R – это подмножество атрибутов R, обладающих следующими свойствами:
1) уникальность, т.е. нет двух различных кортежей в текущем значении переменной отношения R с одинаковым значением K;
2) неизбыточность, т.е. никакое из подмножеств K не обладает свойством уникальности.
Это свойство применимо только для случая, если потенциальный ключ состоит более чем из одного атрибута. Например, нельзя назначить потенциальным ключом совокупность полей StudentID и Name, иначе этот ключ будет избыточным.
Могут существовать отношения, в которых единственным естественным потенциальным ключом будет комбинация всех атрибутов, но это может быть неудобно. Тогда вводят искусственный потенциальный ключ. Например, в таблице Students совокупность атрибутов {Name, GroupID, Birthdate} представляет собой ключ, но удобнее ввести искусственный ключ – StudentID.
StudentID
Name
GroupID
BirthDate
Казаков Петр
23.04.1990
Васильев Иван
11.05.1991
Шишкина Дарья
23.09.1991
Потенциальные ключи предназначены для обеспечения основного механизма адресации на уровне кортежей, т.е. достаточно указать значение потенциального ключа, по которому можно найти любой кортеж.
Отношение может иметь более одного потенциального ключа, но один из них всегда выбирается в качестве первичного, остальные потенциальные ключи будут в этом случае называться альтернативными.
Например, в таблице Groups:
GroupID
Name
ПМ-41
ПМ-51
GroupID – первичный ключ, а Name – альтернативный. В каждом отношении всегда должен быть один и только один первичный ключ.