суббота, 15 августа 2009 г.

БД22

Правила внешних ключей
Правило ссылочной целостности подразумевает состояние БД в конкретный момент времени. Но как избежать временных некорректных ситуаций, которые могут возникнуть при обновлении данных в БД?
Самый простой путь – запретить любые операции, приводимые к нарушению правила ссылочной целостности.
Но при обновлении БД не избежать временного нарушения целостности (НАПРИМЕР, расформировывается группа или в начале учебного года переименовывается группа) необходимо ввести компенсирующие операции, которые “исправят” это временное нарушение целостности.
Эти комплексные операции связаны с внешними ключами, поэтому для любого внешнего ключа при создании связи необходимо ответить на два вопроса:
1) Что должно произойти при попытке удалить объект ссылки внешнего ключа? (НАПРИМЕР, убрать все группы 5 курса из таблицы Группы в конце года) Возможны как минимум два варианта ответов на этот вопрос:
a) ограничить, т.е. не удалять, пока пользователь не удалит ссылающиеся кортежи, т.е. отложить удаление;
b) каскадировать, т.е. удалить, удаляя все соответствующие ссылающиеся кортежи.
2) Что должно произойти при попытке изменить (обновить) значение потенциального ключа, на который имеется ссылка? (НАПРИМЕР: замена названия группы ИНФ-11 на ИНФ-21 в таблице Группы в начале учебного года):
a) ограничить, т.е. отложить до удаления значений ссылающихся кортежей;
b) каскадировать, т.е. обновить во всех ссылающихся кортежах.
Т.е. выбор ответов на эти два вопроса и является заданием (или определением) правил внешних ключей.
3.2.3. Null-значения
Осложнения при обеспечении целостности данных могут быть вызваны неопределенными или отсутствующими значениями. НАПРИМЕР, в каталоге произведений искусства не известен автор картины; в БД Школа дети – сироты (нет родителей).
Для решения проблем отсутствия значений Кодд предложил ввести специальные метки, которые назвал Null-значениями, которые определил так: если данный кортеж имеет Null-значение данного атрибута, то это означает, что в нем значение атрибута отсутствует.
Это не то же, что числовой 0 или пробел, это вообще не значение, а только метка – обозначение отсутствия любого значения.
Но некоторые специалисты по реляционным БД (например, Дейт) считают, что Null-значения не нужны и даже вредны, т.к. это нарушает целостность данных. Но тем не менее большинство современных реляционных БД поддерживают Null-значения.
С использованием Null-значений вводиться правило целостности объектов:
Ни один элемент первичного ключа базового отношения не может быть Null-значением.
Это правило объясняется следующим:
• кортежи отношений соответствуют объектам реального мира;
• по определению эти объекты различимы, т.е. некоторым образом опознаваемы;
• первичные ключи выполняют функцию уникальной идентификации объектов;
• если невозможно идентифицировать объект, то нельзя сказать существует ли он вообще.
Необходимо сделать некоторые уточнения этого правила:
1) это правило касается только базовых отношений (т.е. не вычисляемых, не производных);
2) правило применимо только для первичных ключей, а для альтернативных ключей Null-значения могут быть запрещены или разрешены.
Как же используются Null-значения для внешних ключей?.
• Когда нет данных, т.е. нет соответствующего кортежа в ссылочном отношении (НАПРИМЕР, нет данных о родителях ученика);
• При каскадном удалении. (НАПРИМЕР, на факультете расформировали одну из групп, а студентов этой группы распределяют в другие, но пока точно не известно в какие. Тогда при каскадном удалении этой группы из таблицы Группы удалятся все студенты этой группы из таблицы Студенты. Но нам их не надо удалять, поэтому удобнее временно заменить значение групп в отношении Студенты на Null-значения.
Как можно избежать Null-значений? Использовать значения по умолчанию (ПРИМЕР).
В Microsoft Access, как и во многих современных СУБД, поддерживается Null-значения, но некоторые разработчики их избегают, заменяя значениями по умолчанию.

Профессиональные программы для раскрутки сайтов сделают оптимизацию и продвижение сайта более простым и удобным.

На сайте odica вы можете прочитать немало полезной информации о раскрутке сайтов и продвижении ресурсов