Лекции ПрБД, 2 курс 3 семестр (для ИВТ и т.п.) / Проектирование БД_уч пособие v02
.pdfПри соблюдении условий изменения в БД принимаются, в противном случае отклоняются;
–CASCADE – каскадное удаление или обновление данных;
–SET NULL – установка неопределенного значения (NULL) в атрибутах внешнего ключа дочерней таблицы;
–SET DEFAULT – установка значения по умолчанию в атрибутах внешнего ключа дочерней таблицы;
–NO CHECK, NONE или IGNORE – поддержка ссылочной целостности встроенными средствами СУБД не предусмотрена, но может быть выполнена за счет клиентских программ, работающих с БД. Данная стратегия принята в СУБД по умолчанию.
ВТабл. 2 приведены последствия срабатывания триггеров при выполнении различных операций по изменению данных [1].
Назначение типа триггера на действия с записями является ответственной операцией. Выбор неверного типа может привести к нарушению ссылочной целостности в БД. Особой осторожности требует выбор каскадного удаления, ведь при таком удалении по цепочке могут быть удалены множество записей из разных таблиц.
91
Табл. 2. Принципы работы триггеров
Операция |
Тип триггера |
Таблица |
Связь |
Последствия применения триггера и/или |
|
условия фиксации изменений в БД |
|||||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
При вставке записи в дочернюю таблицу во внешний |
|
|
RESTRICT |
Дочерняя |
|
ключ обязательно должно быть внесено значение (явно |
|
|
|
прописано в операторе INSERT), соответствующее одно- |
|||
|
|
|
|
||
|
|
|
|
му из значений первичного ключа родительской таблицы |
|
|
|
|
|
|
|
|
|
|
|
При вставке записи в дочернюю таблицу во внешний |
|
|
|
|
|
ключ автоматически заносится значение по умолчанию. В |
|
|
|
|
|
операторе INSERT поля внешнего ключа могут не упоми- |
|
|
|
|
|
наться. Значение по умолчанию должно соответствовать |
|
|
|
|
|
одному из значений первичного ключа родительской таб- |
|
|
|
|
|
лицы. Т.е. в родительской таблице на момент выполнения |
|
INSERT - |
SET DEFAULT |
Дочерняя |
|
оператора INSERT должна присутствовать запись, значе- |
|
вставка |
|
ние первичного ключа которой соответствует значению |
|||
|
|
|
|||
записи |
|
|
|
по умолчанию |
|
|
|
|
|
При вставке записи в дочернюю таблицу во внешний |
|
|
|
|
|
ключ автоматически заносится значение по умолчанию. В |
|
|
|
|
|
операторе INSERT поля внешнего ключа могут не упоми- |
|
|
|
|
|
наться. Значение по умолчанию может не соответствовать |
|
|
|
|
|
значениям первичного ключа родительской таблицы |
|
|
|
|
|
|
|
|
|
|
|
При вставке записи в дочернюю таблицу во внешний |
|
|
|
|
|
ключ автоматически будет заноситься значение «NULL». |
|
|
SET NULL |
Дочерняя |
|
В операторе INSERT поля внешнего ключа могут не упо- |
|
|
|
|
|
минаться и должны допускать внесение неопределенных |
|
|
|
|
|
значений |
|
|
|
|
|
|
|
UPDATE - |
RESTRICT |
Родительская |
|
Изменение значения первичного ключа в родительской |
|
обновление |
|
таблице возможно лишь в том случае, если это значение |
|||
|
|
|
|||
|
|
|
|
|
92
Операция |
Тип триггера |
Таблица |
Связь |
Последствия применения триггера и/или |
|
условия фиксации изменений в БД |
|||||
|
|
|
|
||
|
|
|
|
|
|
полей записи |
|
|
|
не соответствует ни одному из значений внешнего ключа |
|
|
|
|
|
в дочерней таблице |
|
|
|
|
|
|
|
|
|
|
|
При изменении значения внешнего ключа в дочерней таб- |
|
|
|
Дочерняя |
|
лице, оно обязательно должно соответствовать одному из |
|
|
|
|
|
значений первичного ключа родительской таблицы |
|
|
|
|
|
|
|
|
|
|
|
При изменении значения первичного ключа в родитель- |
|
|
CASCADE |
Родительская |
|
ской таблице во внешние ключи всех связанных записей |
|
|
|
дочерней таблицы автоматически будет занесено его но- |
|||
|
|
|
|
||
|
|
|
|
вое значение |
|
|
|
|
|
|
|
|
|
|
|
При изменении значения первичного ключа в родитель- |
|
|
|
|
|
ской таблице во внешние ключи всех связанных записей |
|
|
|
|
|
дочерней таблицы автоматически будут занесено значе- |
|
|
|
|
|
ние по умолчанию. Значение по умолчанию должно соот- |
|
|
|
|
|
ветствовать одному из значений первичного ключа роди- |
|
|
|
|
|
тельской таблицы. Т.е. в родительской таблице на момент |
|
|
|
|
|
выполнения оператора UPDATE должна присутствовать |
|
|
SET DEFAULT |
Родительская |
|
запись, значение первичного ключа которой соответству- |
|
|
|
ет значению по умолчанию |
|||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
При изменении значения первичного ключа в родитель- |
|
|
|
|
|
ской таблице во внешние ключи всех связанных записей |
|
|
|
|
|
дочерней таблицы автоматически будут занесено значе- |
|
|
|
|
|
ние по умолчанию. Значение по умолчанию необязатель- |
|
|
|
|
|
но должно соответствовать одному из значений первично- |
|
|
|
|
|
го ключа родительской таблицы |
|
|
|
|
|
|
|
|
SET NULL |
Родительская |
|
При изменении значения первичного ключа в родитель- |
|
|
|
ской таблице во внешние ключи всех связанных записей |
|||
|
|
|
|
дочерней таблицы автоматически будут занесено значе- |
93
Операция |
Тип триггера |
Таблица |
Связь |
Последствия применения триггера и/или |
|
условия фиксации изменений в БД |
|||||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
ние «NULL» |
|
|
|
|
|
|
|
|
|
|
|
Удаление записи из родительской таблицы возможно |
|
|
RESTRICT |
Родительская |
|
лишь в том случае, если значение ее первичного ключа не |
|
|
|
соответствует ни одному значению внешнего ключа в до- |
|||
|
|
|
|
||
|
|
|
|
черней таблице |
|
|
|
|
|
|
|
|
|
|
|
При удалении записи из родительской таблицы автомати- |
|
|
CASCADE |
Родительская |
|
чески удаляются все записи дочерней таблицы, у которых |
|
|
|
значение внешнего ключа соответствует значению пер- |
|||
|
|
|
|
||
|
|
|
|
вичного ключа удаляемой записи |
|
|
|
|
|
|
|
|
|
|
|
При удалении записи из родительской таблицы во внеш- |
|
|
|
|
|
ние ключи всех связанных записей дочерней таблицы ав- |
|
|
|
|
|
томатически будут занесено значение по умолчанию. Зна- |
|
DELETE - |
|
|
|
чение по умолчанию должно соответствовать одному из |
|
|
|
|
значений первичного ключа родительской таблицы. Т.е. в |
||
удаление |
|
|
|
||
|
|
|
родительской таблице на момент выполнения оператора |
||
записи |
|
|
|
||
|
|
|
DELETE должна присутствовать запись, значение пер- |
||
|
|
|
|
||
|
SET DEFAULT |
Родительская |
|
вичного ключа которой соответствует значению по умол- |
|
|
|
чанию |
|||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
При удалении записи из родительской таблицы во внеш- |
|
|
|
|
|
ние ключи всех связанных записей дочерней таблицы ав- |
|
|
|
|
|
томатически будут занесено значение по умолчанию. Зна- |
|
|
|
|
|
чение по умолчанию необязательно должно соответство- |
|
|
|
|
|
вать одному из значений первичного ключа родительской |
|
|
|
|
|
таблицы |
|
|
|
|
|
|
|
|
|
|
|
При удалении записи из родительской таблицы во внеш- |
|
|
SET NULL |
Родительская |
|
ние ключи всех связанных записей дочерней таблицы ав- |
|
|
|
|
|
томатически будут занесено значение «NULL» |
|
|
|
|
|
|
94
6.2.3. Физическое проектирование
Этап физического проектирования заключается в увязке логической структуры БД и физической среды хранения с целью наиболее эффективного размещения данных, т.е. отображении логической структуры БД в структуру хранения. Решается вопрос размещения хранимых данных в пространстве памяти, выбора эффективных методов доступа к различным компонентам «физической» БД. Результаты этого этапа документируются в форме схемы хранения на языке определения данных (DDL).
Цель физического проектирования – преобразование логической схемы с учетом синтаксиса, семантики и возможностей выбранной целевой СУБД.
В связи с тем, что методология физического проектирования существенно зависит от выбранной целевой СУБД, то ниже приведены лишь общие рекомендации.
1) Анализ необходимости введения контролируемой избыточности
При реализации проекта часто для достижения большей эффективности системы требуется снизить требования к уровню нормализации отношений, т.е. внести некоторую избыточность данных. Процесс внесения таких изменений в БД называется денормализацией. Вопросам денормализации посвящена лекция 13.
На этом шаге следует обратить внимание на следующие аспекты:
1)Использование производных данных. С точки зрения физического проектирования любой производный атрибут либо может
сохраняться в БД, либо при каждом обращении к нему его значение будет вычисляться заново.
Проектировщик при использовании производных данных должен оценить:
–дополнительную стоимость хранения производных данных и поддержки согласованности с текущими значениями тех данных, на основании которых они вычисляются, т.е. минусы хранения производных данных;
–издержки на выполнение вычислений значений производных атрибутов при каждом обращении к ним – плюсы.
2)Дублирование атрибутов:
95
2.1) Объединение отношений, связанных 1:1. Даже в тех случаях, когда связь между двумя сущностями необязательная, стоит подумать об их объединении, с учетом того, что часть полей в записях не будет заполняться.
2.2) Дублирование атрибутов в связях типа 1:M.
2.3) Использование служебных таблиц (справочных таблиц, классификаторов, типовых списков значений). Служебные таблицы, как правило, создаются для атрибутов символьного типа, значения которых могут выбираться из строго определенного и ограниченного списка. Обычно служебные таблицы содержат два атрибута: идентификатор (код, шифр) и описание (наименование). Эти таблицы связываются неидентифицирующей обязательной связью с исходной, при этом в ней вместо наименования параметра будет содержаться идентификатор этого наименования.
Использование служебных таблиц дает следующие преимущества:
–значительно снижается вероятность ошибки при указании значений для этих атрибутов. Если не использовать служебные таблицы, то разные пользователи могут вносить рассогласованные значения, в том числе и с ошибками;
–уменьшается размер исходной таблицы;
–если описание параметра может измениться, то значительно проще изменить одно значение в служебной таблице, чем корректировать множество записей в исходной.
2.4) Введение повторяющихся (многозначных) атрибутов. Для достижения большей производительности при выполнении часто вызываемых запросов может быть целесообразным подход сохранения многозначных атрибутов, чем вынесение их в отдельную таблицу.
2.5) Создание сводных таблиц. Если нагрузка на БД в часы пик велика, а период актуальности отчетов, составляемых на основании данных, – сутки и более, то следует подумать о включении в БД сводных таблиц, обновляемых в часы минимальной нагрузки на БД.
2)Перенос логической схемы данных в среду целевой СУБД
96
Данная стадия включает в себя проектирование таблиц и связей между ними с учетом возможностей целевой СУБД. При этом проектировщик должен хорошо ориентироваться в функциональных возможностях СУБД, а именно поддерживает ли СУБД задание: доменов; первичных, альтернативных и внешних ключей; неопределенных (NULL) и обязательных (NOT NULL) значений; значений по умолчанию (DEFAULT); правил контроля целостности; хранимых процедур и триггеров.
Кроме этого, целевая СУБД должна поддерживать требуемые типы данных или иметь возможность адекватного их хранения. Стадия переноса также включает в себя модификацию логической схемы с учетом семантики и синтаксиса, принятой в целевой СУБД.
3)Реализация бизнес-правил и анализ транзакций
Реализацию бизнес-правил можно включить в SQL-операторы создания таблиц (CREATE TABLE опция CHECK для полей или таблицы в целом) или в триггеры (CREATE TRIGGER).
После реализации бизнес-правил необходимо проверить выполнимость и эффективность (время отклика, скорость выборки, объем задействованных данных) выполнения всех транзакций.
4)Разработка механизмов защиты
Ввиду того, что работают с системой, как правило, несколько пользователей, необходимо продумать механизмы защиты данных от несанкционированного просмотра и модификации. В частности, предусмотреть уровни полномочий для различных категорий пользователей. Наиболее популярными способами обеспечения защиты данных являются:
4.1) Разработка пользовательских представлений (видов).
Представление пользователя включает в себя данные, необходимые конкретному пользователю для принятия решений или выполнения некоторого задания.
ПРЕДСТАВЛЕНИЕ это динамический результат одной или более операций, выполненных над таблицами БД с целью получе-
В БД
ния новой сводной таблицы
Представление является виртуальной таблицей, которая реально в БД не существует, но создается по запросу (SELECT) определенного поль-
97
зователя в результате выполнения этого запроса. В БД представления создаются для упрощения запросов и для организации защиты. Например, с помощью представления можно ограничить доступ к отдельным атрибутам или записям некоторых типов пользователей.
4.2) Определение прав доступа (привилегий).
В СУБД, поддерживающих SQL, возможно выполнение запросов от имени определенного пользователя, которое задается администратором БД. Каждый пользователь обладает строго определенным набором прав (привилегий) в отношении конкретной таблицы или представления. Наделение правами выполняется с помощью оператора GRANT, отмена – REVOKE. Операции, на которые можно назначить права: SELECT, INSERT, DELETE и UPDATE. Кроме того, возможно задание передачи прав от одного пользователя к другому.
5) Организация мониторинга и настройка функционирования системы
Мониторинг функционирования и достигнутого уровня производительности системы необходим с целью устранения ошибочных проектных решений или изменения требований к системе.
Первоначальный физический проект БД не следует понимать как нечто статическое. Он, скорее, является промежуточным звеном, предназначенным для оценки достигнутого уровня производительности системы. Большинство коммерческих СУБД предоставляет в распоряжение администратора БД набор утилит, предназначенных для наблюдения за функционированием системы и ее настройки.
На практике настройку БД никогда нельзя считать завершенной. На протяжении всего жизненного цикла системы необходимо постоянно вести наблюдение за уровнем ее производительности, что позволит своевременно реагировать на изменения, происходящие в окружающей среде. Внесение в БД изменений, предназначенных для повышения производительности одного из приложений, может отрицательно отразиться на работе другого приложения, возможно, более важного. Таким образом, внесение любых изменений в БД должно проводиться обдумано и осторожно с обязательным их тестированием.
98
Вопросы для самопроверки
1)Какие области охватывает процесс проектирования БД?
2)Дайте характеристику трехуровневой архитектуры ANSISPARC.
3)Перечислите этапы проектирования БД.
4)Расскажите об этапе концептуального проектирования.
5)Какова цель этапа концептуального проектирования?
6)Что такое ER-модель? Кратко перечислите шаги по ее созданию.
7)Какие типы связей ER-модели Вы знаете?
8)Расскажите об этапе логического проектирования.
9)В чем заключается цель логического проектирования?
10)Перечислите основные шаги этапа логического проектирования.
11)Расскажите об этапе физического проектирования.
12)В чем заключается цель физического проектирования?
7 Проектирование реляционных БД на основе принципов нормализации
7.1 Проблемы проектирования БД
При проектировании базы данных решаются две основных пробле-
мы:
−Каким образом отобразить объекты предметной области в абстрактные объекты модели данных, чтобы это отображение не противоречило семантике предметной области и было по возможности лучшим (эффективным, удобным и т.д.)? Часто эту проблему называют проблемой логического проектирования баз данных.
−Как обеспечить эффективность выполнения запросов к базе данных, т.е. каким образом, имея в виду особенности конкретной СУБД, расположить данные во внешней памяти, создание каких дополнительных структур (например, индексов) потребовать и т.д.? Эту проблему называют проблемой физического проектирования баз данных.
Основная проблема проектирования реляционной базы данных состоит в обоснованном принятии решений о том,
−из каких отношений должна состоять БД и
−какие атрибуты должны быть у этих отношений.
99
Схема БД может быть неудачной: возникают избыточность и аномалии. Например, в отношении ПРЕПОДАВАТЕЛЬ-ПРЕДМЕТ имеется избыточность - данные о преподавателе могут многократно повторяться, так как он может читать несколько предметов. Возможны также три вида аномалии. При изменении каких-либо данных о преподавателе, например, оклада, необходимо изменить оклад во всех кортежах, связанных с данным преподавателем, иначе возникнет аномалия обновления: в одних кортежах будет новое значение оклада, а в других – старое. Возникнет также аномалия включения: в отношении нельзя хранить данные о преподавателе, не ведущем в настоящее время никаких дисциплин, например, находящемся на повышении квалификации (попытки хранить такие сведения с «пустыми» названиями предметов, например, состоящими из пробелов, практически сложно реализовать). Возможны также аномалии удаления: удалив данные о предмете, можно удалить данные о преподавателе.
Врамках реляционной модели данных разработаны ряд нормальных форм отношений и аппарат нормализации отношений. Нормальные формы ограничивают определенный тип функциональной зависимости и устраняют соответствующие аномалии при выполнении операций над отношениями.
7.2Проектирование реляционных баз данных с использованием нормализации
Воснове процесса проектирования лежит метод нормализации, декомпозиция отношения, находящегося в предыдущей нормальной форме, в два или более отношения, удовлетворяющих требованиям следующей нормальной формы.
Каждой нормальной форме соответствует некоторый определенный набор ограничений, и отношение находится в некоторой нормальной форме, если удовлетворяет свойственному ей набору ограничений. Примером набора ограничений является ограничение первой нормальной формы - значения всех атрибутов отношения атомарны. Поскольку требование первой нормальной формы является базовым требованием классической реляционной модели данных, можно считать, что исходный набор отношений уже соответствует этому требованию.
Втеории реляционных баз данных обычно выделяется следующая последовательность нормальных форм:
100
