Базы данных. основные объекты бд. субд. Базы данных и субд. Недостатки реляционной модели

логической модели реляционной базы данных в объекты реляционной базы данных. Для решения этой задачи проектировщику базы данных необходимо знать: а) какими объектами располагает реляционная база данных в принципе; б) какие объекты поддерживает конкретная СУБД, которая выбрана для реализации базы данных.

Таким образом, мы предполагаем, что решение о выборе СУБД уже принято руководителем ИТ-проекта, и согласовано с заказчиком базы данных, т.е. СУБД задана. Проектировщик базы данных должен ознакомиться с документацией, в которой описан диалект SQL, поддерживаемый выбранной СУБД. В настоящей лекции предполагается, что была выбрана СУБД Oracle 9i, хотя подавляющая часть материала охватывает объекты в любой промышленной реляционной СУБД.

Замечание. О выборе СУБД. Выбор СУБД относится к многокритериальной задаче выбора и в настоящем курсе не рассматривается. Следует помнить о том, что СУБД обычно поддерживает только одну модель данных: реляционную, иерархическую, сетевую, многомерную, объектно-ориентированную, объектно-реляционную. Исключение составляют небольшое число СУБД. Например, ADABAS, Software AG (сетевая и реляционная модели), или Oracle 9i, Oracle Inc. (реляционная и объектно-реляционная модели). Обычно при выборе СУБД при всех прочих равных возможностях стараются создать базу данных на СУБД, претендующей на промышленный стандарт.

Иерархия объектов реляционной базы данных прописана в стандартах по SQL, в частности, в стандарте SQL-92 , на который мы будем ориентироваться при изложении материала настоящей лекции. Этот стандарт поддерживается практически всеми современными СУБД, вплоть до настольных. Иерархия объектов реляционной базы данных показана на рисунке ниже.

На самом нижнем уровне находятся наименьшие объекты, с которыми работает реляционная база данных, - столбцы (колонки) и строки. Они, в свою очередь, группируются в таблицы и представления.

Замечание. В контексте лекции атрибуты, колонки, столбцы и поля считаются синонимами. То же относится и к терминам "строка", "запись" и "кортеж".

Таблицы и представления, которые представляют физическое отражение логической структуры базы данных, собираются в схему. Несколько схем собираются в каталоги, которые затем могут быть сгруппированы в кластеры. Следует отметить, что ни одна из групп объектов стандарта SQL-92 не связана со структурами физического хранения информации в памяти компьютеров.


Рис. 8.1.

Помимо указанных на рисунке объектов, в реляционной базе данных могут быть созданы индексы, триггеры, события, хранимые команды, хранимые процедуры и ряд других. Теперь перейдем к определению объектов реляционной базы данных.

Основные объекты реляционной базы данных

Кластеры, каталоги и схемы не являются обязательными элементами стандарта и, следовательно, программной среды реляционных баз данных.

Под кластером понимается группа каталогов, к которым можно обращаться через одно соединение с сервером базы данных (программная компонента СУБД).

На практике процедура создания каталога определяется реализацией СУБД на конкретной операционной платформе. Под каталогом понимается группа схем. На практике каталог часто ассоциируется с физической базой данных как набором физических файлов операционной системы, которые идентифицируются ее именем.

Для проектировщика базы данных схема - это общее логическое представление отношений законченной базы данных. С точки зрения SQL, схема - это контейнер для таблиц, представлений и других структурных элементов реляционной базы данных. Принцип размещения элементов базы данных в каждой схеме полностью определяется проектировщиком базы данных.

Для создания таблиц и представлений наличие схемы не обязательно. Если у вас планируется инсталляция только одной логической базы данных, то ясно, что можно обойтись и без схемы. Но если планируется, что одна и та же СУБД будет использоваться для поддержки нескольких баз данных, то надлежащая организация объектов баз данных в схемы может значительно облегчить сопровождение этих баз данных. На практике схема часто ассоциируется с объектами определенного пользователя физической базы данных.

Далее объекты реляционной базы данных будут вводиться в контексте реляционной СУБД Oracle 9i. Такой подход принят потому, что проектирование физической модели реляционной базы данных выполняется для конкретной среды ее реализации.

В Oracle 9i термин схема (Schema) используется для описания всех объектов базы данных, которые созданы некоторым пользователем. Для каждого нового пользователя автоматически создается новая схема.

К числу основных объектов реляционных баз данных относятся таблица, представление и пользователь.

Таблица (Table) является базовой структурой реляционной базы данных. Она представляет собой единицу хранения данных - отношение. Таблица идентифицируется в базе данных своим уникальным именем, которое включает в себя идентификацию пользователя. Таблица может быть пустой или состоять из набора строк.

Представление (View) - это поименованная динамически поддерживаемая СУБД выборка из одной или нескольких таблиц базы данных. Оператор выборки ограничивает видимые пользователем данные. Обычно СУБД гарантирует актуальность представления - его формирование производится каждый раз, когда представление используется. Иногда представления называют виртуальными таблицами .

Пользователь (User) - это объект, обладающий возможностью создавать или использовать другие объекты базы данных и запрашивать выполнение функций СУБД , таких как организация сеанса работы, изменение состояние базы данных и т. д.

Для упрощения идентификации и именования объектов в базе данных поддерживается такие объекты, как синоним, последовательность и .

Синоним ( Synonym ) - это альтернативное имя объекта (псевдоним) реляционной базы данных, которое позволяет иметь доступ к данному объекту. Синоним может быть общим и частным. Общий синоним позволяет всем пользователям базы данных обращаться к соответствующему объекту по его псевдониму. Синоним позволяет скрыть от конечных пользователей полную квалификацию объекта в базе данных.

Последовательность (Sequence) - это объект базы данных, который позволяет генерировать последовательность уникальных чисел (номеров) в условиях многопользовательского асинхронного доступа. Обычно элементы последовательности используются для уникальной нумерации элементов таблиц (строк) в операциях модификации данных.

Определенные пользователем типы данных ( User-defined data types ) представляют собой определенные пользователем типы атрибутов (домены), которые отличаются от поддерживаемых (встроенных) СУБД типов. Они определяются на основе встроенных типов. Определенные пользователем типы данных образуют ту часть среды СУБД, которая организована в соответствии с объектно-ориентированной парадигмой.

Для обеспечения эффективного доступа к данным в реляционных СУБД поддерживаются ряд других объектов: индекс, табличная область, кластер, секция.

Индекс (Index) - это объект базы данных, создаваемый для повышения производительности выборки данных и контроля уникальности первичного ключа (если он задан для таблицы). Полностью индексные таблицы (index-organized tables) исполняют роль таблицы и индекса одновременно.

Табличное пространство или область ( Tablespace ) - это именованная часть базы данных, используемая для распределения памяти для таблиц и индексов. В Oracle 9i - это логическое имя физических файлов операционной системы. Все объекты базы данных, в которых хранятся данные, соответствуют некоторым табличным пространствам . Большинство объектов базы данных, в которых данные не хранятся, находятся в словаре данных, расположенном в табличном пространстве SYSTEM .

Кластер (Cluster) - это объект, задающий способ совместного хранения данных в нескольких или одной таблице. Одним из критериев использования кластера является наличие общих ключевых полей в нескольких таблицах, которые используются в одной и той же команде SQL. Обычно кластеризованные столбцы или таблицы хранятся в базе данных в виде таблиц хэширования (т.е. специальным образом).

Секция (Partition) - это объект базы данных, который позволяет представить объект с данными в виде совокупности подобъектов, отнесенных к различным табличным пространствам . Таким образом, секционирование позволяет распределять очень большие таблицы на нескольких жестких дисках.

Для обработки данных специальным образом или для реализации поддержки ссылочной целостности базы данных используются объекты: хранимая процедура, функция, команда, триггер, таймер и пакет (Oracle). С помощью этих объектов базы данных можно выполнять так называемую построчную обработку (record processing) данных. С точки зрения приложений баз данных построчная обработка - это последовательная выборка данных по одной строке, ее обработка и переход к обработке следующей строки.

Данные объекты реляционной базы данных представляют собой программы, т.е. исполняемый код. Этого код обычно называют серверным кодом (server-side code) , поскольку он выполняется компьютером, на котором установлено ядро реляционной СУБД. Планирование и разработка такого кода является одной из задач проектировщика реляционной базы данных.

Хранимая процедура ( Stored procedure ) - это объект базы данных, представляющий поименованный набор команд SQL и/или операторов специализированных языков обработки программирования базы данных (например, SQLWindows или PL/SQL).

Функция (Function) - это объект базы данных, представляющий поименованный набор команд SQL и/или операторов специализированных языков обработки программирования базы данных, который при выполнении возвращает значение - результат вычислений.

Команда (Command) - это поименованный оператор SQL, который заранее откомпилирован и сохраняется в базе данных. Скорость обработки команды выше, чем у соответствующего ему оператора SQL, т.к. при этом не выполняются фазы синтаксического разбора и компиляции.

Триггер (Trigger) - это объект базы данных, который представляет собой специальную хранимую процедуру. Эта процедура запускается автоматически, когда происходит связанное с триггером событие (например, до вставки строки в таблицу).

Таймер (Timer) отличается от триггера тем, что запускающим событием для хранимой процедуры является событие таймера.

Пакет (Package) - это объект базы данных, который состоит из поименованного структурированного набора переменных, процедур и функций.

В распределенных реляционных СУБД имеются специальные объекты: снимок и связь базы данных.

Снимок (Snapshop) - локальная копия таблицы удаленной базы данных, которая используется для тиражирования (репликации) таблицы или результата запроса. Снимки могут быть модифицируемыми или предназначенными только для чтения.

Связь базы данных (Database Link) или связь с удаленной базой данных - это объект базы данных, который позволяет обратиться к объектам удаленной базы данных. Имя связи базы данных, грубо говоря, можно представить как ссылку на параметры доступа к удаленной базы данных.

Для эффективного управления разграничением доступа к данным в Oracle поддерживает объект роль.

Роль (Role) - объект базы данных, представляющий собой поименованную совокупность привилегий, которые могут назначаться пользователям, категориям пользователей или другим ролям.

План-конспект урока

Тема: Базы данных. Основные объекты БД. СУБД.

Цель урока:

  • 1. Познавательная - познакомить учащихся с:
    • определением базы данных и СУБД,
    • их основными типами (моделями),
    • интерфейсом программы Ms ACCESS,
    • основными объектами БД,
    • разными способами создания таблиц.
  • 2. Развивающая
    • Учить строить аналогии, выделять главное, ставить и решать проблемы.
  • 3. Воспитательная
    • Воспитывать аккуратность, внимательность, вежливость и дисциплинированность.

План урока:

  • 1. Актуализация опорных знаний.
  • 2. Запуск программ на выполнение;
  • 3. Ввод данных в таблицу.
  • 2. Определение БД И СУБД.
  • 3. Типы СУБД.
  • 4. Реляционная СУБД. Таблица, запись, поле.
  • 5. Самостоятельная работа на компьютере.
  • 6. Закрепление нового материала.
  • 7. Итоги урока.
  • 1 Определение БД И СУБД

    База данных (БД) – это совокупность взаимосвязанных данных, которые хранятся во внешней памяти компьютера, и организованы по определенным правилам, которые предполагают общие принципы описания, хранения и обработки данных. Информация, которая хранится в БД, как правило, относится к некоторой конкретной предметной области. Например, базы данных:

    • книжного фонда библиотеки,
    • кадрового состава предприятия,
    • законодательных актов уголовного права,
    • современной музыки.

    БД делятся на фактографические и документальные. Фактографические БД содержат короткие сведения об объектах, поданные в точно определенном формате (1-3), например, Автор, название, год издания … В документальных БД содержится информация разного типа: текстовая, звуковая, графическая, мультимедийная (4, 5). Например, БД современной музыки может содержать тексты и ноты песен, фотографии авторов, звуковые записи, видеоклипы. Сама по себе БД содержит только информацию – «Информационный склад» –и не может обслуживать запросы пользователя на поиск и обработку информации. Обслуживание пользователя осуществляет СИСТЕМА УПРАВЛЕНИЯ БАЗОЙ ДАННЫХ. СУБД – Это ПО, которое позволяет создавать БД, обновлять и дополнять информацию, обеспечивать гибкий доступ к информации. СУБД создает на экране компьютера определенную среду для работы пользователя (интерфейс), и имеет определенные режимы работы и систему команд. Именно на основе СУБД создаются и функционируют информационно-поисковые системы(WWW).

    3. Типы СУБД

    Известны 3 способа организации информации в БД и связей между ними:

    • Иерархические (в виде дерева),
    • Сетевые,
    • Реляционные.

    Иерархические. Существует строгая подчиненность элементов: один главный, остальные подчиненные. Например, система каталогов на диске. Сетевая БД более гибкая: нет явно выраженного главного элемента и существует возможность установления горизонтальных связей. Например, организация информации в Интернете (WWW). Наиболее распространенными являются реляционные БД.

    4. Реляционная СУБД. Таблица, запись, поле.

    Реляционной (от английского “ relation” - отношение) называется БД, которая содержит информацию, организованную в виде прямоугольной таблицы. Каждая строка таблицы содержит информацию об одном конкретном объекте БД (книге, сотруднике, товаре), а каждый столбец – конкретную характеристику этого объекта (фамилия, название, цена). Строки такой таблицы называются записями, столбцы – полями. Каждая запись должна отличаться от другой значением хотя бы одного поля, которое называется ключом. Ключевое поле – это поле или группа полей, которые однозначно определяют запись. Например, табельный номер сотрудника, код изделия, номер автомобиля. Таб_№ ФИО Дата_рожд Дата_приема Должность Оклад 001 < Иванов И.И. 12.05.65 1.02.80 директор 1000 002 Петров П.П. 30.10.75 2.03.95 бугалтер 500 003 Сидоров С.С 4.01.81 4.06.00 исполнитель 100 Каждое поле имеет свой формат и тип. Реальные БД состоят, как правило, из нескольких таблиц, связанных между собой каким-нибудь полем и, при запросе к такой БД можно использовать информацию из разных таблиц. Основные объекты БД:

    • Таблицы - основные объекты БД, где хранится информация,
    • Запросы – предназначенные для выбора нужных данных из одной или нескольких взаимосвязанных таблиц.
    • Формы – предназначенные для ввода, просмотра и редактирования взаимосвязанных данных в удобном виде.
    • Отчёты – формирование данных в удобном для просмотра виде и при необходимости их печати.

    5. Самостоятельная работа на компьютере

    На сетевом диске, в папке «ЗАДАНИЯ ДЛЯ БД» открыть презентацию «Базы данных и СУБД», прочитать ее и ответить письменно на вопросы:

    • 1. Какое основное назначение БД?
    • 2. По каким критериям классифицируются БД? Укажите критерий и виды, соответственно этого критерия.
    • 3. Что такое ключевое поле в БД?
    • 4. Какой основной элемент БД?
    • 5. Какие операции можно производить с помощью СУБД с БД?
    • 6. Основные типы данных в таблицах СУБД.

    6. Итоги урока

    На этом уроке вы познакомились с базами данных, их назначением, областями применения, типами, моделями СУБД.

    Практическая часть

    Создание базы данных. Ввод и форматирование данных

    • 1. Включите компьютер. Загрузите СУБД ACCESS. Сначала нужно создать новую базу данных.
    • 2. Выполним следующую последовательность действий: в меню Файл выберем команду Создать. Имя файла: skaz.mdb. OK. Перед вами появилось диалоговое окно «База данных».
    • 3. Внимательно прочитайте назначение кнопок на панели инструментов, медленно перемещая курсор мыши по кнопкам.
    • 4. После этого создайте таблицу, выполнив следующую последовательность действий: Таблица/Создать/Новая таблица.

    Создание таблицы, то есть определение входящих в таблицу полей, производится заполнением специальной таблицы: Поле Тип данных Описание

    • 5. Заполните такую таблицу, внеся в нее следующие данные:

    Поле Тип данных Описание № Счетчик Персонаж Текстовый Профессия Текстовый Особые приметы Текстовый Герой Логический Положительный или отрицательный герой

    • 6. Поле № не обязательное, мы его вводим для того, чтобы определить ключевое поле, так как любая таблица должна иметь ключ.
    • 7. Созданную таблицу нужно сохранить, дав ей имя с помощью команд: Файл/Сохранить как..., Имя таблицы: «Персонаж», OK.
    • 8. Введите информацию в таблицу Таблица/«Персонаж»/Открыть и обычным образом введите данные, например такие:

    № Персонаж Профессия особые приметы герой

    • 1 Буратино деревянный человечек длинный нос Да
    • 2 Папа Карло Шарманщик Да
    • 3 Карабас Барабас директор кукольного театра длинная борода, достающая до пола Нет
    • 4 Лиса Алиса Мошенница хромая на одну ногу Нет
    • 5 Кот Базилио Мошенник слепой на оба глаза Нет
    • 6 Мальвина артистка театра девочка с голубыми волосами Да
    • 7 Дуремар Фармацевт характерный запах тины Нет
    • 8 Тортилла хранительница золотого ключика черепаха Да
    • 9. При помощи мыши выделите:
      • а) запись 5,
      • б) запись 3,
      • в) с третьей по седьмую запись. Отмените выделение.
      • г) Выделите все записи. Отмените выделение.
      • д) Выделите поле «Персонаж».
      • е) Выделите одновременно поля: «Профессия», «Особые приметы» и «Герой», отмените выделение.
      • ж) Выделите все поля. Это можно сделать при помощи мыши или в меню Правка выбрать команду Выделить все записи.
    • 10. Отмените выделение.
    • 11. Выделите:
      • а) В поле «Особые приметы» отметьте шестую запись.
      • б) В поле «Персонаж» выделите с четвертой по шестую запись.
      • в) Не отпуская кнопку мыши, отметьте эти же записи в полях «Особые приметы» и «Герой».
    • 12. Отмените выделение.
    • 13. Выделите всю таблицу.
    • 14. Отмените выделение.
    • 15. Измените ширину каждого столбца, так чтобы ширина колонок была минимальной, но был виден весь текст.

    Это можно сделать при помощи мыши, раздвинув столбцы или следующим образом. Выделите нужный столбец и нажмите правую кнопку мыши, в контекстном меню выберете команду «Ширина столбца»; в открывшемся окне нажмите кнопку По ширине данных. Проделайте такую же работу со всеми полями. Высоту строки можно изменить аналогичным образом с помощью мыши или в меню Формат командой Высота строки. Причем достаточно отредактировать одну строку, высота остальных строк изменяется автоматически.

    • 16. Любым способом измените высоту строки и сделайте ее равной 30.
    • 17. Измените шрифт таблицы на Arial Cyr, размер шрифта 14, полужирный.

    Изменить шрифт можно так: вывести указатель мыши за пределы таблицы и нажать левую кнопку мыши, в контекстном меню выбрать Шрифт или в меню Правка на панели инструментов выбором команды Шрифт.

    • 18. Измените шрифт текста на Times New Roman Cyr, размер шрифта 10.
    • 19. Измените ширину полей.
      • а) Сделайте столбец «Персонаж» шириной 20.
      • б) Столбец «Особые приметы» шириной 25.

    Вы видите, что текст в этих полях напечатался в две строки.

    • 20. Подгоните ширину столбцов так, чтобы текст вмещался полностью.
    • 21. Выполните сортировку таблицы по полю «Персонаж» в порядке, обратном алфавитному.

    Это можно сделать так. Выделите поле «Персонаж» и нажмите кнопку Сортировка по убыванию на панели инструментов.

    • 22. Верните таблицу в исходное состояние.

    Реляционная СУБД – СУБД, управляющая реляционными базами данных.

    Реляционная модель ориентирована на организацию данных в виде двумерных таблиц. Каждая реляционная таблица представляет собой двумерный массив и обладает следующими свойствами:

      каждый элемент таблицы – один элемент данных.

      все ячейки в столбце таблицы однородные, то есть все элементы в столбце имеют одинаковый тип (числовой, символьный и т. д.)

      каждый столбец имеет уникальное имя

      одинаковые строки в таблице отсутствуют

      порядок следования строк и столбцов может быть произвольным

    Строка таблицы называется записью, колонка – полем.

    Первичный ключ (англ. primary key) – минимальное множество атрибутов, являющееся подмножеством заголовка данного отношения, составное значение которых уникально определяет кортеж отношения. На практике термин первичный ключ обозначает поле или группу полей таблицы базы данных, значение которого (или комбинация значений которых) используется в качестве уникального идентификатора записи этой таблицы. В реляционной теории таблица представляет собой неупорядоченный набор записей. Единственный способ идентифицировать определённую запись в этой таблице – это указать набор значений одного или нескольких полей, который был бы уникальным для этой записи. Отсюда и происходит понятие первичного ключа – набора полей таблицы, совокупность значений которых определена для любой записи (строки) этой таблицы и различна для любых двух записей.

    Внешний ключ (англ. foreign key) – поле таблицы, предназначенное для хранения значения первичного ключа другой таблицы с целью организации связи между этими таблицами.

    Пусть имеются таблицы A и B. Таблица A содержит поля a, b, c, d, из которых поле a – первичный ключ. Таблица B содержит поля x, y, z. В поле y содержится значение поля a одной из записей таблицы A. В таком случае поле y и называется внешним ключом таблицы A в таблице B.

    Вот такой SQL-запрос вернёт все связанные пары записей из таблиц A и B:

    select * from A, B where A.a = B.y;

    Внешний ключ в таблице может ссылаться и на саму эту таблицу. В таких случаях говорят о рекурсивном внешнем ключе. Необходимо для реализации древовидной структуры данных в реляционной таблице.

    СУБД поддерживают автоматический контроль ссылочной целостности на внешних ключах.

    Виды связей таблиц

    Существует три виды связей таблиц.

    Связь с отношением «один-ко-многим». Является наиболее часто используемым типом связи между таблицами. В такой связи каждой записи в таблице A могут соответствовать несколько записей в таблице B, а запись в таблице B не может иметь более одной соответствующей ей записи в таблице A. Например, в одном подразделение может работать несколько сотрудников, но ни один сотрудник не может работать сразу в нескольких подразделениях. Принятое обозначение (1 – ∞).

    Отношение «многие-ко-многим». При этом отношении одной записи в таблице A могут соответствовать несколько записей в таблице B, а одной записи в таблице B несколько записей в таблице A. Такая схема реализуется только с помощью третьей (связующей) таблицы, ключ которой состоит по крайней мере из двух полей, которые являются полями внешнего ключа в таблицах A и B. Например, между таблицами инспекторов и лиц, пересекающих границу, связь определяется отношением «многие-ко-многим». Один декларант может обсуживаться у нескольких инспекторов, в то же время инспектор может обслуживать несколько лиц. Такая связь определяется путем создания двух связей с отношением «один-ко-многим» для таблицы Инспектор_Декларант, в которой обязательно должны быть поля КлючИнспектора и КлючДекларанта.

    При отношении «один-к-одному» запись в таблице A может иметь не более одной связанной записи в таблице B и наоборот. Этот тип связи используют не очень часто, поскольку такие данные могут быть помещены в одну таблицу. Связь с отношением «один-к-одному» используют для разделения очень широких таблиц или для отделения части таблицы по соображениям защиты.

    Логическая модель данных, строгая математическая теория, описывающая структурный аспект, аспект целостности и аспект обработки данных в реляционных базах данных.

    • Структурный аспект (составляющая) - данные в базе данных представляют собой набор отношений.
    • Аспект (составляющая) целостности - отношения (таблицы) отвечают определенным условиям целостности. РМД поддерживает декларативные ограничения целостности уровня домена (типа данных), уровня отношения и уровня базы данных.
    • Аспект (составляющая) обработки (манипулирования) - РМД поддерживает операторы манипулирования отношениями (реляционная алгебра, реляционное исчисление).

    Кроме того, в состав реляционной модели данных обычно включают теорию нормализации.

    Реляционная модель данных является приложением к задачам обработки данных таких разделов математики как теория множеств и формальная логика.

    Термин «реляционный» означает, что теория основана на математическом понятии отношение (relation). В качестве неформального синонима термину «отношение» часто встречается слово таблица. Необходимо помнить, что «таблица» есть понятие нестрогое и неформальное и часто означает не «отношение» как абстрактное понятие, а визуальное представление отношения на бумаге или экране.

    Для лучшего понимания РМД следует отметить три важных обстоятельства:

    • модель является логической, т.е. отношения являются логическими (абстрактными), а не физическими (хранимыми) структурами;
    • для реляционных баз данных верен информационный принцип: все информационное наполнение базы данных представлено одним и только одним способом, а именно - явным заданием значений атрибутов в кортежах отношений; в частности, нет никаких указателей (адресов), связывающих одно значение с другим;
    • наличие реляционной алгебры позволяет реализовать декларативное программирование и декларативное описаний ограничений целостности, в дополнение к навигационному (процедурному) программированию и процедурной проверке условий.

    Принципы реляционной модели были сформулированы в 1969-1970 годах Э. Ф. Коддом (E. F. Codd). Идеи Кодда были впервые подробно изложены в статье «A Relational Model of Data for Large Shared Data Banks», ставшей классической.

    Строгое изложение теории реляционных баз данных (реляционной модели данных) в современном понимании можно найти в книге К. Дж. Дейта. «C. J. Date. An Introduction to Database Systems» («Дейт, К. Дж. Введение в системы баз данных»).

    Альтернативами реляционной модели являются иерархическая модель и сетевая модель. Некоторые системы, использующие эти старые архитектуры по-прежнему используется до сих пор. Кроме того, можно упомянуть об объектной модели данных, на которой строятся так называемые объектные СУБД, хотя однозначного и общепринятого определения такой модели нет.

    Достоинства реляционной модели

    • Простота и доступность понимания конечным пользователем - единственной информационной конструкцией является таблица.
    • При проектировании реляционной БД применяются строгие правила, базирующие на математическом аппарате.
    • Полная независимость данных. При изменении структуры реляционной изменения, которые требуют произвести в прикладных программах, минимальны.
    • Для построения запросов и написания прикладных программ нет необходимости знания конкретной организации БД во внешней памяти.

    Недостатки реляционной модели

    • Относительно низкая скорость доступа и большой объем внешней памяти.
    • Трудность понимания структуры данных из-за появления большого кол-ва таблиц в результате логического проектирования.
    • Далеко не всегда предметную область можно представить в виде совокупности таблиц.

    Этой статьей мы начинаем новый цикл, посвященный базам данных, современным технологиям доступа к данным и их обработки. На протяжении данного цикла мы планируем рассмотреть наиболее популярные настольные и серверные системы управления базами данных (СУБД), механизмы доступа к данным (OLD DB, ADO, BDE и др.) и утилиты для работы с базами данных (средства администрирования, генераторы отчетов, средства графического представления данных). Кроме того, мы планируем уделить внимание методам публикации данных в Internet, а также таким популярным способам обработки и хранения данных, как OLAP (On-Line Analytical Processing), и созданию хранилищ данных (Data Warehousing).

    В данной статье мы рассмотрим основные понятия и принципы, лежащие в основе систем управления базами данных. Мы обсудим реляционную модель данных, понятие ссылочной целостности и принципы нормализации данных, а также средства проектирования данных. Затем мы расскажем, какими бывают СУБД, какие объекты могут содержаться в базах данных и каким образом осуществляются запросы к этим объектам.

    Основные концепции реляционных баз данных

    Начнем с основных понятий СУБД и краткого введения в теорию реляционных баз данных - наиболее популярного сейчас способа хранения данных.

    Реляционная модель данных

    Реляционная модель данных была предложена Е.Ф.Коддом (Dr. E.F.Codd), известным исследователем в области баз данных, в 1969 году, когда он был сотрудником фирмы IBM. Впервые основные концепции этой модели были опубликованы в 1970 г. «A Relational Model of Data for Large Shared Data Banks», CACM, 1970, 13 N 6).

    Реляционная база данных представляет собой хранилище данных, содержащее набор двухмерных таблиц. Набор средств для управления подобным хранилищем называется реляционной системой управления базами данных (РСУБД) . РСУБД может содержать утилиты, приложения, сервисы, библиотеки, средства создания приложений и другие компоненты.

    Любая таблица реляционной базы данных состоит из строк (называемых также записями ) и столбцов (называемых также полями ). В данном цикле мы будем использовать обе пары терминов.

    Строки таблицы содержат сведения о представленных в ней фактах (или документах, или людях, одним словом, - об однотипных объектах). На пересечении столбца и строки находятся конкретные значения содержащихся в таблице данных.

    Данные в таблицах удовлетворяют следующим принципам:

    1. Каждое значение, содержащееся на пересечении строки и колонки, должно быть атомарным (то есть не расчленяемым на несколько значений).
    2. Значения данных в одной и той же колонке должны принадлежать к одному и тому же типу, доступному для использования в данной СУБД.
    3. Каждая запись в таблице уникальна, то есть в таблице не существует двух записей с полностью совпадающим набором значений ее полей.
    4. Каждое поле имеет уникальное имя.
    5. Последовательность полей в таблице несущественна.
    6. Последовательность записей также несущественна.

    Несмотря на то что строки таблиц считаются неупорядоченными, любая система управления базами данных позволяет сортировать строки и колонки в выборках из нее нужным пользователю способом.

    Поскольку последовательность колонок в таблице несущественна, обращение к ним производится по имени, и эти имена для данной таблицы уникальны (но не обязаны быть уникальными для всей базы данных).

    Итак, теперь мы знаем, что реляционные базы данных состоят из таблиц. Для иллюстрации некоторых теоретических положений и для создания примеров нам необходимо выбрать какую-нибудь базу данных. Чтобы не «изобретать колесо», мы воспользуемся базой данных NorthWind, входящей в комплект поставки Microsoft SQL Server и Microsoft Access.

    Теперь давайте рассмотрим связи между таблицами.

    Ключи и связи

    Давайте взглянем на фрагмент таблицы Customers (клиенты) из базы данных NorthWind (мы удалили из нее поля, несущественные для иллюстрации связей между таблицами).

    Поскольку строки в таблице неупорядочены, нам нужна колонка (или набор из нескольких колонок) для уникальной идентификации каждой строки. Такая колонка (или набор колонок) называется первичным ключом (primary key ). Первичный ключ любой таблицы обязан содержать уникальные непустые значения для каждой строки.

    Если первичный ключ состоит из более чем одной колонки, он называется составным первичным ключом (composite primary key ).

    Типичная база данных обычно состоит из нескольких связанных таблиц. Фрагмент таблицы Orders (заказы).

    Поле CustomerID этой таблицы содержит идентификатор клиента, разместившего данный заказ. Если нам нужно узнать, как называется компания, разместившая заказ, мы должны поискать это же значение идентификатора клиента в поле CustomerID таблицы Customers и в найденной строке прочесть значение поля CompanyName. Иными словами, нам нужно связать две таблицы, Customers и Orders, по полю CustomerID. Колонка, указывающая на запись в другой таблице, связанную с данной записью, называется внешним ключом (foreign key ). Как видим, в случае таблицы Orders внешним ключом является колонка CustomerID (рис. 1).

    Иными словами, внешний ключ - это колонка или набор колонок, чьи значения совпадают с имеющимися значениями первичного ключа другой таблицы.

    Подобное взаимоотношение между таблицами называется связью (relationship ). Связь между двумя таблицами устанавливается путем присваивания значений внешнего ключа одной таблицы значениям первичного ключа другой.

    Если каждый клиент в таблице Customers может разместить только один заказ, говорят, что эти две таблицы связаны соотношением один-к-одному (one-to-one relationship ). Если же каждый клиент в таблице Customers может разместить ноль, один или много заказов, говорят, что эти две таблицы связаны соотношением один-ко-многим (one-to-many relationship ) или соотношением master-detail . Подобные соотношения между таблицами используются наиболее часто. В этом случае таблица, содержащая внешний ключ, называется detail-таблицей , а таблица, содержащая первичный ключ, определяющий возможные значения внешнего ключа, называется master-таблицей .

    Группа связанных таблиц называется схемой базы данных (database schema ). Информация о таблицах, их колонках (имена, тип данных, длина поля), первичных и внешних ключах, а также иных объектах базы данных, называется метаданными (metadata ).

    Любые манипуляции с данными в базах данных, такие как выбор, вставка, удаление, обновление данных, изменение или выбор метаданных, называются запросом к базе данных (query ). Обычно запросы формулируются на каком-либо языке, который может быть как стандартным для разных СУБД, так и зависящим от конкретной СУБД.

    Ссылочная целостность

    Выше мы уже говорили о том, что первичный ключ любой таблицы должен содержать уникальные непустые значения для данной таблицы. Это утверждение является одним из правил ссылочной целостности (referential integrity ). Некоторые (но далеко не все) СУБД могут контролировать уникальность первичных ключей. Если СУБД контролирует уникальность первичных ключей, то при попытке присвоить первичному ключу значение, уже имеющееся в другой записи, СУБД сгенерирует диагностическое сообщение, обычно содержащее словосочетание primary key violation . Это сообщение в дальнейшем может быть передано в приложение, с помощью которого конечный пользователь манипулирует данными.

    Если две таблицы связаны соотношением master-detail , внешний ключ detail- таблицы должен содержать только те значения, которые уже имеются среди значений первичного ключа master- таблицы. Если корректность значений внешних ключей не контролируется СУБД, можно говорить о нарушении ссылочной целостности. В этом случае, если мы удалим из таблицы Customers запись, имеющую хотя бы одну связанную с ней detail- запись в таблице Orders, это приведет к тому, что в таблице Orders окажутся записи о заказах, размещенных неизвестно кем. Если же СУБД контролирует корректность значений внешних ключей, то при попытке присвоить внешнему ключу значение, отсутствующее среди значений первичных ключей master-таблицы, либо при удалении или модификации записей master-таблицы, приводящих к нарушению ссылочной целостности, СУБД сгенерирует диагностическое сообщение, обычно содержащее словосочетание foreign key violation , которое в дальнейшем может быть передано в пользовательское приложение.

    Большинство современных СУБД, например Microsoft Access 97, Microsoft Access 2000 и Microsoft SQL Server 7.0, способны контролировать соблюдение правил ссылочной целостности, если таковые описаны в базе данных. Для этой цели подобные СУБД используют различные объекты баз данных (мы обсудим их чуть позже). В этом случае все попытки нарушить правила ссылочной целостности будут подавляться с одновременной генерацией диагностических сообщений или исключений (database exceptions ).

    Введение в нормализацию данных

    Процесс проектирования данных представляет собой определение метаданных в соответствии с задачами информационной системы, в которой будет использоваться будущая база данных. Подробности о том, как производить анализ предметной области, создавать диаграммы «сущность-связь» (ERD - entity-relationship diagrams ) и модели данных, выходят за рамки данного цикла. Интересующиеся этими вопросами могут обратиться, например, к книге К.Дж.Дейта «Введение в системы баз данных» («Диалектика», Киев, 1998).

    В данной статье мы обсудим лишь один из основных принципов проектирования данных - принцип нормализации .

    Нормализация представляет собой процесс реорганизации данных путем ликвидации повторяющихся групп и иных противоречий в хранении данных с целью приведения таблиц к виду, позволяющему осуществлять непротиворечивое и корректное редактирование данных.

    Теория нормализации основана на концепции нормальных форм. Говорят, что таблица находится в данной нормальной форме, если она удовлетворяет определенному набору требований. Теоретически существует пять нормальных форм, но на практике обычно используются только первые три. Более того, первые две нормальные формы являются по существу промежуточными шагами для приведения базы данных к третьей нормальной форме.

    Первая нормальная форма

    Проиллюстрируем процесс нормализации на примере, использующем данные из базы NorthWind. Предположим, что мы регистрируем все заказанные продукты в следующей таблице . Структура этой таблицы имеет вид (рис. 2).

    Чтобы таблица соответствовала первой нормальной форме, все значения ее полей должны быть атомарными, и

    все записи - уникальными. Поэтому любая реляционная таблица, в том числе и таблица OrderedProducts, по определению, уже находится в первой нормальной форме.

    Тем не менее эта таблица содержит избыточные данные, например, одни и те же сведения о клиенте повторяются в записи о каждом заказанном продукте. Результатом избыточности данных являются аномалии модификации данных- проблемы, возникающие при добавлении, изменении или удалении записей. Например, при редактировании данных в таблице OrderedProducts могут возникнуть следующие проблемы:

    • Адрес конкретного клиента может содержаться в базе данных только тогда, когда клиент заказал хотя бы один продукт.
    • При удалении записи о заказанном продукте одновременно удаляются сведения о самом заказе и о клиенте, его разместившем.
    • Если, не дай бог, заказчик сменил адрес, придется обновить все записи о заказанных им продуктах.

    Некоторые из этих проблем могут быть решены путем приведения базы данных ко второй нормальной форме .

    Вторая нормальная форма

    Говорят, что реляционная таблица находится во второй нормальной форме , если она находится в первой нормальной форме и ее неключевые поля полностью зависят от всего первичного ключа.

    Таблица OrderedProducts находится в первой, но не во второй нормальной форме, так как поля CustomerID, Address и OrderDate зависят только от поля OrderID, являющегося частью составного первичного ключа (OrderID, ProductID).

    Чтобы перейти от первой нормальной формы ко второй, нужно выполнить следующие шаги:

    1. Определить, на какие части можно разбить первичный ключ, так чтобы некоторые из неключевых полей зависели от одной из этих частей (эти части не обязаны состоять из одной колонки! ).
    2. Создать новую таблицу для каждой такой части ключа и группы зависящих от нее полей и переместить их в эту таблицу. Часть бывшего первичного ключа станет при этом первичным ключом новой таблицы.
    3. Удалить из исходной таблицы поля, перемещенные в другие таблицы, кроме тех их них, которые станут внешними ключами.

    Например, для приведения таблицы OrderedProducts ко второй нормальной форме, нужно переместить поля CustomerID, Address и OrderDate в новую таблицу (назовем ее OrdersInfo), при этом поле OrderID станет первичным ключом новой таблицы (рис. 3).

    В результате новые таблицы приобретут такой вид. Однако таблицы, находящиеся во второй, но не в третьей нормальной форме, по-прежнему содержат аномалии модификации данных. Вот каковы они, например, для таблицы OrdersInfo:

    • Адрес конкретного клиента по-прежнему может содержаться в базе данных только тогда, когда клиент заказал хотя бы один продукт.
    • Удаление записи о заказе в таблице OrdersInfo приведет к удалению записи о самом клиенте.
    • Если заказчик сменил адрес, придется обновить несколько записей (хотя, как правило, их меньше, чем в предыдущем случае).

    Устранить эти аномалии можно путем перехода к третьей нормальной форме .

    Третья нормальная форма

    Говорят, что реляционная таблица находится в третьей нормальной форме , если она находится во второй нормальной форме и все ее неключевые поля зависят только от первичного ключа.

    Таблица OrderDetails уже находится в третьей нормальной форме. Неключевое поле Quantity полностью зависит от составного первичного ключа (OrderID, ProductID). Однако таблица OrdersInfo в третьей нормальной форме не находится, так как содержит зависимость между неключевыми полями (она называется транзитивной зависимостью - transitivedependency ) - поле Address зависит от поля CustomerID.

    Чтобы перейти от второй нормальной формы к третьей, нужно выполнить следующие шаги:

    • Определить все поля (или группы полей), от которых зависят другие поля.
    • Создать новую таблицу для каждого такого поля (или группы полей) и группы зависящих от него полей и переместить их в эту таблицу. Поле (или группа полей), от которого зависят все остальные перемещенные поля, станет при этом первичным ключом новой таблицы.
    • Удалить перемещенные поля из исходной таблицы, оставив лишь те из них, которые станут внешними ключами.

    Для приведения таблицы OrdersInfo к третьей нормальной форме создадим новую таблицу Customers и переместим в нее поля CustomerID и Address. Поле Address из исходной таблицы удалим, а поле CustomerID оставим - теперь это внешний ключ (рис. 4).

    Итак, после приведения исходной таблицы к третьей нормальной форме таблиц стало три - Customers, Orders и OrderDetails.

    Преимущества нормализации

    Нормализация устраняет избыточность данных, что позволяет снизить объем хранимых данных и избавиться от описанных выше аномалий их изменения. Например, после приведения рассмотренной выше базы данных к третьей нормальной форме налицо следующие улучшения:

    • Сведения об адресе клиента можно хранить в базе данных, даже если это только потенциальный клиент, еще не разместивший ни одного заказа.
    • Сведения о заказанном продукте можно удалять, не опасаясь удаления данных о клиенте и заказе.

    Изменение адреса клиента или даты регистрации заказа теперь требует изменения только одной записи.

    Как проектируют базы данных

    Обычно современные СУБД содержат средства, позволяющие создавать таблицы и ключи. Существуют и утилиты, поставляемые отдельно от СУБД (и даже обслуживающие несколько различных СУБД одновременно), позволяющие создавать таблицы, ключи и связи.

    Еще один способ создать таблицы, ключи и связи в базе данных - это написание так называемого DDL-сценария (DDL - Data Definition Language; о нем мы поговорим чуть позже).

    Наконец, есть еще один способ, который становится все более и более популярным, - это использование специальных средств, называемых CASE-средствами (CASE означает Computer-Aided System Engineering). Существует несколько типов CASE-средств, но для создания баз данных чаще всего используются инструменты для создания диаграмм «сущность-связь» (entity-relationship diagrams, E/R diagrams). С помощью этих инструментов создается так называемая логическая модель данных, описывающая факты и объекты, подлежащие регистрации в ней (в таких моделях прототипы таблиц называются сущностями (entities), а поля - их атрибутами (attributes). После установления связей между сущностями, определения атрибутов и проведения нормализации, создается так называемая физическая модель данных для конкретной СУБД, в которой определяются все таблицы, поля и другие объекты базы данных. После этого можно сгенерировать либо саму базу данных, либо DDL-сценарий для ее создания.

    Список наиболее популярных в настоящее время CASE-средств .

    Таблицы и поля

    Таблицы поддерживаются всеми реляционными СУБД, и в их полях могут храниться данные разных типов. Наиболее часто встречающиеся типы данных .

    Индексы

    Чуть выше мы говорили о роли первичных и внешних ключей. В большинстве реляционных СУБД ключи реализуются с помощью объектов, называемых индексами, которые можно определить как список номеров записей, указывающий, в каком порядке их предоставлять.

    Мы уже знаем, что записи в реляционных таблицах неупорядочены. Тем не менее любая запись в конкретный момент времени имеет вполне определенное физическое местоположение в файле базы данных, хотя оно и может изменяться в процессе редактирования данных или в результате «внутренней деятельности» самой СУБД.

    Предположим, в какой-то момент времени записи в таблице Customers хранились в таком порядке .

    Допустим, нам нужно получить эти данные упорядоченными по полю CustomerID. Опустив технические детали, мы можем сказать, что индекс по этому полю - это последовательность номеров записей, в соответствии с которой их нужно выводить, то есть:

    1,6,4,2,5,3

    Если же мы хотим упорядочить записи по полю Address, последовательность номеров записей будет другой:

    5,4,1,6,2,3

    Хранение индексов требует существенно меньше места, чем хранение по-разному отсортированных версий самой таблицы.

    Если нам нужно найти данные о клиентах, у которых CustomerID начинается с символов «BO», мы можем найти с помощью индекса местоположение этих записей (в данном случае 2 и 5 (очевидно, что в индексе номера этих записей идут подряд), а затем прочесть именно вторую и пятую записи, вместо того чтобы просматривать всю таблицу. Таким образом, использование индексов снижает время выборки данных.

    Мы уже говорили о том, что физическое местоположение записей может изменяться в процессе редактирования данных пользователями, а также в результате манипуляций с файлами базы данных, проводимых самой СУБД (например, сжатие данных, сборка «мусора» и др.). Если при этом происходят соответствующие изменения и в индексе, он называется поддерживаемым и такие индексы используются в большинстве современных СУБД. Реализация таких индексов приводит к тому, что любое изменение данных в таблице влечет за собой изменение связанных с ней индексов, а это увеличивает время, требующееся СУБД для проведения таких операций. Поэтому при использовании таких СУБД следует создавать только те индексы, которые реально необходимы, и руководствоваться при этом тем, какие запросы будут встречаться наиболее часто.

    Ограничения и правила

    Большинство современных серверных СУБД содержат специальные объекты, называемые ограничениями (constraints), или правилами (rules). Эти объекты содержат сведения об ограничениях, накладываемых на возможные значения полей. Например, с помощью такого объекта можно установить максимальное или минимальное значение для данного поля, и после этого СУБД не позволит сохранить в базе данных запись, не удовлетворяющую данному условию.

    Помимо ограничений, связанных с установкой диапазона изменения данных, существуют также ссылочные ограничения (referential constraints, например связь master-detail между таблицами Customers и Orders может быть реализована как ограничение, содержащее требование, чтобы значение поля CustomerId (внешний ключ) в таблице Orders было равно одному из уже имеющихся значений поля CustomerId таблицы Customers.

    Отметим, что далеко не все СУБД поддерживают ограничения. В этом случае для реализации аналогичной функциональности правил можно либо использовать другие объекты (например, триггеры), либо хранить эти правила в клиентских приложениях, работающих с этой базой данных.

    Представления

    Практически все реляционные СУБД поддерживают представления (views). Этот объект представляет собой виртуальную таблицу, предоставляющую данные из одной или нескольких реальных таблиц. Реально он не содержит никаких данных, а только описывает их источник.

    Нередко такие объекты создаются для хранения в базах данных сложных запросов. Фактически view - это хранимый запрос.

    Создание представлений в большинстве современных СУБД осуществляется специальными визуальными средствами, позволяющими отображать на экране необходимые таблицы, устанавливать связи между ними, выбирать отображаемые поля, вводит ограничения на записи и др.

    Нередко эти объекты используются для обеспечения безопасности данных, например, путем разрешения просмотра данных с их помощью без предоставления доступа непосредственно к таблицам. Помимо этого некоторые представления объекты могут возвращать разные данные в зависимости, например, от имени пользователя, что позволяет ему получать только интересующие его данные.

    Триггеры и хранимые процедуры

    Триггеры и хранимые процедуры, поддерживаемые в большинстве современных серверных СУБД, используются для хранения исполняемого кода.

    Хранимая процедура - это специальный вид процедуры, который выполняется сервером баз данных. Хранимые процедуры пишутся на процедурном языке, который зависит от конкретной СУБД. Они могут вызывать друг друга, читать и изменять данные в таблицах, и их можно вызвать из клиентского приложения, работающего с базой данных.

    Хранимые процедуры обычно используются при выполнении часто встречающихся задач (например, сведение бухгалтерского баланса). Они могут иметь аргументы, возвращать значения, коды ошибок и иногда наборы строк и колонок (такой набор данных иногда называется термином dataset). Однако последний тип процедур поддерживается не всеми СУБД.

    Триггеры также содержат исполняемый код, но их, в отличие от процедур, нельзя вызвать из клиентского приложения или хранимой процедуры. Триггер всегда связан с конкретной таблицей и выполняется тогда, когда при редактировании этой таблицы наступает событие, с которым он связан (например, вставка, удаление или обновление записи).

    В большинстве СУБД, поддерживающих триггеры, можно определить несколько триггеров, выполняющихся при наступлении одного и того же события, и определить порядок из выполнения.

    Объекты для генерации первичных ключей

    Очень часто первичные ключи генерируются самой СУБД. Это более удобно, чем их генерация в клиентском приложении, так как при многопользовательской работе генерация ключей с помощью СУБД - это единственный способ избежать дублирования ключей и получать их последовательные значения.

    В разных СУБД для генерации ключей используются разные объекты. Некоторые из таких объектов хранят целое число и правила, по которым генерируется следующее за ним значение, -обычно это выполняется с помощью триггеров. Такие объекты поддерживаются, например, в Oracle (в этом случае они называются последовательностями - sequences) и в IB Database (в этом случае они называются генераторами - generators).

    Некоторые СУБД поддерживают специальные типы полей для первичных ключей. При добавлении записей такие поля заполняются автоматически последовательными значениями (обычно целыми). В случае Microsoft Access и Microsoft SQL Server такие поля называются Identity fields, а в случае Corel Paradox - автоинкрементными полями (Autoincrement fields).

    Пользователи и роли

    Предотвращение несанкционированного доступа к данным является серьезной проблемой, которая решается разными способами. Самый простой - это парольная защита либо всей таблицы, либо некоторых ее полей (такой механизм поддерживается, например, в Corel Paradox).

    В настоящее время более популярен другой способ защиты данных - создание списка пользователей (users) с именами (user names) и паролями (passwords). В этом случае любой объект базы данных принадлежит конкретному пользователю, и этот пользователь предоставляет другим пользователям разрешение на чтение или модификацию данных из этого объекта либо на модификацию самого объекта. Этот способ применяется во всех серверных и некоторых настольных СУБД (например, Microsoft Access).

    Некоторые СУБД, в основном серверные, поддерживают не только список пользователей, но и роли (roles). Роль - это набор привилегий. Если конкретный пользователь получает одну или несколько ролей, а вместе с ними - и все привилегии, определенные для данной роли.

    Запросы к базам данных

    Модификация и выбор данных, изменение метаданных и некоторые другие операции осуществляются с помощью запросов (query). Большинство современных СУБД (и некоторые средства разработки приложений) содержат средства для генерации таких запросов.

    Один из способов манипуляции данными называется «queries by example» (QBE) - запрос по образцу. QBE представляет собой средство для визуального связывания таблиц и выбора полей, которые следует отобразить в результате запроса.

    В большинстве СУБД (за исключением некоторых настольных) визуальное построение запроса с помощью QBE приводит к генерации текста запроса с помощью специального языка запросов SQL (Structured Query Language). Можно также написать запрос непосредственно на языке SQL.

    Курсоры

    Нередко результатом запроса является набор из строк и столбцов (dataset). В отличие от реляционной таблицы в таком наборе строки упорядочены, и их порядок определяется исходным запросом (и иногда - наличием индексов). Поэтому мы можем определить текущую строку в таком наборе и указатель на нее, который называется курсором (cursor).

    Большинство современных СУБД поддерживают так называемые двунаправленные курсоры (bi-directional cursors), позволяющие перемещаться по результирующему набору данных как вперед, так и назад. Однако некоторые СУБД поддерживают только однонаправленные курсоры, позволяющие перемещаться по набору данных только вперед.

    Язык SQL

    Structured Query Language (SQL) - это непроцедурный язык, используемый для формулировки запросов к базам данных в большинстве современных СУБД и в настоящий момент являющийся индустриальным стандартом.

    Непроцедурность языка означает, что на нем можно указать, что нужно сделать с базой данных, но нельзя описать алгоритм этого процесса. Все алгоритмы обработки SQL-запросов генерируются самой СУБД и не зависят от пользователя. Язык SQL состоит из набора операторов, которые можно разделить на несколько категорий:

    • Data Definition Language (DDL) - язык определения данных, позволяющий создавать, удалять и изменять объекты в базах данных
    • Data Manipulation Language (DML) - язык управления данными, позволяющий модифицировать, добавлять и удалять данные в имеющихся объектах базы данных
    • Data Control Languages (DCL) - язык, используемый для управления пользовательскими привилегиями
    • Transaction Control Language (TCL) - язык для управления изменениями, сделанными группами операторов
    • Cursor Control Language (CCL) - операторы для определения курсора, подготовки операторов SQL к выполнению и некоторых других операций.

    Более подробно о языке SQL вы расскажем в одной из следующих статей этого цикла.

    Функции, определяемые пользователем

    Некоторые СУБД позволяют использовать функции, определяемые пользователем (UDF-User-Defined Functions). Эти функции, как правило, хранятся во внешних библиотеках и должны быть зарегистрированы в базе данных, после чего их можно использовать в запросах, триггерах и хранимых процедурах.

    Поскольку функции, определяемые пользователем, содержатся в библиотеках, их можно создавать с помощью любого средства разработки, позволяющего создавать библиотеки для платформы, на которой функционирует данная СУБД.

    Транзакции

    Транзакция (Transaction) - это группа операций над данными, которые либо выполняются все вместе, либо все вместе отменяются.

    Завершение (Commit) транзакции означает, что все операции, входящие в состав транзакции, успешно завершены, и результат их работы сохранен в базе данных.

    Откат (Rollback) транзакции означает, что все уже выполненные операции, входящие в состав транзакции, отменяются и все объекты базы данных, затронутые этими операциями, возвращены в исходное состояние. Для реализации возможности отката транзакций многие СУБД поддерживают запись в log-файлы, позволяющие восстановить исходные данные при откате.

    Транзакция может состоять из нескольких вложенных транзакций.

    Некоторые СУБД поддерживают двухфазное завершение транзакций (two-phase commit) - процесс, позволяющий осуществлять транзакции над несколькими базами данных, относящихся к одной и той же СУБД.

    Для поддержки распределенных транзакций (то есть транзакций над базами данных, управляемых разными СУБД), существуют специальные средства, называемые мониторами транзакций (transaction monitors).

    Заключение

    В данной статье мы обсудили основные концепции построения реляционных СУБД, базовые принципы проектирования данных, а также рассказали о том, какие объекты могут быть созданы в базах данных.

    В следующей статье мы познакомим наших читателей с наиболее популярными настольными СУБД: dBase, Paradox, Access, Visual FoxPro, Works и обсудим их основные возможности.

    КомпьютерПресс 3"2000



    Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: