
- •2. Создание локальной концептуальной модели данных
- •Этап 1.1 .Определение типов сущностей
- •Этап 1.2. Определение типов связей
- •Этап 1.3. Определение атрибутов и связывание их с типами сущностей и связей
- •Этап 1.4. Определение доменов атрибутов
- •Этап 1.5. Определение атрибутов, являющихся потенциальными и первичными ключами
- •Этап 1.6. Обоснование необходимости использования понятий расширенного моделирования (необязательный этап)
- •Этап 1.7. Проверка модели на отсутствие избыточности
- •Этап 1.8 Проверка соответствия локальной концептуальной модели конкретным пользовательским транзакциям
- •Этап 1.9. Обсуждение локальных концептуальных моделей данных с конечными пользователями
- •Контрольные вопросы
- •Этап 2.1. Исключение особенностей, несовместимых с реляционной моделью (необязательный этап)
- •1 .Удаление двухсторонних связей "многие ко многим" (*:*)
- •2. Удаление рекурсивных связей "многие ко многим" (*:*)
- •3. Удаление сложных связей
- •4. Удаление многозначных атрибутов
- •Этап 2.2. Определение набора отношений, исходя из структуры локальной логической модели данных
- •1. Сильные типы сущностей
- •2. Слабые типы сущностей
- •3. Двухсторонние связи типа "один ко многим" {1:*}
- •4. Двухсторонние связи типа "один к одному" (1:1)
- •5. Рекурсивные связи "один к одному" (1:1)
- •6. Связи типа суперкласс/подкласс
- •7. Двухсторонние связи "многие ко многим" (*:*)
- •8. Сложные типы связей
- •9. Многозначные атрибуты
- •Этап 2.3. Проверка отношений с помощью правил нормализации
- •Этап 2.4. Проверка соответствия отношений требованиям пользовательских транзакций
- •Этап 2.5. Определение требований поддержки целостности данных
- •Этап 2.6. Обсуждение разработанных локальных логических моделей данных с конечными пользователями
- •2. Создание и проверка глобальной логической модели данных
- •Этап 3.1. Слияние локальных логических моделей данных в единую глобальную модель данных
- •1. Анализ имен и содержимого сущностей/отношений и их потенциальных ключей
- •2. Анализ имен и содержимого связей/внешних ключей
- •3. Слияние сущностей/отношений, соответствующих локальным моделям данных
- •4. Включение (без слияния) сущностей/отношений, характерных только для отдельных локальных моделей данных
- •5. Слияние связей/внешних ключей из отдельных локальных моделей данных
- •6. Включение (без слияния) связей/внешних ключей, характерных только для отдельных локальных моделей данных
- •7. Проверка того, нет ли пропущенных сущностей/отношений и связей/внешних ключей
- •8. Проверка внешних ключей
- •9. Проверка ограничений целостности
- •10. Формирование глобальной er-диаграммы/схемы отношений
- •11. Обновление документации
- •Этап 3.2. Проверка глобальной логической модели данных
- •Этап 3.3. Проверка возможностей расширения модели в будущем
- •Этап 3.4. Обсуждение глобальной логической модели данных с пользователями
- •Контрольные вопросы
- •2. Этапы физического проектирования Этап 4. Перенос глобальной логической модели данных в среду целевой субд
- •Этап 4.1. Проектирование основных отношений
- •Этап 4.2. Разработка способов получения производных данных
- •Этап 4.3. Реализация ограничений предметной области
- •Этап 5. Проектирование физического представления базы данных
- •Этап 5.1. Анализ транзакций
- •Этап 5.2. Выбор файловой структуры
- •Этап 5.3. Определение индексов
- •Этап 5.4. Оценка потребности в дисковом пространстве
- •Этап 6. Проектирование пользовательских представлений
- •Этап 7. Проектирование средств защиты
Этап 5.2. Выбор файловой структуры
Одной из главных задач физического проектирования базы данных является обеспечение эффективного хранения данных. Например, если выборка строк с данными о сотрудниках компании должна выполняться по именам в алфавитном порядке, то наиболее подходящей структурой для хранения этих данных является файл, отсортированный по именам сотрудников. А если должна выполняться выборка данных обо всех сотрудниках, зарплата которых находится в определенном диапазоне, файл, отсортированный по именам сотрудников, не подходит для выполнения такой задачи. Положение еще более усложняется в связи с тем, что некоторые способы организации файлов хорошо подходят для массовой загрузки данных в базу данных, но их применение в дальнейшем становится неэффективным. Иными словами, задача состоит в использовании эффективной структуры хранения данных на внешнем устройстве, которая обеспечивает быструю загрузку базы данных, а затем ее преобразование в структуру, более подходящую для повседневной эксплуатации.
Поэтому цель настоящего этапа состоит в определении оптимальной файловой организации для каждого отношения, если целевая СУБД это позволяет. Во многих случаях реляционная СУБД может предоставлять лишь ограниченный выбор или даже вообще не позволять выбрать определенную файловую организацию, но в некоторых СУБД на организацию размещения данных на внешних устройствах можно в определенной степени повлиять путем задания индексов.
Если целевая СУБД не позволяет выбрать определенную файловую организацию, этот этап может быть пропущен.
Этап 5.3. Определение индексов
Один из вариантов выбора подходящей файловой структуры для отношения состоит в том, что строки остаются неупорядоченными и создается любое необходимое количество дополнительных индексов. Еще один вариант предусматривает упорядочение строк в отношении с использованием первичного или кластеризующего индекса. В этом случае для выбора атрибута, по которому выполняется упорядочение или кластеризация строк, применяются следующие критерии:
выбирается атрибут, наиболее часто применяемый в операциях соединения, поскольку именно он позволяет повысить эффективность таких операций;
выбирается атрибут, наиболее часто применяемый для доступа к строкам в отношении с учетом последовательности значений этого атрибута.
Если выбранный атрибут, по которому происходит упорядочение, является ключом отношения, то создаваемый индекс служит в качестве первичного индекса, а если атрибут, по которому происходит упорядочение, не является ключом, то создаваемый индекс служит кластеризующим индексом. Следует учитывать, что в каждом отношении должен применяться либо первичный, либо кластеризующий индекс.
Выбор дополнительных индексов
Дополнительные индексы предоставляют возможность определять дополнительные ключи для базового отношения, которые могут применяться для повышения эффективности выборки данных.
Сопровождение и применение дополнительных индексов приводит к увеличению издержек, поэтому необходимо определить, оправдывают ли они повышение производительности при выборке данных, достигнутое благодаря их использованию. Основные издержки, связанные с применением дополнительных индексов, перечислены ниже.
Ввод индексной записи в каждый дополнительный индекс при вставке строки в отношение.
Обновление дополнительного индекса при обновлении соответствующей строки в отношении.
Увеличение потребности в дисковом пространстве в связи с необходимостью хранения дополнительного индекса.
Возможное снижение производительности процесса оптимизации запросов, поскольку оптимизатор запросов должен учесть наличие всех дополнительных индексов и только после этого выбрать оптимальную стратегию выполнения запросов.
Рекомендации по выбору списка требований к индексам
Один из способов определения необходимого количества дополнительных индексов состоит в подготовке списка требований к атрибутам, которые рассматриваются для определения необходимости применения их для индексации, а затем изучении затрат на сопровождение каждого из этих индексов. Ниже приведены рекомендации по подготовке такого списка требований.
1. Не создавать индекс на небольших отношениях. Может оказаться более эффективным поиск в отношении, данные которого хранятся в оперативной памяти, чем хранить дополнительную индексную структуру.
2. Как правило, следует создавать индекс на первичном ключе отношения, если он не применяется в качестве ключа файловой структуры. Хотя в стандарте SQL предусмотрена конструкция, позволяющая задать спецификацию первичного ключа, следует отметить, что применение этой конструкции не всегда гарантирует создание индекса на первичном ключе.
3. Ввести дополнительный индекс на внешнем ключе, если с его помощью часто происходит доступ к отношению. Но следует учитывать, что в некоторых СУБД индексы на внешних ключах создаются автоматически.
4. Ввести дополнительные индексы на всех атрибутах, которые часто применяются в качестве дополнительного ключа.
5. Ввести дополнительные индексы на атрибутах, которые часто применяются в следующих конструкциях:
• критерии выборки или соединения;
• конструкции ORDER BY;
• конструкции GROUP BY;
• другие операции, требующие сортировки (такие как UNION и DISTINCT).
6. Ввести дополнительные индексы на атрибутах, применяемых во встроенных функциях агрегирования, наряду со всеми атрибутами, используемыми для этих встроенных функций.
7. Обобщая приведенную выше рекомендацию, можно указать, что необходимо вводить дополнительный индекс на всех атрибутах, которые могут привести к созданию плана, предусматривающего применение только индексов.
8. Не индексировать атрибут или отношение, которые часто обновляются.
9. Не индексировать атрибут, если в запросах с использованием этого атрибута обычно происходит выборка значительной части (например, 25%) строк кортежей в отношении. В таком случае может оказаться более эффективным поиск во всем отношении, чем поиск с использованием индекса.
10. Не индексировать атрибуты, которые состоят из длинных символьных строк. Если в критериях поиска предусмотрено несколько предикатов и одно из этих условий содержит конструкцию OR, а в самом условии не применяется индекс и не предусматривается сортировка, то добавление индексов для других атрибутов не позволяет повысить скорость выполнения такого запроса, поскольку все равно потребуется последовательный поиск в отношении.
Удаление индексов из списка требований
После подготовки списка требований к потенциальным индексам необходимо учесть влияние каждого из них на транзакции обновления. Если потребность в сопровождении индекса может привести к замедлению важных транзакций обновления, следует предусмотреть возможность исключения этого индекса из списка. Но необходимо учитывать, что определенные индексы могут также способствовать повышению эффективности операции обновления.
Целесообразно по возможности провести эксперименты для определения того, способствует ли создание индекса повышению производительности, почти не влияет на производительность или приводит к ее снижению. Если обнаруживается снижение производительности, этот индекс, безусловно, должен быть удален из списка требований. А если в результате ввода дополнительного индекса наблюдается лишь незначительное повышение производительности, может потребоваться дальнейшее исследование для определения того, при каких обстоятельствах этот индекс может оказаться полезным и так ли часто возникают эти обстоятельства, чтобы создание индекса действительно было оправданным.
Некоторые системы позволяют изучать стратегию, выбранную оптимизатором для выполнения конкретного запроса или обновления; такая стратегия называется планом выполнения запроса (Query Execution Plan - QEP). Например, в СУБД Microsoft Access предусмотрена программа Performance Analyzer, в СУБД Oracle — диагностическая утилита EXPLAIN PLAN, в СУБД DB2 - утилита EXPLAIN, а в СУБД INGRES - интерактивное средство просмотра плана выполнения запроса. Если запрос выполняется медленнее, чем ожидалось, имеет смысл воспользоваться такой утилитой для определения причин замедления и найти иную стратегию, позволяющую повысить производительность запроса.
Если в отношении с одним или несколькими индексами происходит вставка большого количества строк, может оказаться более эффективным решение вначале удалить индексы, выполнить вставку, а затем снова создать индексы. В качестве эмпирического правила можно указать, что если в результате вставки: общий объем данных в отношении увеличивается по меньшей мере на 10%, целесообразно удалить на время индексы этого отношения.
Обновление статистической информации в базе данных
Оптимизатор запросов для выбора оптимальной стратегии использует статистическую информацию базы данных, которая хранится в системном каталоге. При создании любого индекса СУБД автоматически вводит в системный каталог информацию об этом индексе. Но следует учитывать, что в некоторых СУБД для обновления в системном каталоге статистической информации, которая относится к определенному отношению или индексу, необходимо вызывать на выполнение определенную утилиту.
Документальное оформление результатов выбора индексов
Выбранные индексы должны быть полностью отражены в документации с указанием причин того, почему был сделан именно этот выбор. В частности, если некоторые атрибуты не были проиндексированы с учетом вероятности снижения производительности, это также должно быть указано в документации.