Название: Базы данных. Курс лекций. Учебное пособие
Автор: Рамиля Рамисовна Латыпова
Издательство: Проспект
Жанр: Техническая литература
isbn: 9785392191512
isbn:
Рассмотрим наиболее часто встречающуюся связь «один-ко-многим». Пример приведен на рис. 10.
Рис. 10. Пример связывания таблиц
Эти две таблицы связаны по общему полю «Товар». Таблица «Товары» является главной, таблица «Отпуск товаров» – подчиненной. Потеря связей возможна в двух случаях:
1. Изменяется значение в поле связей главной таблицы без изменения значений полей связи в соответствующих записях дочерней таблицы. Например, если вместо товара «Сахар» в таблице «Товары» написать «Песок», то все записи в дочерней таблице для «Сахар» потеряют связь и не будут иметь единицы измерения и цены;
2. Изменяется значение поля связи одной из записей дочерней таблицы без изменения значения поля связи в соответствующих записях главной таблицы. Например, если вместо товара «Сахар» в одной из записей таблицы «Отпуск товаров» написать «Песок», то будут недостоверными записи об отпуске товара «Сахар». Запись в дочерней таблице для «Песок» не будет иметь связи и, следовательно, единицы измерения и цены.
Таким образом, в обоих случаях возникает нарушение целостности БД.
Действия, нарушающие ссылочную целостность БД, должны блокироваться.
Для сохранения ссылочной целостности может использоваться также механизм каскадных изменений:
1. Синхронные изменения поля связи в дочерней таблице при внесении изменений в поле связи главной таблицы;
2. Синхронные удаления поля связи в дочерней таблице при удалении поля связи главной таблицы.
Разрешение или запрещение каскадных изменений реализуется при описании связей между таблицами БД.
Обычно в СУБД для реализации ссылочной целостности в дочерней таблице создают внешний ключ, ссылающийся на родительскую таблицу, и указывают вид каскадных воздействий.
Внешний ключ создается в дочерней таблице. В него входят поля связи дочерней таблицы. Для связей типа «один-ко-многим» внешний ключ должен совпадать по составу полей с первичным ключом главной таблицы или с частью первичного ключа (в этом случае нормализация таблиц БД выполнена не полностью).
При определении первичного и внешнего ключей СУБД автоматически строит индексы. Индекс, соответствующий внешнему ключу, строится для обеспечения связей родительской и дочерней таблиц [2].
Индексы обеспечивают механизм быстрого доступа к данным в таблицах. Индексы хранят значения индексных полей (по которым построен индекс) и указатель на запись в таблице.
Использование индексов позволяет использовать не просто последовательный, а индексно-последовательный доступ.
При последовательном доступе просматриваются все записи таблицы – от первой до последней, что неэффективно.
При индексно-последовательном доступе указатель в индексе устанавливается на первую строку, соответствующую условиям запроса (или его части), и считывается запись из таблицы по хранящемуся СКАЧАТЬ