Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных и СУБД.docx
Скачиваний:
121
Добавлен:
19.06.2017
Размер:
67.25 Кб
Скачать

Индексы

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

Индекс – структура, связанная с таблицей или представлением и предназначенная для ускорения поиска информации в них. Индекс определяется для одного или нескольких столбцов, называемых индексированными столбцами. Он содержит отсортированные значения индексированного столбца или столбцов со ссылками на соответствующую строку исходной таблицы или представления. Повышение производительности достигается за счет сортировки данных. Использование индексов может существенно повысить производительность поиска, однако для хранения индексов необходимо дополнительное пространство в базеданных.

В качестве примера поиска в таблице представим себе телефонный справочник, где все абоненты расположены по алфавиту. Очевидно, что в таком справочнике очень легко найти номер телефона, если известна фамилия абонента. С другой стороны, найти фамилию абонента по номеру его телефона чрезвычайно сложно, т.к. справочник не упорядочен по номерам телефона, придется искать нужный телефон методом простого перебора. Таким образом, упорядоченность информации значительно облегчает поиск. Этот принцип положен в основу системы индексов.

На рисунке показан телефонный справочник с записями, не упорядоченными по номеру телефона, и индекс, сформированный для этого справочника. Из рисунка видно, что индекс представляет собой массив целых чисел, куда помещены номера записей справочника в порядке возрастания номера телефона. Благодаря этому, записи становятся упорядоченными по номеру телефона, и вместо поиска методом полного перебора можно применить метод половинного деления или метод двоичного дерева.

Рис. 3. Пример индекса по полю «номер телефона».

Связи

Связь – это функциональная зависимость между сущностями. Если между некоторыми сущностями существует связь, то факты из одной сущности ссылаются или некоторым образом связаны с фактами из другой сущности. Поддержание непротиворечивости функциональных зависимостей между сущностями называется ссылочной целостностью. Поскольку связи находятся «внутри» реляционной модели, реализация ссылочной целостности может выполняться как приложением, так и самой СУБД (с помощью механизмов декларативной ссылочной целостности и триггеров).

При описании отношений подразумевается связь между записями разных таблиц. Например, если упоминается связь типа одна-ко-многим, то имеется в виду, что одна запись некоторой таблицы связана со многими записями другой таблицы. Ни в коем случае не имеется в виду связь одной таблицы со многими таблицами.

Простейшая связь между записями таблиц – это одна-к-одной. Связь такого типа осуществляется, когда связываемые таблицы имеют одинаковый первичный ключ. Чаще всего этот тип связи используется при наличии таблицы с большим числом полей, некоторые из которых являются второстепенными (не столь значимыми). Например, запись о человеке в отделе кадров может состоять из фамилии, имени, отчества, паспортных данных, автобиографии и т.п. Автобиография может быть отнесена к второстепенным сведениям и вынесена в дополнительную таблицу с типом связи одна-к-одной.

Наиболее распространён тип связи одна-ко-многим. Например, клиент и заказы: один клиент может сделать много заказов. Поля, по которым осуществляются связи, не являются свободными, то есть не могут иметь произвольные значения. Например, в заказе должен быть упомянут клиент, который есть в таблице «Клиенты». С точки зрения таблицы «Клиенты» поле «ФИО клиента» может быть произвольным, так как не зависит от полей других таблиц.

Если связаны все ключевые поля одной таблицы и часть ключевых полей другой таблицы, то тип связи может быть только одна-ко-многим.

Тип связи много-ко-многим возникает, если связаны поля, частично входящие в первичный ключ одной и другой таблицы. Например, поле «Наименование продукта» в таблице «Заказы» и поле «Наименование продукта» в таблице «Отчисления». Продукт может быть заказан несколькими клиентами, а отчисления по продукту идут разным специалистам за каждую продажу продукта (если таблица «Отчисления» имеет два поля в первичном ключе – название продукта и специалист или название продута и менеджер).

Выше рассмотрены способы связывания таблиц при помощи полей, входящих в первичный ключ. Однако существует другой способ связывания таблиц, в связи с одной стороны могут участвовать поля, не входящие в первичный ключ, а с другой стороны – поля входящие в первичный ключ. Это делается при помощи вторичных или внешних ключей (foreign key). Вторичный ключ строится по полям, не входящим в первичный ключ.

Таким образом, при определении отношения, одна таблица осуществляет связь используя поля, входящие в первичный ключ, а другая – может использовать все поля первичного ключа, их часть, или поля, не входящие в первичный ключ.

В отличие от отношений, основанных только на первичном ключе, отношения, построенные на использовании вторичного ключа, называются потенциальными. Разработчик БД сам решает, использовать такое связывание или нет.

Отношение много-к-одной по сути является перевёрнутым отношением одна-ко-многим. Значения в полях связи должна определять таблица, в которой используемые поля являются уникальными, то есть только одна запись может определять множество других.

Ссылочная целостность – это обеспечение соответствия значения внешнего ключа экземпляра дочерней сущности значениям первичного ключа в родительской сущности. Ссылочная целостность может контролироваться при всех операциях, изменяющих данные.

Хранимая процедура - это программа, объединяющая запросы, процедурную логику (операторы присваивания, ветвления и т.д.) и хранящиеся в базе данные. Этот механизм позволяет содержать вместе с данными достаточно сложные программы, выполняющие большой объём работ по обработке данных без передачи данных по сети и без взаимодействия с клиентом. В этом случае база данных может представлять собой функционально самостоятельный уровень приложения, который взаимодействует с другими уровнями для получения запросов и обновления данных.

Правила позволяют вызывать выполнение заданных действий при изменении или добавлении данных в БД и тем самым контролировать истинность помещаемых в неё данных. Обычно действие - это вызов определённой процедуры или функции. Правила могут ассоциироваться с полем или записью и, соответственно, срабатывать при изменении данных в конкретном поле или записи таблицы. Нельзя использовать правила при удалении данных. В отличие от ограничений, которые являются лишь средством контроля относительно простых условий корректности ввода данных, правила позволяют проверять и поддерживать сколь угодно сложные соотношения между элементами данных в БД.

Триггер – это предварительно определённое действие или последовательность действий, автоматически осуществляемых при выполнении операций обновления, добавления или удаления данных. Триггер является мощным инструментом контроля за изменением данных в БД, помогает программисту автоматизировать операции, которые должны выполняться в этом случае. Триггер выполняется после проверки правил обновления данных. Ни пользователь, ни приложение не могут активизировать триггер, он запускается автоматически, когда пользователь или приложение выполняют с БД определённые действия. Триггер включает в себя следующие компоненты:

  • ограничения, для реализации которых созда1тся триггер;

  • событие, которое будет характеризовать возникновение ситуации, требующей проверки ограничений. События чаще всего связаны с изменением состояния БД (например, добавление записи в таблицу), но могут учитываться и дополнительные условия (например, добавление записи только с отрицательным значением);

Использование триггеров при проектировании БД даёт следующие преимущества:

  • триггеры всегда выполняются при совершении соответствующих действий. Разработчик продумывает использование триггеров при проектировании БД и может больше не вспоминать о них при разработке приложения для доступа к данным;

  • при необходимости триггеры можно изменять централизованно непосредственно в БД. Пользовательские программы, работающие с этой БД не потребуют модернизации;

  • система обработки данных, использующая триггеры, обладает лучшей переносимостью в архитектуру клиент-сервер за счёт меньшего объёма требуемых модификаций.

Нормализация отношений - это процесс построения оптимальной структуры таблиц и связей в реляционной БД. В процессе нормализации элементы данных группируются в таблицы, представляющие объекты и их взаимосвязи. Теория нормализации основана на том, что определённый набор таблиц обладает лучшими свойствами при включении, модификации и удалении данных, чем все остальные наборы таблиц, с помощью которых могут быть представлены те же данные.

14