Целостность данных, первичный и внешний ключи
Целостность [integrity - нетронутость, неприкосновенность, сохранность, целостность] понимается как правильность данных в любой момент времени. Но эта цель может быть достигнута лишь в определенных пределах: СУБД не может контролировать правильность каждого отдельного значения, вводимого в базу данных [хотя каждое значение можно проверить на правдоподобность]. Например, нельзя обнаружить, что вводимое значение 5 [представляющее номер дня недели] в действительности должно быть равно 3. С другой стороны, значение 9 явно будет ошибочным и СУБД должна его отвергнуть. Однако для этого ей следует сообщить, что номера дней недели должны принадлежать набору [1, 2, 3, 4, 5, 6, 7].
Поддержание целостности базы данных может рассматриваться как защита данных от неверных изменений или разрушений [не путать с незаконными изменениями и разрушениями, являющимися проблемой безопасности]. Современные СУБД имеют ряд средств для обеспечения поддержания целостности [так же, как и средств обеспечения поддержания безопасности].
Выделяют три группы правил целостности:
целостность по первичным ключам;
целостность по внешним ключам;
целостность, определяемая пользователем.
Целостность по первичным ключам. Атрибуты, входящие в состав некоторого потенциального ключа не могут принимать Null-значений.
Целостность по внешним ключам. Внешние ключи не должны быть несогласованными, т.е. для каждого значения внешнего ключа должно существовать соответствующее значение первичного ключа в родительском отношении.
Целостность, определяемая пользователем. Для любой конкретной базы данных существует ряд дополнительных специфических правил, которые относятся к ней одной и определяются разработчиком. Чаще всего контролируется:
уникальность тех или иных атрибутов;
диапазон значений [экзаменационная оценка от 2 до 5];
принадлежность набору значений [пол "М" или "Ж"].
Ключ - минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности.
Первичный ключ сущности позволяет идентифицировать ее экземпляры, а внешний – экземпляры сущности, которая находится в связи с данной сущностью.