Языки субд. Языки описания данных и манипулирования данными

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

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

ЯОД и ЯМД не всегда синтаксически оформляются в виде самостоятельных языков. Они могут быть составными частями единого языка данных, сочетающего возможности определения данных и манипулирования данными. Имеются многочисленные примеры языков СУБД, объединяющих возможности описания данных и манипулирования данными в единых синтаксических рамках. Наиболее распространенным среди языков такого рода является язык SQL.

Язык определения данных (ЯОД).

Создание таблицы

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

Синтаксис команды создания таблицы:

CREATE TABLE имя_таблицы(

поле1 тип1 [ограничения],

[поле2 тип2 [ограничения], …]);

Возможные ограничения в таблицах:

  • * NOT NULL - значение атрибута должно быть определено (опция NOT NULL);
  • * UNIQUE - значения атрибутов являются уникальными (уникальный ключ);
  • * PRIMARY KEY - атрибут является первичным ключом (первичный ключ);
  • * CHECK - определяет условие, которому должны удовлетворять значения атрибута (домен);
  • * DEFAULT - присвоение значений «по умолчанию» для атрибутов.

Например:

CREATE TABLE Dealers1(

Name VARCHAR2(30),

Procent NUMBER(4,2),

Comments VARCHAR2(50) DEFAULT `no comments");

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

Операторы: CREATE, ALTER(cм 14), DROP.

Рис. 1.4. Структура СУБД

Контроллер словаря – обеспечивает доступ к системному каталогу и работу с ним.

Контроллер файлов – манипулирует фалами с данными и отвечает за распределение дискового пространства. Он не управляет физическим вводом/выводом, а передает запросы соответствующим методам доступа ОС.

Контроллер БД – взаимодействует с запущенными пользователями программами и запросами. Он принимает запросы и проверяет внешние и концептуальные схемы для определения тех концептуальных записей, которые необходимы для выполнения запроса к БД. Затем контроллер БД вызывает контроллер файлов для выполнения запроса. В состав контроллера БД входят следующие программные компоненты:

· контроль прав доступа – проверяет наличие у данного пользователя полномочий на выполнения затребованной операции;

· процессор команд – выполняет запрос;

· средства контроля целостности – осуществляют проверку ограничений поддержки целостности при выполнении операций изменения данных;

· оптимизатор запросов – определяет оптимальную стратегию выполнения запроса;

· контроллер транзакций – осуществляет обработку операций, поступающих в процессе транзакции;

· планировщик – отвечает за бесконфликтное выполнение параллельных операций с БД и управляет относительным порядком выполнения операций, определенным в разных транзакциях;

· контроллер восстановления – отвечает за восстановление БД при сбоях до непротиворечивого состояния;

· контроллер буфера – отвечает за перенос данных между ОП и жестким диском.

Многие СУБД поддерживают возможность внедрения собственных операторов в языки высокого уровня (COBOL, Fortran, Pascal, Ada, C). Но в СУБД поддерживается 2 специализированных языка для разработки приложений с БД – ЯОД (DDL – Data Definition Language) и ЯМД (DMD – Data Manipulation Language). ЯОД – описательный язык для определения логической схемы БД. Он состоит из набора операторов, задающих определение схемы БД. Результатом компиляции таких описаний (концептуальной и внешних схем) является набор таблиц, хранимый в специальном системном каталоге БД. (Он хранит метатданные). ЯОД не используется для работы с данными. Для этого используется ЯМД , который содержит набор операторов, выполняющих обработку данных: поиск, добавление, изменение и удаление. Поддержка ЯМД – одна из основных функций СУБД. Различают 2 подхода к реализации ЯМД: процедурный и декларативный.

При использовании процедурного ЯМД пользователь определяет последовательность действий, которые необходимо выполнить, чтобы получить требуемый результат. Этот поход аналогичен тому, как реализованы процедурные языки программирования (Pascal, C и др.). ЯМД в этом случае предоставляет пользователю набор операторов над данными. К этому типу относятся языки, основанные на реляционной алгебре.

Декларативные ЯМД позволяют определить весь требования к результирующим данным с помощью одного оператора. В этом случае нет необходимости знать детали внутренней реализации структур данных и особенности алгоритмов, используемых для их извлечения. К этому типу относятся языки, основанные на реляционном исчислении SQL и QBE. SQL (Structured Query Language) основан на реляционном исчислении и поддерживается всеми реляционными СУБД. Для него определен международный стандарт. QBE (Query By Example) – простой язык с графическим интерфейсом, который позволяет формулировать запрос непрофессиональным пользователям (напр., в СУБД Access).

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

  • экранных форм – для создания шаблонов ввода данных;
  • отчетов;
  • графического представления данных в виде диаграмм;
  • приложений для создания программ обработки данных.

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

Основные функции СУБД:

· управление данными во внешней памяти (на дисках);

· управление данными в оперативной памяти с использованием дискового кэша;

· журнализация изменений, резервное копирование и восстановление базы данных после сбоев;

· поддержка языков БД (язык определения данных, язык манипулирования данными).

Обычно современная СУБД содержит следующие компоненты:

· ядро, которое отвечает за управление данными во внешней и оперативной памяти и журнализацию;

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

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

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

Классификация СУБД.

По модели данных:

· Иерархические;

· Сетевые;

· Реляционные;

· Объектно-реляционные;

· Объектно-ориентированные.

По архитектуре организации хранения данных:

· локальные СУБД (все части локальной СУБД размещаются на одном компьютере);

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

По способу доступа к БД:

· Файл-серверные.

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

Примеры: Microsoft Access, Borland Paradox.

· Клиент-серверные.

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

Примеры: Firebird, Interbase, MS SQL Server, Sybase, Oracle, PostgreSQL, MySQL, ЛИНТЕР.

· Встраиваемые.

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

Примеры: OpenEdge, SQLite, BerkeleyDB, один из вариантов Firebird, один из вариантов MySQL, Sav Zigzag, Microsoft SQL Server Compact, ЛИНТЕР.

Поддержка языков БД

Для работы с базами данных используются специальные языки, в целом называемые языками баз данных. В ранних СУБД поддерживалось несколько специализированных по своим функциям языков. Чаще всего выделялись два языка - язык определения схемы БД (SDL - Schema Definition Language) и язык манипулирования данными (DML - Data Manipulation Language). SDL служил главным образом для определения логической структуры БД, т.е. той структуры БД, какой она представляется пользователям. DML содержал набор операторов манипулирования данными, т.е. операторов, позволяющих заносить данные в БД, удалять, модифицировать или выбирать существующие данные.

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

Основные функции реляционной СУБД, поддерживаемые при реализации интерфейса SQL):

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

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

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

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

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

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

Язык манипулирования данными (ЯМД) позволяет запрашивать предусмотренные в системе операции над данными из базы данных. После выполнения оператора, записанного на ЯМД, информационное заполнение базы данных изменяется

Язык запросов (ЯЗ) позволяет выбирать данные из БД, агрегировать и подвергать всевозможной аналитической обработке.

Аналогично языку определения данных ЯМД не обязательно выступает в форме синтаксически самостоятельного языка СУБД. На практике разделение ЯОД и ЯМД играет скорее методическую роль или используется в технологических целях.

ЯОД, ЯМД и ЯЗ не всегда синтаксически оформляется в виде самостоятельных языков. Наоборот, в настоящее время все они вошли в состав единого реляционного язык SQL. С 1986 г. был принят ряд версий международного стандарта SQL. Он используется в большинстве коммерческих реляционных СУБД, в том числе и на персональных компьютерах.

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

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



Контрольные вопросы по теме.

1.В каких формах могут быть реализованы языковые средства модели данных в СУБД?

2.Какие две основные функции выполняют языковые средства моделей данных?

3.Для каких целей служат языки определения данных в СУБД?

4.Что такое схема базы данных, какая связь существует между схемой и языком определения данных?

5.Средствами каких языков определяются в СУБД междууровневые отображения данных?

6.Какие функции выполняют языки манипулирования данными?

7.Приведите пример языка, который выполняет функции как определения данных, так и манипулирования данными.

8.Каково назначение языков запросов СУБД?

9.Для каких целей разрабатывались языки программирования баз данных?

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

Функции СУБД

  • 1. Управление данными во внешней памяти;
  • 2. управление буферами во внешней памяти:

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

При работе с БД СУБД может установить большую или меньшую актуальность каких-то данных. Наиболее актуальные данные могут всё время храниться в буфере. Эта функция повышает эффективность обработки данных.

3 . управление транзакциями(transactions):

транзакция - последовательность операций над данными из БД, которая рассматривается СУБД как логическое единое целое. Под логическим единым целым понимается то, что СУБД фиксирует начало набора операций и его конец. Эта функция необходима, чтобы поддерживать целостность и логическую непротиворечивость данных, а также безопасное управление данными. Транзакция должна закончиться либо фиксацией нового состояния(commit), либо восстановлением предыдущего состояния(rollback). Существует возможность параллельного выполнения нескольких транзакций (но иногда это невозможно). Сериальное выполнение транзакций - выполнение в соответствии с так называемым сериальным планом. Сериальный план - план выполнения транзакций, при котором эффект смеси транзакций эквивалентен их последовательному выполнению. Алгоритмы сериализации основаны на сериальных (синхронизационных) захватах. Цель таких захватов: построение сериального плана.

4. журнализация - ведение каких-то журналов:

существует два вида сбоев:

  • - мягкий, связанный с пропаданием питания, аварийной остановкой работы машины, сбоем ОС;
  • - жёсткий - характеризуется потерей информации на внешних носителях (авария HD).

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

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

При пользовании журналом используется стратегия упреждающей записи WAL(Write Ahead Log). Смысл этой стратегии состоит в том, чтобы сделать запись об изменениях прежде самих изменений.

При жёстком сбое нужна копия журнала и архивная копия БД, при этом архивная копия и журнал должны быть согласованы - это важная задача БД.

5. поддержка языков данных(Data Language)

существует две задачи информационных систем:

  • - описание структуры данных;
  • - манипулирование этими данными.

Раньше эти задачи решались с помощью языковых средств. Т.е. поддерживался язык описания данных SDL(Schema Definition Language) и язык манипулирования данными DML(Data Manipulation Language). В задачу SDL входило предоставление средств для именования объектов БД, типизации отдельных элементов и описания связей между элементами данных. DML поддерживает описание действий по изменению тех объектов, которые описаны на SDL.

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

SQL содержит:

  • - средства для описания ограничений целостности;
  • - средства для авторизации доступа к разным объектам:

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

По функциональным возможностям выделяют следующие категории языков:

  • 1. Языки, имеющие только возможности запросов. Они обеспечивают вывод требуемых данных на экран или печать в нужном формате. В настоящее время используются редко.
  • 2. Комплексные языки запросов/обновлений. Это более развитые языки; они позволяют формулировать сложные запросы, относящиеся к нескольким взаимосвязанным записям, и обновлять данные так же легко, как и формулировать запросы. Используя их, пользователи могут создавать свои собственные файлы.
  • 3. Генераторы отчетов. Они дают возможность выбирать нужные данные из файлов или баз данных и форматировать их в виде требуемых форм документов.
  • 4. Графические языки. Использование графических средств в настоящее время постоянно расширяется. С их помощью можно выводить данные в виде различных графиков и диаграмм, а также использовать другие изобразительные возможности. Как и генераторы отчетов, графические языки позволяют осуществлять отбор информации из файлов или баз данных по различным критериям, а также выполнять арифметические и логические манипуляции с данными.
  • 5. Инструментальные средства поддержки решений. Языки этого типа предназначены для создания систем принятия решений. Это могут быть системы типа «что-если», системы, выполняющие временной или трендовый анализ, и др. Возможно использование как универсальных, так и проблемно-ориентированных средств.
  • 6. Генераторы приложений. Обеспечивают возможность описания непроцедурным путем требуемой обработки информации и дальнейшей автоматической генерации программ.
  • 7. Машинно-ориентированные языки спецификаций. Фактически являются генераторами приложений, дальнейшим их развитием. В отличие от генераторов приложений языки спецификаций более универсальны и позволяют специфицировать приложения разных типов.
  • 8. Языки очень высокого уровня. В большинстве случаев приложения строятся с помощью непроцедурных языков. Однако некоторые языки являются процедурными (например, NOMAD), но программирование на них значительно короче, чем, например, на Cobol.
  • 9. Параметризированные пакеты прикладных программ (ППП). Эта категория программных средств известна давно, и «4-е поколение» относится к таким ППП, которые допускают легкую модификацию самого пакета, позволяют пользователям генерировать собственные отчеты, запросы к базе данных и т.д.
  • 10. Языки приложений. Многие языки 4-го поколения являются универсальными, другие - спроектированы для специфических приложений. Примерами таких языков являются языки для управления финансами, управления работой станков с программным управлением и т.д.