- •1. Введение в бд
- •2. Теоретические основы бд
- •2.1 Базы данных
- •2.2. Архитектуры обработки информации
- •Ошибка! Ошибка связи.
- •Ошибка! Ошибка связи.
- •2.3 Модели баз данных
- •2.3.1 Иерархическая модель данных
- •Ошибка! Ошибка связи.
- •Ошибка! Ошибка связи.
- •2.3.2 Сетевая модель данных
- •Ошибка! Ошибка связи.
- •2.3.3 Реляционная модель данных
- •3. Реляционный подход к организации бд
- •3.1 Базовые понятия реляционных баз данных
- •Ошибка! Ошибка связи.
- •3.2 Фундаментальные свойства отношений
- •3.3 Взаимосвязь отношений
- •4. Реляционная алгебра
- •4.1 Обзор реляционной алгебры
- •Замкнутость реляционной алгебры
- •Отношения, совместимые по типу
- •4.2 Теоретико-множественные операторы
- •4.3 Специальные реляционные операторы
- •4.4 Зависимые реляционные операторы
- •4.5 Примитивные реляционные операторы
- •4.6 Запросы, невыразимые средствами реляционной алгебры
- •4.7 Кросс-таблицы
- •5. Проектирование бд
- •5.1. Цели и этапы проектирования
- •5.2 Уровни моделирования (проектирования) бд
- •5.3 Критерии оценки качества логической модели данных
- •5.4 Нормализация и ее необходимость
- •5.5 Теория нормализации
- •5.6 Элементы модели "сущность-связь"
- •Основные понятия er-диаграмм
- •Ошибка! Ошибка связи.
- •6. Элементы языка sql
- •6.1 Типы данных
- •6.2 Операторы dml (определения объектов базы данных)
- •6.2.1 Операторы работы с таблицами
- •6.3 Операторы dml (операторы манипулирования данными)
- •6.3.1 Примеры использования операторов манипулирования данными
- •Insert - вставка строк в таблицу
- •6.3.2 Update - обновление строк в таблице
- •6.3.3 Delete - удаление строк в таблице
- •6.3.4 Выбор данных из таблицы select
- •6.3.4.1 Общий синтаксис команды select
- •6.3.4.2 Примеры работы с использованием оператора select
- •Использование агрегатных функций в запросах
- •Использование агрегатных функций с группировками
- •Использование подзапросов
- •Использование объединения, пересечения и разности
- •6.3.4.3 Порядок выполнения оператора select
- •6.3.4.4 Реализация реляционной алгебры средствами оператора select (Реляционная полнота sql)
- •6.4 Объекты и концепции базы данных
- •6.4.1 Таблицы (Tables)
- •6.4.2 Столбцы (Columns)
- •6.4.3 Типы данных (Data types)
- •Тип данных blob
- •6.4.4 Домены (Domains)
- •6.4.5 Справочные ограничения целостности (Referential integrity constraints)
- •6.4.6 Индексы (Indexes)
- •6.4.7 Представления (Views)
- •6.4.8. Хранимые процедуры (Stored procedures)
- •6.4.9 Триггеры (Triggers)
- •6.4.10 Генераторы (Generators)
- •6.4.11 Защита (Security)
- •6.5 Операторы sql для работы с объектами бд
- •6.5.1 Представления
- •6.5.2 Хранимые процедуры
- •6.5.3 Генераторы
- •6.5.4 Триггеры
- •6.5.5 Индексы
- •6.6 Инструкции sql
- •7. Физическая организация и работа субд
- •7.1 Хранение данных
- •Ошибка! Ошибка связи.
5.3 Критерии оценки качества логической модели данных
Цель введения критериев – дать некоторые величины, характеризующие принципы построения хороших логических моделей данных. Хороших в том смысле, что решения, принятые в процессе логического проектирования приводили бы к хорошим физическим моделям и в конечном итоге к хорошей работе БД.
Критерии качественной базы данных:
Адекватность базы данных предметной области;
Легкость разработки и сопровождения базы данных;
Скорость выполнения операций обновления данных (вставка, обновление, удаление кортежей);
Скорость выполнения операций по работе с данными данных.
Адекватность базы данных предметной области
База данных должна адекватно отражать предметную область. Это означает, что должны выполняться следующие условия:
1. Состояние базы данных в каждый момент времени должно соответствовать состоянию предметной области.
2. Изменение состояния предметной области должно приводить к соответствующему изменению состояния базы данных
3. Ограничения предметной области, отраженные в модели предметной области, должны некоторым образом отражаться и учитываться базе данных.
Легкость разработки и сопровождения базы данных
Практически любая база данных, за исключением совершенно элементарных, содержит некоторое количество программного кода в виде триггеров и хранимых процедур, о которых речь пойдет ниже, когда перейдем непосредственно к вопросам изучения языка SQL.
Одно из назначений базы данных - предоставление информации пользователям. Информация извлекается из реляционной базы данных при помощи оператора SQL - SELECT. Одной из наиболее дорогостоящих операций при выполнении оператора SELECT является операция соединение таблиц. Таким образом, чем больше взаимосвязанных отношений было создано в ходе логического моделирования, тем больше вероятность того, что при выполнении запросов эти отношения будут соединяться, и, следовательно, тем медленнее будут выполняться запросы. Таким образом, увеличение количества отношений приводит к замедлению выполнения операций выборки данных, особенно, если запросы заранее неизвестны.
5.4 Нормализация и ее необходимость
Основной пример
Рассмотрим в качестве предметной области, как и ранее, «Университет». Модель предметной области опишем следующим неформальным текстом:
–Сотрудники университета читают дисциплины;
–Дисциплины состоят из нескольких видов занятий;
–Каждый сотрудник может читать одну или несколько дисциплин, или временно не читать (что бывает крайне редко);
–Каждую дисциплину может вести несколько сотрудников (разные виды занятий), или временно/на всегда дисциплину исключают из учебного плана, тогда ее не ведет никто из сотрудников.
–Каждое занятие ведет ровно один сотрудник;
–Каждый сотрудник принадлежит одной кафедре;
–Каждый сотрудник имеет телефон, находящийся на кафедре сотрудника.
В ходе дополнительного уточнения того, какие данные необходимо учитывать, можно выделить следующее:
–О каждом сотруднике необходимо хранить табельный номер и фамилию. Табельный номер является уникальным для каждого сотрудника.
–Каждая кафедра имеет уникальный номер;
–Каждая дисциплина имеет номер и наименование. Номер проекта дисциплины является уникальным;
–Каждый вид занятий в своей дисциплине имеет обозначение, уникальное в пределах проекта. Работы в разных дисциплинах могут иметь одинаковые обозначения.
Таблица 30
Первоначальная таблица отношения «Университет» (универсальная таблица)
Caf (pk) |
Phone |
Disp (pk) |
Cat (pk) |
FIO |
Tab_N_S |
ВТ |
211718 |
САПР |
ЛК |
Ланцов В.Н. |
1111 |
ВТ |
211718 |
САПР |
ПР |
Мамаев А.А |
2222 |
ВТ |
211718 |
АрхЭВМ |
ЛК |
Буланкин В.Б. |
3333 |
ВТ |
211718 |
АрхЭВМ |
КП |
Буланкин В.Б. |
3333 |
ИСИМ |
344248 |
ЗИ |
ЛК |
Алешкин А.А. |
4444 |
ИСИМ |
344248 |
ЗИ |
ЛБ |
Алешкин А.А. |
4444 |
ИЗИ |
317442 |
Инф-ка |
ПР |
Алешкин А.А. |
4444 |
Аномалии при работе с таблицами
Очевидно, что такое представление не является самым эффективным. Т.к. скажем телефон и название кафедры надо будет вводить от раза к разу. Не исключено, что при этом будут возникать ошибки (опечатки) при вводе. Например, «ИСИМ»–«ИЗИМ» и т.п. С точки зрения пользователя это будут одинаковые записи, или по крайней мере он так будет думать. Однако при обработке данных (таблиц) это уже будут разные кафедры (телефоны, сотрудники и т.д.). Кроме того, при удалении какой либо записи (кортежа)возможно будут потери информации. Например, при увольнении «Алешкина», его необходимо удалить из таблицы. Очевидным образом потеряются и сведения о соответствующих дисциплинах. Если же, этот человек перейдет на другую кафедру, то о нем надо будет вводить всю информацию заново.
Т.о. при работе с универсальными таблицами есть существенная проблема - Проблема избыточности данных. Т.е. данные практически всех столбцов многократно повторяются. Это видно;
Как следствие этой проблемы выделяется 3 аномалии
Аномалии вставки (INSERT)
В отношение «Университет» нельзя вставить данные о сотруднике, который пока не ведет ни одну дисциплину (занятие). Действительно, если, например, на кафедре «ИЗИ» появляется новый сотрудник, Пушкин, и он пока не читает ни одну дисциплину, то мы должны вставить в отношение кортеж <ИЗИ, 317442, , null, null, Пушкин>. Это сделать невозможно, т.к. атрибуты Caf, Disp, Cat входит в состав потенциального ключа, и, следовательно, не может содержать null-значений.
Точно также нельзя вставить данные о новой кафедре.
Причина аномалии - хранение в одном отношении разнородной информации (и о сотрудниках, и о дисциплинах, и о видах занятий).
Вывод - логическая модель данных неадекватна модели предметной области. БД, основанная на такой модели, будет работать некорректно.
Аномалии обновления (UPDATE)
Фамилии сотрудников, наименования дисциплин, номера телефонов повторяются во многих кортежах отношения. Поэтому если сотрудник меняет фамилию, или дисциплина меняет наименование, или меняется номер телефона, то такие изменения необходимо одновременно выполнить во всех местах, где эта фамилия, наименование или номер телефона встречаются, иначе отношение станет некорректным (например, одна и та же дисциплина в разных кортежах будет называться по-разному). Т.о., обновление БД одним действием реализовать невозможно.
Причина аномалии - избыточность данных, также порожденная тем, что в одном отношении хранится разнородная информация.
Вывод - увеличивается сложность разработки базы данных. База данных, основанная на такой модели, будет работать правильно только при наличии дополнительного программного кода.
Аномалии удаления (DELETE)
При удалении некоторых данных может произойти потеря другой информации. Например, если закрыть кафедру "ИСИМ" и удалить все строки, в которых она упоминается, то будут потеряны все данные о дисциплине «ЗИ» и частично о сотруднике «Алешкине» и т.п.
Причина аномалии - хранение в одном отношении разнородной информации (и о сотрудниках, и о дисциплинах, и о кафедрах).
Вывод - логическая модель данных неадекватна модели предметной области. БД, основанная на такой модели, будет работать неправильно.
