ОРГАНИЗАЦИЯ БАЗ ДАННЫХ И ЗНАНИЙ ТЕМА 3 РЕЛЯЦИОННЫЙ ПОДХОД К ОРГАНИЗАЦИИ БД. СТРУКТУРНАЯ, ЦЕЛОСТНАЯ, МАНИПУЛЯЦИОННАЯ ЧАСТИ БД.
ТЕМА 3. РЕЛЯЦИОННАЯ МОДЕЛЬ ДАННЫХ Общая характеристика реляционной модели данных Реляционная модель основана на теории множеств и математической логике. Такой фундамент обеспечивает математическую строгость реляционной модели данных. Элементы теории множеств: Элементы теории множеств: множества множества отношения степени n отношения степени n отношение эквивалентности отношение эквивалентности отношения порядка отношения порядка функциональное отношение функциональное отношение транзитивное замыкание отношений транзитивное замыкание отношений Операции над множествами: Операции над множествами: объединение, пересечение, разность объединение, пересечение, разность декартово произведение. декартово произведение.
Согласно Дейту, реляционная модель состоит из трех частей: I. Структурной части. II. Целостной части. III. Манипуляционной части. Структурная часть описывает, какие объекты рассматриваются реляционной моделью. Постулируется, что единственной структурой данных, используемой в реляционной модели, являются нормализованные n-ббарные отношения. Структурная часть описывает, какие объекты рассматриваются реляционной моделью. Постулируется, что единственной структурой данных, используемой в реляционной модели, являются нормализованные n-ббарные отношения. Целостная часть описывает ограничения специального вида, которые должны выполняться для любых отношений в любых реляционных базах данных. Это целостность сущностей и целостность внешних ключей. Целостная часть описывает ограничения специального вида, которые должны выполняться для любых отношений в любых реляционных базах данных. Это целостность сущностей и целостность внешних ключей. Манипуляционная часть описывает два эквивалентных способа манипулирования реляционными данными - реляционную алгебру и реляционное исчисление. Манипуляционная часть описывает два эквивалентных способа манипулирования реляционными данными - реляционную алгебру и реляционное исчисление.
2.2. Структурная часть Реляционная модель требует, чтобы типы используемых данных были простыми. Простые, или атомббарные, типы данных не обладают внутренней структурой. Данные такого типа называют скалярами. К простым типам данных относятся следующие типы: Логический. Логический. Строковый. Строковый. Численный. Численный. Различные языки программирования могут расширять и уточнять этот список, добавляя такие типы как: Целый. Целый. Вещественный. Вещественный. Дата. Дата. Время. Время. Денежный. Денежный. Перечислимый. Перечислимый. Интервальный. Интервальный. И т.д.… И т.д.…
Понятие атомарности - довольно относительно. Так, строковый тип данных можно рассматривать как одномерный массив символов, а целый тип данных - как набор битов. Важно лишь то, что при переходе на такой низкий уровень теряется семантика (смысл) данных. Если строку, выражающую, например, фамилию сотрудника, разложить в массив символов, то при этом теряется смысл такой строки как единого целого. Понятие атомарности - довольно относительно. Так, строковый тип данных можно рассматривать как одномерный массив символов, а целый тип данных - как набор битов. Важно лишь то, что при переходе на такой низкий уровень теряется семантика (смысл) данных. Если строку, выражающую, например, фамилию сотрудника, разложить в массив символов, то при этом теряется смысл такой строки как единого целого. Для реляционной модели данных тип используемых данных не важен. Требование, чтобы тип данных был простым, нужно понимать так, что в реляционных операциях не должна учитываться внутренняя структура данных. Для реляционной модели данных тип используемых данных не важен. Требование, чтобы тип данных был простым, нужно понимать так, что в реляционных операциях не должна учитываться внутренняя структура данных. Должны быть описаны действия, которые можно производить с данными как с единым целым, например, для строк возможна операция конкатенации, массив рассматривать как единое целое и не использовать поэлементных операций. Более того, можно создать свой тип данных, описать возможные действия с этим типом данных, и, если в операциях не требуется знание внутренней структуры данных, то такой тип данных также будет простым с т.з. реляционной теории. Должны быть описаны действия, которые можно производить с данными как с единым целым, например, для строк возможна операция конкатенации, массив рассматривать как единое целое и не использовать поэлементных операций. Более того, можно создать свой тип данных, описать возможные действия с этим типом данных, и, если в операциях не требуется знание внутренней структуры данных, то такой тип данных также будет простым с т.з. реляционной теории.
Фундаментальным понятием реляционной модели данных является понятие отношения. С понятием отношение связаны такие понятия как: Фундаментальным понятием реляционной модели данных является понятие отношения. С понятием отношение связаны такие понятия как: домен, домен, атрибут, атрибут, кортеж, кортеж, схема отношения, схема отношения, тело отношения, тело отношения, заголовок отношения, заголовок отношения, степень (-арность) отношения, степень (-арность) отношения, мощность отношения, мощность отношения, атомарность значения атрибута, атомарность значения атрибута, первичный ключ. первичный ключ. Хотя любое отношение можно изобразить в виде таблицы, нужно четко понимать, что отношения не являются таблицами. Это близкие, но не совпадающие понятия. Термины, которыми оперирует реляционная модель данных, имеют соответствующие "табличные" синонимы: Хотя любое отношение можно изобразить в виде таблицы, нужно четко понимать, что отношения не являются таблицами. Это близкие, но не совпадающие понятия. Термины, которыми оперирует реляционная модель данных, имеют соответствующие "табличные" синонимы:
Реляционный термин Соответствующий "табличный" термин База данных Набор таблиц Схема базы данных Набор заголовков таблиц Отношение Таблица Заголовок отношения Заголовок таблицы Тело отношения Тело таблицы Атрибут отношения Наименование столбца таблицы Кортеж отношения Строка таблицы Степень(-арность) отношения Количество столбцов таблицы Мощность отношения Количество строк таблицы Домены и типы данных Типы данные в ячейках таблицы
2.3. Целостность реляционных данных Во второй части реляционной модели данных определяются два основных ограничения, которые должны выполняться в любой реляционной базе данных. Это: Во второй части реляционной модели данных определяются два основных ограничения, которые должны выполняться в любой реляционной базе данных. Это: 1. Целостность сущностей. 2. Целостность внешних ключей (ссылок). Может быть еще и дополнительное ограничение: 3. Целостность, определяемая пользователем. Целостность (от англ. integrity – нетронутость, неприкосновенность, сохранность, целостность) – понимается как правильность данных в любой момент времени. Но эта цель может быть достигнута лишь в определенных пределах: СУБД не может контролировать правильность каждого отдельного значения, вводимого в базу данных (хотя каждое значение можно проверить на правдоподобность). Целостность (от англ. integrity – нетронутость, неприкосновенность, сохранность, целостность) – понимается как правильность данных в любой момент времени. Но эта цель может быть достигнута лишь в определенных пределах: СУБД не может контролировать правильность каждого отдельного значения, вводимого в базу данных (хотя каждое значение можно проверить на правдоподобность). Например, нельзя обнаружить, что вводимое значение 5 (представляющее номер дня недели) в действительности должно быть равно 3. С другой стороны, значение 9 явно будет ошибочным и СУБД должна его отвергнуть. Однако для этого ей следует сообщить, что номера дней недели должны принадлежать набору (1,2,3,4,5,6,7). Например, нельзя обнаружить, что вводимое значение 5 (представляющее номер дня недели) в действительности должно быть равно 3. С другой стороны, значение 9 явно будет ошибочным и СУБД должна его отвергнуть. Однако для этого ей следует сообщить, что номера дней недели должны принадлежать набору (1,2,3,4,5,6,7).
Поддержание целостности базы данных может рассматриваться как защита данных от неверных изменений или разрушений (не путать с незаконными изменениями и разрушениями, являющимися проблемой безопасности). Поддержание целостности базы данных может рассматриваться как защита данных от неверных изменений или разрушений (не путать с незаконными изменениями и разрушениями, являющимися проблемой безопасности). Для того чтобы обойти проблему неполных или неизвестных данных, в базах данных могут использоваться типы данных, пополненные так называемым null-значением (некий маркер, показывающий, что значение неизвестно). Для того чтобы обойти проблему неполных или неизвестных данных, в базах данных могут использоваться типы данных, пополненные так называемым null-значением (некий маркер, показывающий, что значение неизвестно). Основоположник реляционного подхода Кодд считал null-значения неотъемлемой частью реляционной модели. Дейт, один из крупнейших теоретиков реляционной модели, выступал категорически против. Основоположник реляционного подхода Кодд считал null-значения неотъемлемой частью реляционной модели. Дейт, один из крупнейших теоретиков реляционной модели, выступал категорически против.
В ситуации, когда возможно появление неизвестных или неполных данных, разработчик имеет на выбор два варианта. В ситуации, когда возможно появление неизвестных или неполных данных, разработчик имеет на выбор два варианта. Первый вариант состоит в том, чтобы ограничиться использованием обычных типов данных и не использовать null-значения, а вместо неизвестных данных вводить либо нулевые значения, либо значения специального вида - например, договориться, что строка "АДРЕС НЕИЗВЕСТЕН" и есть те данные, которые нужно вводить вместо неизвестного адреса. Первый вариант состоит в том, чтобы ограничиться использованием обычных типов данных и не использовать null-значения, а вместо неизвестных данных вводить либо нулевые значения, либо значения специального вида - например, договориться, что строка "АДРЕС НЕИЗВЕСТЕН" и есть те данные, которые нужно вводить вместо неизвестного адреса. Второй вариант состоит в использовании null- значений вместо неизвестных данных. Второй вариант состоит в использовании null- значений вместо неизвестных данных. Практически все реализации современных реляционных СУБД позволяют использовать null- значения, несмотря на их недостаточную теоретическую обоснованность. Практически все реализации современных реляционных СУБД позволяют использовать null- значения, несмотря на их недостаточную теоретическую обоснованность.
ANDFTU FFFF TFTU UFUU ORFTU FFTU TTTT UUTU NOT FT TF UU Таблица истинности AND Таблица истинности OR Таблица истинности NOT Парадокс 1. Null-значение не равно самому себе. Действительно, выражение null = null дает значение не ИСТИНА, а НЕИЗВЕСТНО. Значит выражение не обязательно ИСТИНА! Парадокс 2. Неверно также, что null-значение не равно самому себе! Действительно, выражение null null также принимает значение не ИСТИНА, а НЕИЗВЕСТНО! Значит также, что и выражение тоже не обязательно ЛОЖЬ! Парадокс 3. не обязательно ИСТИНА. Значит, в трехзначной логике не работает принцип исключенного третьего (любое высказывание либо истинно, либо ложно).
Потенциальные ключи Потенциальные ключи Свойством уникальности в пределах отношения могут обладать отдельные атрибуты кортежей или группы атрибутов. Такие уникальные атрибуты удобно использовать для идентификации кортежей. Свойством уникальности в пределах отношения могут обладать отдельные атрибуты кортежей или группы атрибутов. Такие уникальные атрибуты удобно использовать для идентификации кортежей. Определение 1. Пусть дано отношение R. Подмножество атрибутов K отношения R будем называть потенциальным ключом, если K обладает следующими свойствами: Определение 1. Пусть дано отношение R. Подмножество атрибутов K отношения R будем называть потенциальным ключом, если K обладает следующими свойствами: 1) Свойством уникальности - в отношении не может быть двух различных кортежей, с одинаковым значением K. 2) Свойством неизбыточности - никакое подмножество в K не обладает свойством уникальности. Любое отношение имеет по крайней мере один потенциальный ключ. Если никакой атрибут или группа атрибутов не являются потенциальным ключом, то все атрибуты вместе образуют потенциальный ключ. Любое отношение имеет по крайней мере один потенциальный ключ. Если никакой атрибут или группа атрибутов не являются потенциальным ключом, то все атрибуты вместе образуют потенциальный ключ. Потенциальный ключ, состоящий из одного атрибута, называется простым. Потенциальный ключ, состоящий из нескольких атрибутов, называется составным.
Отношение может иметь несколько потенциальных ключей. Традиционно, один из потенциальных ключей объявляется первичным, а остальные - альтернативными. Различия между первичным и альтернативными ключами могут быть важны в конкретной реализации реляционной СУБД, но с точки зрения реляционной модели данных, нет оснований выделять таким образом один из потенциальных ключей. Замечание. Понятие потенциального ключа является семантическим понятием и отражает некоторый смысл (трактовку) понятий из конкретной предметной области. Потенциальные ключи служат средством идентификации объектов предметной области, данные о которых хранятся в отношении. Объекты предметной области должны быть различимы Потенциальные ключи служат средством идентификации объектов предметной области, данные о которых хранятся в отношении. Объекты предметной области должны быть различимы Потенциальные ключи служат единственным средством адресации на уровне кортежей в отношении. Точно указать какой-нибудь кортеж можно только зная значение его потенциального ключа. Потенциальные ключи служат единственным средством адресации на уровне кортежей в отношении. Точно указать какой-нибудь кортеж можно только зная значение его потенциального ключа.
Табельный номер ФамилияЗарплата 1Иванов Петров Сидоров 3000 ABC 1Иванов Петров Сидоров 3000 Отношение "Сотрудники" В таблице имеется три потенциальных ключа - в каждой колонке таблицы содержатся уникальные данные. Однако среди сотрудников могут быть однофамильцы и сотрудники с одинаковой зарплатой. Табельный же номер по сути свой уникален для каждого сотрудника. Здесь невозможно судить, не понимая смысла данных, может или не может в этом отношении появиться, например, кортеж (1, Петров, 3000). Если бы такой кортеж появился, то мы точно смогли бы сказать, что не является альтернативным ключом - ни один из атрибутов по отдельности. Но мы не сможем сказать, что же является первичным ключом.
Целостность сущностей Целостность сущностей Т.к. потенциальные ключи фактически служат идентификаторами объектов предметной области (т.е. предназначены для различения объектов), то значения этих идентификаторов не могут содержать неизвестные значения. Действительно, если бы идентификаторы могли содержать null- значения, то мы не могли бы дать ответ "да" или "нет" на вопрос, совпадают или нет два идентификатора. Т.к. потенциальные ключи фактически служат идентификаторами объектов предметной области (т.е. предназначены для различения объектов), то значения этих идентификаторов не могут содержать неизвестные значения. Действительно, если бы идентификаторы могли содержать null- значения, то мы не могли бы дать ответ "да" или "нет" на вопрос, совпадают или нет два идентификатора. Это определяет следующее правило целостности сущностей: Это определяет следующее правило целостности сущностей: Правило целостности сущностей. Атрибуты, входящие в состав некоторого потенциального ключа не могут принимать null-значений. Правило целостности сущностей. Атрибуты, входящие в состав некоторого потенциального ключа не могут принимать null-значений. Внешние ключи Внешние ключи Различные объекты предметной области, информация о которых хранится в базе данных, всегда взаимосвязаны друг с другом. Например, накладная на поставку товара содержит список товаров с количествами и ценами, сотрудник предприятия имеет детей, числится в подразделении и т.д. Термины "содержит", "имеет", "числится" отражают взаимосвязи между понятиями "накладная" и "список товаров", "сотрудник" и "дети", "сотрудник" и "подразделение". Такие взаимосвязи отражаются в реляционных базах данных при помощи внешних ключей, связывающих несколько отношений. Различные объекты предметной области, информация о которых хранится в базе данных, всегда взаимосвязаны друг с другом. Например, накладная на поставку товара содержит список товаров с количествами и ценами, сотрудник предприятия имеет детей, числится в подразделении и т.д. Термины "содержит", "имеет", "числится" отражают взаимосвязи между понятиями "накладная" и "список товаров", "сотрудник" и "дети", "сотрудник" и "подразделение". Такие взаимосвязи отражаются в реляционных базах данных при помощи внешних ключей, связывающих несколько отношений.
Номер поставщика Наименование поставщика Номер детали Наименование детали Поставляемое количество 1Иванов 1Болт 100 1Иванов 2Гайка 200 1Иванов 3Винт 300 2Петров 1Болт 150 2Петров 2Гайка 250 3Сидоров 3Винт 1000 Потенциальным ключом этого отношения может выступать пара атрибутов {"Номер поставщика", "Номер детали"} Приведенный способ хранения данных обладает рядом недостатков: если изменилось наименование поставщика, то это наименование нужно одновременно изменить во всех кортежах, где оно встречается, иначе данные станут противоречивыми. То же самое с наименованиями деталей. Значит, данные хранятся в нашем отношении с большой избыточностью.если изменилось наименование поставщика, то это наименование нужно одновременно изменить во всех кортежах, где оно встречается, иначе данные станут противоречивыми. То же самое с наименованиями деталей. Значит, данные хранятся в нашем отношении с большой избыточностью.
Если некоторый поставщик (Петров) временно прекратил поставки деталей, то удаляя кортежи, в которых хранится информация о поставках этого поставщика, мы потеряем данные о самом Петрове как потенциальном поставщике.Если некоторый поставщик (Петров) временно прекратил поставки деталей, то удаляя кортежи, в которых хранится информация о поставках этого поставщика, мы потеряем данные о самом Петрове как потенциальном поставщике. Выйти из этого положения, оставив в отношении кортеж типа (2, Петров, NULL, NULL, NULL) мы не можем, т.к. атрибут "Номер детали" входит в состав потенциального ключа и не может содержать null-значений. Выйти из этого положения, оставив в отношении кортеж типа (2, Петров, NULL, NULL, NULL) мы не можем, т.к. атрибут "Номер детали" входит в состав потенциального ключа и не может содержать null-значений. Если некоторая деталь временно не поставляется никаким поставщиком мы не можем хранить информацию об этом поставщике.Если некоторая деталь временно не поставляется никаким поставщиком мы не можем хранить информацию об этом поставщике. если никем не поставляется какая-либо деталь, то мы не можем хранить информацию об этой детали.если никем не поставляется какая-либо деталь, то мы не можем хранить информацию об этой детали. Подобные проблемы возникают потому, что мы смешали в одном отношении различные объекты предметной области - и данные о поставщиках, и данные о деталях, и данные о поставках деталей. Подобные проблемы возникают потому, что мы смешали в одном отношении различные объекты предметной области - и данные о поставщиках, и данные о деталях, и данные о поставках деталей. Говорят, что это отношение плохо нормализовано (просто нормализованным оно является хотя бы потому, что оно есть отношение и, следовательно, автоматически находится в 1НФ). Говорят, что это отношение плохо нормализовано (просто нормализованным оно является хотя бы потому, что оно есть отношение и, следовательно, автоматически находится в 1НФ).
Разнесем данные по трем отношениям - "Поставщики", "Детали", "Поставки". Разнесем данные по трем отношениям - "Поставщики", "Детали", "Поставки". Связь отношений определяется семантикой предметной области и описывается фразами: Связь отношений определяется семантикой предметной области и описывается фразами: o "Поставщики выполняют Поставки", o "Детали поставляются через Поставки". Эти две взаимосвязи косвенно определяют новую взаимосвязь между "Поставщиками" и "Деталями": "Детали поставляются Поставщиками". Эти две взаимосвязи косвенно определяют новую взаимосвязь между "Поставщиками" и "Деталями": "Детали поставляются Поставщиками". Эти фразы отражают различные типы взаимосвязей. Более точно можно переформулировать фразы: Эти фразы отражают различные типы взаимосвязей. Более точно можно переформулировать фразы: o "Один Поставщик может выполнять несколько Поставок", o "Одна Деталь может поставляться несколькими Поставками". Это пример взаимосвязи типа "один-ко-многим". Взаимосвязь между "Поставщиками" и "Деталями" можно переформулировать так: Взаимосвязь между "Поставщиками" и "Деталями" можно переформулировать так: o "Несколько Деталей может поставляться несколькими Поставщиками". Это пример взаимосвязи типа "много-ко-многим".
В реляционных базах данных основными являются взаимосвязи типа "один-ко-многим". Взаимосвязи типа "много-ко-многим" реализуются использованием нескольких взаимосвязей типа "один-ко-многим". В реляционных базах данных основными являются взаимосвязи типа "один-ко-многим". Взаимосвязи типа "много-ко-многим" реализуются использованием нескольких взаимосвязей типа "один-ко-многим". Отношение, входящее в связь со стороны "один" (например, "Поставщики"), называют родительским отношением. Отношение, входящее в связь со стороны "один" (например, "Поставщики"), называют родительским отношением. Отношение, входящее в связь со стороны "много" (например, "Поставки"), называется дочернем отношением. Отношение, входящее в связь со стороны "много" (например, "Поставки"), называется дочернем отношением. Механизм реализации взаимосвязи "один-ко-многим" состоит в том, что в дочернее отношение добавляются атрибуты, являющиеся ссылками на ключевые атрибуты родительского отношения. Эти атрибуты и являются внешними ключами, определяющими, с какими кортежами родительского отношения связаны кортежи дочернего отношения. Такие атрибуты еще называют мигрирующими из родительского отношения. Механизм реализации взаимосвязи "один-ко-многим" состоит в том, что в дочернее отношение добавляются атрибуты, являющиеся ссылками на ключевые атрибуты родительского отношения. Эти атрибуты и являются внешними ключами, определяющими, с какими кортежами родительского отношения связаны кортежи дочернего отношения. Такие атрибуты еще называют мигрирующими из родительского отношения.
Номер поставщика Наименование поставщика 1Иванов 2Петров 3Сидоров Номер детали Наименование детали 1Болт 2Гайка 3Винт Номер поставщика Номер детали Поставляемое количество Отношение "Поставщики" Отношение "Детали" Отношение "Поставки" В отношении "Поставки" атрибуты "Номер поставщика" и "Номер детали" являются ссылками на ключевые атрибуты отношений "Поставщики" и "Детали", и, следовательно, являются внешними ключами.
Декомпозиция отношений выполнялась с целью минимизировать избыточность данных, а внешние ключи использовались для организации связей между отношениями. Если эти связи будут разрушены, система станет в лучшем случае ненадежной, а в худшем откажется работать. Ограничения ссылочной целостности (referential integrity constraints) поддерживают и защищают эти связи. Декомпозиция отношений выполнялась с целью минимизировать избыточность данных, а внешние ключи использовались для организации связей между отношениями. Если эти связи будут разрушены, система станет в лучшем случае ненадежной, а в худшем откажется работать. Ограничения ссылочной целостности (referential integrity constraints) поддерживают и защищают эти связи. На самом деле существует только одно ограничение ссылочной целостности: внешние ключи не могут «осиротеть». Иначе говоря, каждой записи таблицы, содержащей внешний ключ, должна соответствовать запись в другой таблице, содержащей первичный ключ. Кортежи, содержащие внешние ключи, для которых не существует соответствующих значений ключа-кандидата в ссылочной таблице, называются осиротевшими сущностями. Причин их появления три: На самом деле существует только одно ограничение ссылочной целостности: внешние ключи не могут «осиротеть». Иначе говоря, каждой записи таблицы, содержащей внешний ключ, должна соответствовать запись в другой таблице, содержащей первичный ключ. Кортежи, содержащие внешние ключи, для которых не существует соответствующих значений ключа-кандидата в ссылочной таблице, называются осиротевшими сущностями. Причин их появления три: кортеж, добавленный в таблицу, содержит значение внешнего ключа, которому не соответствует ни одно значение ключа-кандидата в ссылочной таблице; кортеж, добавленный в таблицу, содержит значение внешнего ключа, которому не соответствует ни одно значение ключа-кандидата в ссылочной таблице; изменилось значение ключа-кандидата в ссылочной таблице; изменилось значение ключа-кандидата в ссылочной таблице; запись, на которую ссылается внешний ключ, удалена из ссылочной таблицы. запись, на которую ссылается внешний ключ, удалена из ссылочной таблицы.
Стратегии поддержания ссылочной целостности Стратегии поддержания ссылочной целостности Существуют две основные стратегии поддержания ссылочной целостности: Существуют две основные стратегии поддержания ссылочной целостности: RESTRICT (ОГРАНИЧИТЬ) CASCADE (КАСКАДИРОВАТЬ) I. RESTRICT - не разрешать выполнение операции, приводящей к нарушению ссылочной целостности. Это самая простая стратегия, требующая только проверки, имеются ли кортежи в дочернем отношении, связанные с некоторым кортежем в родительском отношении. Это самая простая стратегия, требующая только проверки, имеются ли кортежи в дочернем отношении, связанные с некоторым кортежем в родительском отношении. II. CASCADE - разрешить выполнение требуемой операции, но внести при этом необходимые поправки в других отношениях так, чтобы не допустить нарушения ссылочной целостности и сохранить все имеющиеся связи. Изменение начинается в родительском отношении и каскадно выполняется в дочернем отношении. В реализации этой стратегии имеется одна тонкость, заключающаяся в том, что дочернее отношение само может быть родительским для некоторого третьего отношения. При этом может дополнительно потребоваться выполнение какой-либо стратегии и для этой связи и т.д. Изменение начинается в родительском отношении и каскадно выполняется в дочернем отношении. В реализации этой стратегии имеется одна тонкость, заключающаяся в том, что дочернее отношение само может быть родительским для некоторого третьего отношения. При этом может дополнительно потребоваться выполнение какой-либо стратегии и для этой связи и т.д.
Если при этом какая-либо из каскадных операций (любого уровня) не может быть выполнена, то необходимо отказаться от первоначальной операции и вернуть базу данных в исходное состояние. Если при этом какая-либо из каскадных операций (любого уровня) не может быть выполнена, то необходимо отказаться от первоначальной операции и вернуть базу данных в исходное состояние. Это самая сложная стратегия, но она хороша тем, что при этом не нарушается связь между кортежами родительского и дочернего отношений. Это самая сложная стратегия, но она хороша тем, что при этом не нарушается связь между кортежами родительского и дочернего отношений. Эти стратегии являются стандартными и присутствуют во всех СУБД, в которых имеется поддержка ссылочной целостности. Эти стратегии являются стандартными и присутствуют во всех СУБД, в которых имеется поддержка ссылочной целостности. Рассматриваются также дополнительные стратегии поддержания ссылочной целостности: Рассматриваются также дополнительные стратегии поддержания ссылочной целостности: SET NULL (УСТАНОВИТЬ В NULL) SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) 1. SET NULL - разрешить выполнение требуемой операции, но все возникающие некорректные значения внешних ключей изменять на null-значения.
Стратегия SET NULL имеет два недостатка: Во-первых, для нее требуется допустить использование null -значений. Во-вторых, кортежи дочернего отношения теряют всякую связь с кортежами родительского отношения. Установить, с каким кортежем родительского отношения были связаны измененные кортежи дочернего отношения, после выполнения операции уже нельзя. 2. SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - разрешить выполнение требуемой операции, но все возникающие некорректные значения внешних ключей изменять на некоторое значение, принятое по умолчанию.
Достоинство этой стратегии по сравнению с предыдущей в том, что она позволяет не пользоваться null-значеними. Достоинство этой стратегии по сравнению с предыдущей в том, что она позволяет не пользоваться null-значеними. Недостатки заключаются в следующем. Недостатки заключаются в следующем. Во-первых, в родительском отношении должен быть некий кортеж, потенциальный ключ которого принят как значение по умолчанию для внешних ключей. В качестве такого "кортежа по умолчанию" обычно принимают специальный кортеж, заполненный нулевыми значениями (не null- значениями!). Этот кортеж нельзя удалять из родительского отношения, и в этом кортеже нельзя изменять значение потенциального ключа. Таким образом, не все кортежи родительского отношения становятся равнозначными, поэтому приходится прилагать дополнительные усилия для отслеживания этой неравнозначности. Это плата за отказ от использования null-значений. Во-первых, в родительском отношении должен быть некий кортеж, потенциальный ключ которого принят как значение по умолчанию для внешних ключей. В качестве такого "кортежа по умолчанию" обычно принимают специальный кортеж, заполненный нулевыми значениями (не null- значениями!). Этот кортеж нельзя удалять из родительского отношения, и в этом кортеже нельзя изменять значение потенциального ключа. Таким образом, не все кортежи родительского отношения становятся равнозначными, поэтому приходится прилагать дополнительные усилия для отслеживания этой неравнозначности. Это плата за отказ от использования null-значений.
Во-вторых, как и в предыдущем случае, кортежи дочернего отношения теряют всякую связь с кортежами родительского отношения. Установить, с каким кортежем родительского отношения были связаны измененные кортежи дочернего отношения, после выполнения операции уже нельзя. Во-вторых, как и в предыдущем случае, кортежи дочернего отношения теряют всякую связь с кортежами родительского отношения. Установить, с каким кортежем родительского отношения были связаны измененные кортежи дочернего отношения, после выполнения операции уже нельзя. В некоторых реализация СУБД рассматривается еще одна стратегия поддержания ссылочной целостности: В некоторых реализация СУБД рассматривается еще одна стратегия поддержания ссылочной целостности: IGNORE (ИГНОРИРОВАТЬ) - выполнять операции, не обращая внимания на нарушения ссылочной целостности. IGNORE (ИГНОРИРОВАТЬ) - выполнять операции, не обращая внимания на нарушения ссылочной целостности. Конечно, это не стратегия, а отказ от поддержки ссылочной целостности. В этом случае в дочернем отношении могут появляться некорректные значения внешних ключей, и вся ответственность за целостность базы данных ложится на пользователя. Конечно, это не стратегия, а отказ от поддержки ссылочной целостности. В этом случае в дочернем отношении могут появляться некорректные значения внешних ключей, и вся ответственность за целостность базы данных ложится на пользователя. В дополнение к приведенным стратегиям пользователь может придумать свою уникальную стратегию поддержания ссылочной целостности. В дополнение к приведенным стратегиям пользователь может придумать свою уникальную стратегию поддержания ссылочной целостности.
Применение стратегий поддержания ссылочной целостности Применение стратегий поддержания ссылочной целостности При обновлении кортежа в родительском отношении При обновлении кортежа в родительском отношении Допустимые стратегии: Допустимые стратегии: RESTRICT (ОГРАНИЧИТЬ) - не разрешать обновление, если имеется хотя бы один кортеж в дочернем отношении, ссылающийся на обновляемый кортеж. RESTRICT (ОГРАНИЧИТЬ) - не разрешать обновление, если имеется хотя бы один кортеж в дочернем отношении, ссылающийся на обновляемый кортеж. CASCADE (КАСКАДИРОВАТЬ) - выполнить обновление и каскадно изменить значения внешних ключей во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж. CASCADE (КАСКАДИРОВАТЬ) - выполнить обновление и каскадно изменить значения внешних ключей во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж. SET NULL (УСТАНОВИТЬ В NULL) - выполнить обновление и во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж, изменить значения внешних ключей на null-значение. SET NULL (УСТАНОВИТЬ В NULL) - выполнить обновление и во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж, изменить значения внешних ключей на null-значение. SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - выполнить обновление и во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж, изменить значения внешних ключей на некоторое значение, принятое по умолчанию. SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - выполнить обновление и во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж, изменить значения внешних ключей на некоторое значение, принятое по умолчанию. IGNORE (ИГНОРИРОВАТЬ) - выполнить обновление, не обращая внимания на нарушения ссылочной целостности. IGNORE (ИГНОРИРОВАТЬ) - выполнить обновление, не обращая внимания на нарушения ссылочной целостности.
При удалении кортежа в родительском отношении При удалении кортежа в родительском отношении Допустимые стратегии: Допустимые стратегии: RESTRICT (ОГРАНИЧИТЬ) - не разрешать удаление, если имеется хотя бы один кортеж в дочернем отношении, ссылающийся на удаляемый кортеж. RESTRICT (ОГРАНИЧИТЬ) - не разрешать удаление, если имеется хотя бы один кортеж в дочернем отношении, ссылающийся на удаляемый кортеж. CASCADE (КАСКАДИРОВАТЬ) - выполнить удаление и каскадно удалить кортежи в дочернем отношении, ссылающиеся на удаляемый кортеж. CASCADE (КАСКАДИРОВАТЬ) - выполнить удаление и каскадно удалить кортежи в дочернем отношении, ссылающиеся на удаляемый кортеж. SET NULL (УСТАНОВИТЬ В NULL) - выполнить удаление и во всех кортежах дочернего отношения, ссылающихся на удаляемый кортеж, изменить значения внешних ключей на null-значение. SET NULL (УСТАНОВИТЬ В NULL) - выполнить удаление и во всех кортежах дочернего отношения, ссылающихся на удаляемый кортеж, изменить значения внешних ключей на null-значение. SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - выполнить удаление и во всех кортежах дочернего отношения, ссылающихся на удаляемый кортеж, изменить значения внешних ключей на некоторое значение, принятое по умолчанию. SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - выполнить удаление и во всех кортежах дочернего отношения, ссылающихся на удаляемый кортеж, изменить значения внешних ключей на некоторое значение, принятое по умолчанию. IGNORE (ИГНОРИРОВАТЬ) - выполнить удаление, не обращая внимания на нарушения ссылочной целостности. IGNORE (ИГНОРИРОВАТЬ) - выполнить удаление, не обращая внимания на нарушения ссылочной целостности.
При вставке кортежа в дочернее отношение При вставке кортежа в дочернее отношение Допустимые стратегии: Допустимые стратегии: RESTRICT (ОГРАНИЧИТЬ) - не разрешать вставку, если внешний ключ во вставляемом кортеже не соответствует ни одному значению потенциального ключа родительского отношения. RESTRICT (ОГРАНИЧИТЬ) - не разрешать вставку, если внешний ключ во вставляемом кортеже не соответствует ни одному значению потенциального ключа родительского отношения. SET NULL (УСТАНОВИТЬ В NULL) - вставить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а null-значение. SET NULL (УСТАНОВИТЬ В NULL) - вставить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а null-значение. SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - вставить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а некоторое значение, принятое по умолчанию. SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - вставить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а некоторое значение, принятое по умолчанию. IGNORE (ИГНОРИРОВАТЬ) - вставить кортеж, не обращая внимания на нарушения ссылочной целостности. IGNORE (ИГНОРИРОВАТЬ) - вставить кортеж, не обращая внимания на нарушения ссылочной целостности.
При обновлении кортежа в дочернем отношении При обновлении кортежа в дочернем отношении Допустимые стратегии: RESTRICT (ОГРАНИЧИТЬ) - не разрешать обновление, если внешний ключ в обновляемом кортеже становится не соответствующим ни одному значению потенциального ключа родительского отношения. RESTRICT (ОГРАНИЧИТЬ) - не разрешать обновление, если внешний ключ в обновляемом кортеже становится не соответствующим ни одному значению потенциального ключа родительского отношения. SET NULL (УСТАНОВИТЬ В NULL) - обновить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а null-значение. SET NULL (УСТАНОВИТЬ В NULL) - обновить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а null-значение. SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - обновить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а некоторое значение, принятое по умолчанию. SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - обновить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а некоторое значение, принятое по умолчанию. IGNORE (ИГНОРИРОВАТЬ) - обновить кортеж, не обращая внимания на нарушения ссылочной целостности. IGNORE (ИГНОРИРОВАТЬ) - обновить кортеж, не обращая внимания на нарушения ссылочной целостности.
Выводы Выводы Современные СУБД допускают использование null-значений, т.к. данные часто бывают неполными или неизвестными. Современные СУБД допускают использование null-значений, т.к. данные часто бывают неполными или неизвестными. Использование null-значения связано с применением трехзначной логики (three- valued logic, 3VL). Использование null-значения связано с применением трехзначной логики (three- valued logic, 3VL). Средством, позволяющим однозначно идентифицировать кортежи отношения, являются потенциальные ключи отношения. Средством, позволяющим однозначно идентифицировать кортежи отношения, являются потенциальные ключи отношения. Потенциальный ключ отношения - это набор атрибутов отношения, обладающий свойствами уникальности и неизбыточности. Доступ к конкретному кортежу можно получить, лишь зная значение потенциального ключа для этого кортежа. Потенциальный ключ отношения - это набор атрибутов отношения, обладающий свойствами уникальности и неизбыточности. Доступ к конкретному кортежу можно получить, лишь зная значение потенциального ключа для этого кортежа.
Традиционно один из потенциальных ключей объявляется первичным ключом, остальные - альтернативными ключами. Традиционно один из потенциальных ключей объявляется первичным ключом, остальные - альтернативными ключами. Потенциальный ключ, состоящий из одного атрибута, называется простым. Потенциальный ключ, состоящий из нескольких атрибутов, называется составным. Потенциальный ключ, состоящий из одного атрибута, называется простым. Потенциальный ключ, состоящий из нескольких атрибутов, называется составным. Отношения связываются друг с другом при помощи внешних ключей. Отношения связываются друг с другом при помощи внешних ключей. Внешний ключ отношения - это набор атрибутов отношения, содержащий ссылки на потенциальный ключ другого (или того же самого) отношения. Отношение, содержащее потенциальный ключ, на который ссылается некоторый внешний ключ, называется родительским отношением. Отношение, содержащее внешний ключ, называется дочерним отношением. Внешний ключ отношения - это набор атрибутов отношения, содержащий ссылки на потенциальный ключ другого (или того же самого) отношения. Отношение, содержащее потенциальный ключ, на который ссылается некоторый внешний ключ, называется родительским отношением. Отношение, содержащее внешний ключ, называется дочерним отношением. Внешний ключ не обязан обладать свойством уникальности. Поэтому, одному кортежу родительского отношения может соответствовать несколько кортежей дочернего отношения. Такой тип связи между отношениями называется "один-ко- многим". Внешний ключ не обязан обладать свойством уникальности. Поэтому, одному кортежу родительского отношения может соответствовать несколько кортежей дочернего отношения. Такой тип связи между отношениями называется "один-ко- многим". Связи типа "много-ко-многим" реализуются использованием нескольких отношений типа "один-ко- многим". Связи типа "много-ко-многим" реализуются использованием нескольких отношений типа "один-ко- многим".
Дополнительные аспекты целостности в РМД Дополнительные аспекты целостности в РМД o Целостность на уровне базы данных Это наиболее общая форма ограничения целостности. Ограничения на уровне БД определяются для нескольких отношений Это наиболее общая форма ограничения целостности. Ограничения на уровне БД определяются для нескольких отношений o Целостность на уровне транзакций Ограничения целостности на уровне транзакций управляют способами манипулирования данными в базе. В отличие от других, это процедурные ограничения и они, т.о., не являются частью модели данных. Ограничения целостности на уровне транзакций управляют способами манипулирования данными в базе. В отличие от других, это процедурные ограничения и они, т.о., не являются частью модели данных. o Декларативная и процедурная целостность Серверы РБД обеспечивают поддержку целостности двумя способами: декларативно и процедурно. Поддержка декларативной целостности явно определяется как часть схемы БД. И механизм БД Microsoft Jet, и SQL Server обеспечивают определенную поддержку декларативной целостности. Декларативная целостность предпочтительный способ для организации целостности данных. Ее следует использовать везде, где это возможно. SQL Server поддерживает процедурную целостность путем использования триггеров процедур, которые выполняются, когда запись вставляется, изменяется или удаляется. Серверы РБД обеспечивают поддержку целостности двумя способами: декларативно и процедурно. Поддержка декларативной целостности явно определяется как часть схемы БД. И механизм БД Microsoft Jet, и SQL Server обеспечивают определенную поддержку декларативной целостности. Декларативная целостность предпочтительный способ для организации целостности данных. Ее следует использовать везде, где это возможно. SQL Server поддерживает процедурную целостность путем использования триггеров процедур, которые выполняются, когда запись вставляется, изменяется или удаляется. o Целостность на уровне домена SQL Server обеспечивает поддержку ограниченного ряда доменов в виде определяемых пользователем типов данных (UDDTs). SQL Server обеспечивает поддержку ограниченного ряда доменов в виде определяемых пользователем типов данных (UDDTs).