- •Введение в базы данных
- •Отношения между прикладными программами и субд
- •Системы обработки баз данных
- •История баз данных
- •Организационный контекст
- •Реляционная модель
- •Коммерческие субд для микрокомпьютеров
- •Клиент-серверные приложения баз данных
- •Базы данных с использованием Интернет-технологий
- •Распределенные базы данных
- •Объектно-ориентированные субд
- •Банк данных
- •Основные понятия и определения
- •Пользователи банков данных
- •База данных
- •Архитектура базы данных. Физическая и логическая независимость
- •Схемы и отображения
- •Независимость от данных
- •Система управления базами данных – субд
- •Процесс прохождения пользовательского запроса
- •Введение в разработку баз данных
- •Метаданные
- •Индексы
- •Метаданные приложений
- •Подсистема средств проектирования
- •Подсистема обработки
- •Ядро субд
- •Создание базы данных
- •Процесс разработки базы данных
- •Моделирование данных
- •Функции субд
- •Модели данных
- •Объектные или инфологические модели данных
- •Модели данных на основе записей или даталогические
- •Реляционная модель данных
- •Преподаватели
- •Сетевая модель данных
- •. Физические модели данных
- •Концептуальное моделирование
- •Реляционная модель
- •Структура реляционных данных
- •Кортежи
- •Внешний ключ
- •Альтернативная терминология
- •Математические отношения
- •Отношения в базе данных
- •Реляционные ключи
- •Реляционная целостность
- •Целостность сущностей
- •Ссылочная целостность
- •Реляционные языки
- •Реляционная алгебра
- •Учебный проект DreamHome
- •Реляционная алгебра (продолжение)
- •Выборка (или ограничение)
- •Проекция
- •Декартово произведение
- •Объединение
- •Разность
- •Операции соединения
- •Tema-соединение (θ-join)
- •Естественное соединение
- •Внешнее соединение
- •Полусоединение
- •Пересечение
- •Деление
- •Другие языки
- •Примеры применения реляционной алгебры
- •Обзор жизненного цикла информационных систем
- •Жизненный цикл приложения баз данных
- •Проектирование базы данных
- •Проектирование баз данных на основе восходящего подхода (Метод нормализации или декомпозиции)
- •Цель нормализации
- •Проблемы, вызываемые использованием единственного отношения (аномалии обновления)
- •Проблема вставки
- •Проблема обновления
- •Проблемы удаления
- •Функциональные зависимости
- •Процесс нормализации
- •Декомпозиция без потерь и функциональные зависимости
- •Первая нормальная форма (1 нф) (из Коннолли)
- •Вторая нормальная форма (2нф)
- •Третья нормальная форма (знф)
- •Нормальная форма Бойса-Кодда (нфбк)
- •4 И 5 нормальные формы (4нф и 5нф)
- •Пример нормализации
- •. Другая декомпозиция отношения консультант
- •Некоторые комментарии к декомпозиционному алгоритму проектирования
- •Некоторые модификации алгоритма проектирования Избыточные функциональные зависимости
- •Транзитивные зависимости
- •Добавление атрибутов в фз
- •Правила вывода
- •Алгоритм проектирования бд методом декомпозиции (восходящий метод)
- •Проверка отношений на завершающей фазе их проектирования
- •Задачи к текущему материалу
- •Пример аномалий для 2нф
- •Нормальная форма Бойса—Кодда (нфбк) с примером аномалий для 3 формы
- •Язык sql
- •Запрос одиночной таблицы
- •Проектирование в sql
- •Выборка в sql
- •Сортировка
- •Встроенные функции sql
- •Встроенные функции и группировка
- •Запрос нескольких таблиц
- •Вложенные запросы
- •Соединение с помощью sql
- •Сравнение вложенного запроса и соединения
- •Внешнее соединение
- •Операторы exists и not exists
- •Изменение данных
- •Insert into запись
- •Insert into запись
- •Insert into третьекурсник
- •Удаление данных
- •Модификация данных
- •Запрос на sql с exist и not exist (реализация реляционной операции Деления)
- •Операция внешнего соединения таблиц в access (Мои замечания)
- •Псевдонимы столбцов и таблиц
- •Уточнения запроса
- •Теоретико-множественные операции
- •Декартово произведение наборов записей
- •Объединение наборов записей (union)
- •Пересечение наборов записей (intersect)
- •Intersect corresponding (id_компонента, Тип_компонента)
- •Вычитание наборов записей (except)
- •Операции соединения
- •Естественное соединение (natural join)
- •Условное соединение (join... On)
- •Соединение по именам столбцов (join... Using)
- •Внешние соединения
- •Левое соединение {left outer join)
- •Правое соединение {right outer join)
- •Внешнее соединение Преподаватель-Изучение-Предмет. Создание в access. Пример
- •Операторы exists и not exists
- •Низходящее проектирование бд на основе er-модели Модель «сущность—связь» и ее варианты
- •Реализация низходящего проектирования бд на основе er-модели
- •Типы сущностей
- •Способы представления сущностей на диаграмме
- •Атрибуты
- •Типы связей
- •Представление связей на диаграммах
- •Атрибуты связей
- •. Структурные ограничения
- •Показатель кардинальности
- •Степень участия
- •Примеры er-проектирования
- •Модель «сущность—связь» в другом рассмотрении
- •Элементы модели «сущность—связь»
- •Сущности
- •Атрибуты
- •Идентификаторы
- •Три типа бинарных связей
- •Диаграммы «сущность—связь»
- •Изображение атрибутов в диаграммах «сущность—связь»
- •Слабые сущности
- •Представление многозначных атрибутов при помощи слабых сущностей
- •Подтипы сущностей
- •Пример er-диаграммы
- •Документирование делового регламента
- •Модель «сущность—связь» и case-средства
- •Диаграммы «сущность—связь» в стиле uml
- •Сущности и связи в uml
- •Представление слабых сущностей
- •Представление подтипов
- •Конструкции ооп, введенные языком uml
- •Роль uml в базах данных на сегодняшний день
- •Примеры
- •Вопросы группы I
- •Вопросы группы II
- •Литература по курсу «базы и банки данных»
Отношения между прикладными программами и субд
Все предыдущие примеры и, разумеется, все приложения технологии баз данных имеют общую структуру, показанную на рис. 1.7, — пользователь взаимодействует с прикладной программой, которая, в свою очередь, взаимодействует с СУБД, обращающейся к данным в базе.
Когда-то граница между прикладной программой и СУБД была четко определена. Приложения писались на языках третьего поколения, таких как COBOL, и обращались к СУБД за услугами по обработке данных. Фактически, так дело обстоит до сих пор, чаще всего в базах данных, располагающихся на больших ЭВМ.
Рис. 1.7. Отношения между пользователями, приложениями базы данных, СУБД и базой данных
Сегодня, однако, возможности и функции многих коммерческих СУБД расширились настолько, что СУБД могут самостоятельно выполнять значительную часть функций, ранее находившихся в ведении прикладных программ. Например, в большинстве коммерческих СУБД есть генераторы отчетов и форм, которые можно встраивать в приложения. Этот факт важен для нас по двум причинам. Во-первых, хотя основной объем этого текста посвящен проектированию и разработке баз данных, мы часто будем уделять внимание проектированию и разработке приложений. В конце концов, ни одному пользователю не нужна база данных как таковая. Пользователям скорее нужны формы, отчеты и запросы по их данным.
Во-вторых, время от времени вы будете замечать, что материал этого курса в чем-то пересекается с материалом курса системного программирования, поскольку разработка эффективных приложений баз данных требует многих навыков из тех, что вы приобрели или приобретете в ходе изучения курса системного программирования. И наоборот, в большинство современных курсов системного программирования входит такая тема, как проектирование баз данных. Различие между двумя курсами заключается в расстановке акцентов: здесь мы делаем упор на проектирование, построение и обработку базы данных, а в курсе системного программирования — на разработку информационных систем, большинство из которых использует технологию баз данных.
Системы обработки файлов ;
Лучший способ уяснить общую природу и свойства современных баз данных — рассмотреть характеристики систем, существовавших до появления технологии баз данных. При эксплуатации такого рода систем возникал ряд проблем, которые технология баз данных помогла решить.
В первых деловых информационных системах группы записей хранились в отдельных файлах; такие системы назывались системами обработки файлов (file-processing systems). На рис. 1.8 приведены в качестве примера две системы обработки файлов, которые можно было бы использовать в бюро проката Treble Clef Music. Одна система обрабатывает данные клиентов, а другая — информацию о прокате.
Хотя системы обработки файлов являются огромным усовершенствованием по сравнению с ведением записей вручную, у них есть значительные ограничения:
+ данные разделены и изолированы;
4- значительная часть данных дублируется;
+ прикладные программы зависят от форматов файлов;
+ зачастую файлы несовместимы друг с другом;
+ представление данных в виде, удобном для пользователя, оказывается затруднительным.
Рис. 1.8. Две системы обработки файлов
Разделенные и изолированные данные
Служащие бюро Treble Clef Music должны ассоциировать клиентов с инструментами, которые те берут в аренду. Для системы, изображенной на рис. 1.8, нужно каким-то образом извлечь данные из файлов клиентов и проката и скомбинировать их в третий файл. В системах обработки файлов это вызовет сложности. Во-первых, системные аналитики и программисты должны определить, какие части каждого из файлов для этого требуются, а затем решить, как файлы должны относиться друг к другу; наконец, они должны скоординировать обработку файлов таким образом, чтобы извлечение данных происходило корректно. Даже для двух файлов эта задача довольно сложна, а вообразите себе, что необходимо скоординировать 10 или более файлов!
Дублирование данных
В примере с бюро проката Treble Clef Music часто возникает ситуация, когда имя клиента, его адрес и другие данные записываются несколько раз. А именно, эти данные записываются один раз в файл клиентов, а затем каждый раз, когда с данным клиентом заключается договор аренды, — в файл проката. То, что при этом впустую тратится дисковое пространство, — еще не самая большая проблема: главная проблема, возникающая при дублировании данных, касается целостности данных (data integrity).
Совокупность данных обладает целостностью, если данные в ней логически согласованы. Когда данные дублируются, это зачастую нарушает их целостность. Например, если клиент сменит фамилию или адрес, то все файлы, содержащие эти данные, необходимо будет обновить, но существует опасность, что обновлены будут не все файлы, и между ними появятся несоответствия. В случае Treble Clef Music может оказаться, что в разных записях в файле проката клиент имеет разные адреса.
Проблемы целостности данных являются серьезными. Если данные противоречат друг другу, это приведет к несогласованным результатам и неопределенности. Если отчет одного приложения не согласуется с отчетом другого приложения, то кто сможет сказать, какой из них является правильным? Когда результаты не согласованы, достоверность хранимых данных и даже само функционирование административной информационной системы ставятся под сомнение.
Зависимость прикладных программ от форматов файлов
При обработке файлов прикладные программы зависят от форматов файлов. Обычно в системах обработки файлов физические форматы файлов и записей являются частью кода приложения. В языке COBOL, например, форматы файлов записываются в разделе DATA DIVISION. Проблема заключается в том, что при внесении изменений в форматы файлов приходится также менять и прикладные программы. Например, если в записи о клиенте поле почтового индекса будет расширено с пяти цифр до девяти, все программы, работающие с этой записью, необходимо будет модифицировать, даже если они не используют это поле. Поскольку файл клиентов может обрабатываться двадцатью программами, такое изменение означает, что программист должен обнаружить все затронутые программы, внести в них изменения и затем заново протестировать их; все это требует значительных временных затрат и является дополнительным источником ошибок. Кроме того, требовать от программистов модификации программ, не использующих то поле, формат которого изменился, — значит просто бросать деньги на ветер.
Несовместимость файлов
Одним из следствий зависимости прикладных программ от форматов файлов является то, что сами форматы файлов зависят от языка или средства, используемого для их генерации. Так, формат файла, созданного программой на языке COBOL, отличается от формата файла, созданного программой на Visual Basic, который, в свою очередь, отличается от формата файла, созданного программой на C-t-+.
В результате, оперативно комбинировать или сравнивать файлы оказывается невозможно. Пусть, например, в файле под названием FILE-A хранятся данные о клиенте, содержащие поле Номер_Клиента, а в файле под названием FILE-B хранятся данные об аренде, также содержащие поле Номер_Клиента. Пусть нам требуется скомбинировать записи, у которых значение этого поля одинаково. Если FILE-A обрабатывается программой на Visual Basic, a FILE-B обрабатывается программой на C++, то прежде чем мы сможем комбинировать записи из них, нам придется преобразовать оба файла к некоторому общему формату. Это требует времени, а иногда вызывает затруднения. С увеличением количества комбинируемых файлов растет и число таких проблем.
Трудность представления данных в удобном для пользователя виде
В системе обработки файлов нелегко представить данные в естественном для пользователя виде. Пользователи хотят видеть данные об аренде в формате, аналогичном изображенному на рис. 1.5, б. Но для того чтобы вывести данные в таком виде, необходимо извлечь данные из нескольких файлов, скомбинировать их и представить вместе. Причина возникшего затруднения в том, что в системах обработки файлов связи между записями не представлены в явной форме и не обрабатываются. Поскольку система обработки файлов не может быстро определить, какие клиенты взяли напрокат какие инструменты, то создание отчета, демонстрирующего, например, предпочтения клиента, представляется крайне трудной задачей.
