
- •1.Традиционные файловые системы
- •1.1.Подход, используемый в файловых системах
- •2.Системы с базами данных
- •2.1.База данных
- •2.2.Система управления базами данных ─ субд
- •2.3.Разработка базы данных смена парадигмы
- •3.Преимущества и недостатки субд
- •4.Модели данных
- •4.1.Объектные модели данных
- •4.2.Модели данных на основе записей
- •4.2.1 Иерархическая модель данных
- •4.2.2 Сетевая модель данных
- •4.2.3 Реляционная модель данных
- •4.2.4 Свойства отношений
- •4.2.5 Реляционная целостность
- •Целостность сущностей
- •Ссылочная целостность
- •Корпоративные ограничения целостности.
- •5.Функции субд
- •6.Компоненты субд
- •7.Системные каталоги
- •8.Инструкции sql
- •8.1.Имена
- •8.2.Имена таблиц
- •8.3.Имена столбцов
- •8.4.Типы данных
- •8.5.Константы
- •9.Инструкция select
- •9.1.Предложение select
- •9.2.Предложение from
- •9.3.Результаты запроса на выборку
- •9.4.Простые запросы
- •9.5.Вычисляемые столбцы
- •9.6.Выборка всех столбцов
- •9.7.Повторяющиеся строки
- •9.8.Отбор строк (предложение where)
- •9.8.1 Сравнение
- •9.8.2 Проверка на принадлежность значений (оператор between and)
- •9.8.3 Проверка на членство в множестве (оператор in)
- •9.8.4 Проверка на соответствие шаблону (оператор like)
- •10.Запросы с объединением таблиц
- •10.1.Производительность при обработке многотабличных запросов
- •11.Статистические (агрегатные) функции
- •12.Запросы с группировкой (предложение group by)
- •12.1.Условие отбора групп (предложение having)
- •13.Подчиненные запросы (подзапросы)
- •13.1.Условия отбора в подчиненном запросе
- •13.1.1 Проверка на существование (предикат exists)
- •13.1.2 Многократное сравнение (предикаты any и all)
- •Предикат any
- •Предикат all
- •13.1.3 Уровни вложенности запросов
- •14.Представления
- •14.1.Создание представлений
- •14.2.Как субд работает с представлениями
- •14.3.Преимущества представлений
- •14.4.Недостатки представлений
- •14.5.Обновление представлений
- •14.6.Контроль над обновлением представлений (предложение with check option)
- •15.Добавление новых данных
- •15.1.Однострочная инструкция insert
- •15.2.Добавление значений null
- •15.3.Добавление всех столбцов
- •15.4.Многострочная инструкция insert
- •16.Удаление существующих данных
- •16.1.Удаление всех строк
- •16.2.Инструкция delete с подчиненным запросом
- •17.Обновление существующих данных
- •17.1.Обновление всех строк
- •17.2.Инструкции update с подчиненным запросом
- •18.Условия целостности данных
- •18.1.Обязательное наличие данных
- •18.2.Условия на значения
- •18.3.Целостность таблиц (сущностей)
- •18.4.Проблемы, связанные со ссылочной целостностью
- •18.5.Правила удаления и обновления
- •18.6.Каскадные удаления
- •18.7.Ссылочные циклы
- •19.Язык определения данных
- •19.1.Создание базы данных
- •19.2.Создание таблиц (инструкция create table)
- •19.2.1 Определения столбцов
- •19.2.2 Определение первичного и внешнего ключей
- •19.2.3 Условия уникальности и ограничения на значения столбцов
- •19.3.Удаление таблицы (инструкция drop table)
- •19.4.Изменение определения таблицы (инструкция alter table)
- •19.4.1 Добавление и удаление столбца
- •19.4.2 Изменение первичных и внешних ключей
- •20.Псевдонимы таблиц (инструкции create / drop synonym)
- •21.Индексы (инструкции create/drop index)
- •22.Транзакции
- •22.1.Инструкции commit и rollback
- •22.2.Модель транзакции в стандарте ansi/iso
- •22.3.Журнал транзакций
- •22.4.Транзакции и работа в многопользовательском режиме
- •22.4.1 Проблема пропавшего обновления
- •22.4.2 Проблема промежуточных данных
- •22.4.3 Проблема несогласованных данных
- •22.4.4 Проблема строк – призраков
- •22.5.Параллельные транзакции
- •22.6.Блокировка
- •22.6.1 Уровни блокировки
- •22.6.2 Жесткая и нежесткая блокировки
- •22.6.3 Тупиковые ситуации
- •22.6.4 Явная блокировка
- •23.Принципы защиты данных, применяемые в sql
- •23.1.Пользователи
- •23.1.1 Аутентификация пользователей
- •23.2.Защищаемые объекты
- •23.3.Привилегии
- •23.3.1 Работа с привилегиями при помощи ролей
- •23.3.2 Роли, определяемые пользователями
- •23.3.3 Разрешение и запрещение ролей
- •23.3.4 Предоставление привилегий (инструкция grant)
- •23.3.5 Передача привилегий (предложение with grant option)
- •23.3.6 Отмена привилегий (инструкция revoke)
- •Инструкция revoke и право предоставления привилегий
- •24.Программирование сервера баз данныхoracle посредством pl/sql
- •24.1.Блоки
- •24.2.Комментарии
- •24.3.Объявления
- •24.3.1 Переменные и константы
- •24.3.2 Подтипы, определяемые пользователями
- •24.3.3 Составные типы, определяемые пользователями
- •Вложенные таблицы
- •Изменяемые массивы
- •24.3.4 Атрибуты
- •24.3.5 Особые замечания относительно вложенных таблиц и изменяемых массивов
- •Инициализация вложенных таблиц и изменяемых массивов
- •Использование методов сборных конструкций со вложенными таблицами и с изменяемыми массивами
- •24.3.6 Курсоры, курсорные типы и курсорные переменные
- •Курсорные типы и переменные
- •24.4.Функциональные возможности программ
- •24.4.1 Управление выполнением программ
- •Условное управление
- •Итерационное управление
- •24.4.2 Взаимодействие с базами данных
- •Стандартный dml
- •Работа с курсорами
- •Работа с курсорными переменными
- •24.4.3 Обработка исключительных ситуаций
- •24.5.Типы программ pl/sql
- •24.5.1 Анонимные блоки
- •24.5.2 Хранимые процедуры и функции
- •Создание процедур
- •Создание функций
- •Вызов процедур и функций
- •Управление блоками в sql*Plus
- •24.5.3 Модули
- •Использование объектов модуля
- •24.5.4 Триггеры баз данных
- •24.6.Служебные модули oracle
- •24.6.1 Модуль dbms_output
- •24.6.2 Динамический sql
- •Модуль dbms_sql
- •Использование dbms_sql
- •24.6.3 Файловый ввод/вывод (модуль utl_file)
- •Безопасность
- •Безопасность базы данных
- •Безопасность операционной системы
- •Исключительные ситуации, устанавливаемые в utl_file
- •Открытие и закрытие файлов
- •Файловый вывод
- •Файловый ввод
- •24.6.4 Взаимодействие между соединениями (модуль dbms_pipe)
- •Посылка сообщений
- •Получение сообщений
- •Создание программных каналов и управление ими
- •Программные каналы
- •Общие и частные каналы
- •Привилегии и безопастность
- •Установление протокола связи
- •Форматирование сообщений
- •Адресация данных
- •25.Создание приложений баз данных средствами odbc
- •25.1.Архитектура odbc
- •25.2.Коды возврата
- •25.3.Основной алгоритм программ odbc
- •25.4.Функции инициализации и завершения
- •25.5.Выполнение операторов
- •25.5.1 Функции управления каталогом
- •25.5.2 Непосредственное выполнение
- •25.5.3 Подготавливаемое выполнение
- •Использование параметров при выполнении.
- •25.6.Выборка результатов.
- •25.6.1 Выборка информации о результирующем множестве
- •25.6.2 Базовые функции выборки данных
- •25.7. Подробный алгоритм использования odbc в прикладных программах
1.Традиционные файловые системы
Следует отметить, что рассмотрение вопросов, так или иначе связанных с информационными системами с базами данных традиционно начинается с обзора их предшественниц – файловых систем (file-based systems).
1.1.Подход, используемый в файловых системах
Файловые системы были разработаны в ответ на потребность в получении более эффективных способов доступа к данным. Однако, вместо организации централизованного хранилища всех данных предприятия, был использован децентрализованный подход, при котором сотрудники каждого отдела при помощи специалистов по обработке данных работают со своими собственными данными и хранят их в своем отделе. В связи с этим файловые системы обладают рядом существенных ограничений, а именно:
Разделение и изоляция данных
Когда данные изолированы в отдельных файлах, доступ к ним весьма затруднен. Трудности существенно возрастают, когда необходимо извлечь данные из двух и более файлов, так как для извлечения соответствующей поставленным условиям информации программист должен организовать синхронную обработку двух файлов, что с необходимостью приводит к созданию “предварительных” временных файлов для сохранения вспомогательной информации. Выполнение подобной обработки данных сопряжено с рядом трудностей, связанных со сложностью разработки надежного программного обеспечения, удовлетворяющего разнообразным запросам конечных потребителей информации.
Дублирование данных
Из-за децентрализованной работы с данными в файловой системе фактически поощряется бесконтрольное дублирование данных, и это, в принципе, неизбежно. Бесконтрольное дублирование данных нежелательно по следующим двум причинам:
Дублирование данных сопровождается неэкономичным расходованием ресурсов.
Еще более важен тот факт, что дублирование данных может привести к нарушению их целостности. Иначе говоря, данные в разных файлах могут стать противоречивыми. Например, проблема может возникнуть, если некий сотрудник получит повышение по службе с соответствующим увеличением заработной платы. Если это изменение будет зафиксировано только в информации отдела кадров, оставшись непроверенным в файлах расчетного сектора, то данный сотрудник ошибочно будет получать прежнюю заработную плату. Поскольку не существует никакого автоматического способа обновления данных одновременно и в файлах отдела кадров и в файлах расчетного сектора, нетрудно предвидеть, что подобные противоречия время от времени обязательно будут возникать.
Зависимость от данных
Как уже упоминалось, физическая структура, и способ хранения записей файлов данных жестко зафиксированы в коде программ приложений. Это значит, что изменить существующую структуру данных достаточно сложно. Например, увеличение в “файле Сотрудников” длины поля адреса с 40 до 41 символа кажется совершенно незначительным изменением его структуры, но для воплощения этого изменения потребуется, как минимум, создать одноразовую программу специального назначения, преобразующую уже существующий файл в новый формат. Помимо этого все обращающиеся к этому файлу программы должны быть изменены с целью соответствия новой структуре файла.
Несовместимость форматов файлов
Поскольку структура файлов определяется кодом приложений, она также зависит от языка программирования этого приложения. Например, структура файла, созданного программой на языке COBOL может совершенно отличаться от структуры файла, созданного программой на языке С. Прямая несовместимость таких файлов затрудняет процесс их совместной обработки.
Фиксированные запросы. Увеличение количества приложений
Во многих организациях типы создаваемых запросов имели фиксированную форму, и не было никаких инструментов создания незапланированных или произвольных запросов к данным.
В других организациях наблюдалось быстрое увеличение количества файлов и приложений. В конечном счете, наступал момент, когда сотрудники отдела обработки информации (ОИ) были, просто не в состоянии справится со всей этой работой с помощью имеющихся ресурсов. В этом случае нагрузка на сотрудников отдела ОИ настолько возрастала, что неизбежно наступал момент, когда программное обеспечение было неспособно адекватно отвечать на запросы пользователей, эффективность его падала. При этом часто игнорировались вопросы обеспечения функциональности системы: не предусматривались меры по обеспечению безопасности и целостности данных, средства восстановления в случае сбоя аппаратного и программного обеспечения, доступ к файлам часто ограничивался одним пользователем, т.е. не предусматривалось их совместное использование даже сотрудниками одного и того же отдела.