Какие языки в настоящее время поддерживает субд. Языковые средства субд. Список использованной литературы

Какие языки в настоящее время поддерживает субд. Языковые средства субд. Список использованной литературы

Рекурсия достаточно распространённое явление, которое встречается не только в областях науки, но и в повседневной жизни. Например, эффект Дросте, треугольник Серпинского и т. д. Самый простой вариант увидеть рекурсию – это навести Web-камеру на экран монитора компьютера, естественно, предварительно её включив. Таким образом, камера будет записывать изображение экрана компьютера, и выводить его же на этот экран, получится что-то вроде замкнутого цикла. В итоге мы будем наблюдать нечто похожее на тоннель.

В программировании рекурсия тесно связана с функциями, точнее именно благодаря функциям в программировании существует такое понятие как рекурсия или рекурсивная функция. Простыми словами, рекурсия – определение части функции (метода) через саму себя, то есть это функция, которая вызывает саму себя, непосредственно (в своём теле) или косвенно (через другую функцию). Типичными рекурсивными задачами являются задачи: нахождения n!, числа Фибоначчи. Такие задачи мы уже решали, но с использованием циклов, то есть итеративно. Вообще говоря, всё то, что решается итеративно можно решить рекурсивно, то есть с использованием рекурсивной функции. Всё решение сводится к решению основного или, как ещё его называют, базового случая. Существует такое понятие как шаг рекурсии или рекурсивный вызов. В случае, когда рекурсивная функция вызывается для решения сложной задачи (не базового случая) выполняется некоторое количество рекурсивных вызовов или шагов, с целью сведения задачи к более простой. И так до тех пор пока не получим базовое решение. Разработаем программу, в которой объявлена рекурсивная функция, вычисляющая n!

"stdafx.h" #include << "Enter n!: "; cin >> n; cout << n << "!" << "=" << factorial(n) << endl; // вызов рекурсивной функции system("pause"); return 0; } unsigned long int factorial(unsigned long int f) // рекурсивная функция для нахождения n! { if (f == 1 || f == 0) // базовое или частное решение return 1; // все мы знаем, что 1!=1 и 0!=1 cout << "Step\t" << i << endl; i++; // операция инкремента шага рекурсивных вызовов cout << "Result= " << result << endl; result = f * factorial(f - 1); // функция вызывает саму себя, причём её аргумент уже на 1 меньше return result; }

// код Code::Blocks

// код Dev-C++

// factorial.cpp: определяет точку входа для консольного приложения. #include using namespace std; unsigned long int factorial(unsigned long int);// прототип рекурсивной функции int i = 1; // инициализация глобальной переменной для подсчёта кол-ва рекурсивных вызовов unsigned long int result; // глобальная переменная для хранения возвращаемого результата рекурсивной функцией int main(int argc, char* argv) { int n; // локальная переменная для передачи введенного числа с клавиатуры cout << "Enter n!: "; cin >> n; cout << n << "!" << "=" << factorial(n) << endl; // вызов рекурсивной функции return 0; } unsigned long int factorial(unsigned long int f) // рекурсивная функция для нахождения n! { if (f == 1 || f == 0) // базовое или частное решение return 1; // все мы знаем, что 1!=1 и 0!=1 cout << "Step\t" << i << endl; i++; // операция инкремента шага рекурсивных вызовов cout << "Result= " << result << endl; result = f * factorial(f - 1); // функция вызывает саму себя, причём её аргумент уже на 1 меньше return result; }

В строках 7, 9, 21 объявлен тип данных unsigned long int , так как значение факториала возрастает очень быстро, например уже 10! = 3 628 800. Если не хватит размера типа данных, то в результате мы получим совсем не правильное значение. В коде объявлено больше операторов, чем нужно, для нахождения n!. Это сделано для того, чтобы, отработав, программа показала, что происходит на каждом шаге рекурсивных вызовов. Обратите внимание на выделенные строки кода, строки 23, 24, 28 — это рекурсивное решение n!. Строки 23, 24 являются базовым решением рекурсивной функции, то есть, как только значение в переменной f будет равно 1 или 0 (так как мы знаем, что 1! = 1 и 0! = 1), прекратятся рекурсивные вызовы, и начнут возвращаться значения, для каждого рекурсивного вызова. Когда вернётся значение для первого рекурсивного вызова, программа вернёт значение вычисляемого факториала. В строке 28 функция factorial() вызывает саму себя, но уже её аргумент на единицу меньше. Аргумент каждый раз уменьшается, чтобы достичь частного решения. Результат работы программы (см. Рисунок 1).

Enter n!: 5 Step 1 Result= 0 Step 2 Result= 0 Step 3 Result= 0 Step 4 Result= 0 5!=120

Рисунок 1 — Рекурсия в С++

По результату работы программы хорошо виден каждый шаг и результат на каждом шаге равен нулю, кроме последнего рекурсивного обращения. Необходимо было вычислить пять факториал. Программа сделала четыре рекурсивных обращения, на пятом обращении был найден базовый случай. И как только программа получила решение базового случая, она порешала предыдущие шаги и вывела общий результат. На рисунке 1 видно всего четыре шага потому, что на пятом шаге было найдено частное решение, что в итоге вернуло конечное решение, т. е. 120. На рисунке 2 показана схема рекурсивного вычисления 5!. В схеме хорошо видно, что первый результат возвращается, когда достигнуто частное решение, но никак не сразу, после каждого рекурсивного вызова.

Рисунок 2 — Рекурсия в С++

Итак, чтобы найти 5! нужно знать 4! и умножить его на 5; 4! = 4 * 3! и так далее. Согласно схеме, изображённой на рисунке 2, вычисление сведётся к нахождению частного случая, то есть 1!, после чего по очереди будут возвращаться значения каждому рекурсивному вызову. Последний рекурсивный вызов вернёт значение 5!.

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

using namespace std; unsigned long int factorial(unsigned long int);// прототип рекурсивной функции int i = 1; // инициализация глобальной переменной для подсчёта кол-ва рекурсивных вызовов unsigned long int result; // глобальная переменная для хранения возвращаемого результата рекурсивной функцией int main(int argc, char* argv) { int n; // локальная переменная для передачи введенного числа с клавиатуры cout << "Enter n!: "; cin >> n; for (int k = 1; k <= n; k++) { cout << k << "!" << "=" << factorial(k) << endl; // вызов рекурсивной функции } system("pause"); return 0; } unsigned long int factorial(unsigned long int f) // рекурсивная функция для нахождения n! { if (f == 1 || f == 0) // базовое или частное решение return 1; // все мы знаем, что 1!=1 и 0!=1 //cout << "Step\t"<< i <> n; for (int k = 1; k <= n; k++) { cout << k << "!" << "=" << factorial(k) << endl; // вызов рекурсивной функции } return 0; } unsigned long int factorial(unsigned long int f) // рекурсивная функция для нахождения n! { if (f == 1 || f == 0) // базовое или частное решение return 1; // все мы знаем, что 1!=1 и 0!=1 //cout << "Step\t"<< i < << "Enter number from the Fibonacci series: "; cin >> <= entered_number; counter++) cout << setw(2) <

// код Code::Blocks

// код Dev-C++

// fibonacci.cpp: определяет точку входа для консольного приложения. #include // библиотека для форматирования выводимой информации на экран #include using namespace std; unsigned long fibonacci(unsigned long);// прототип рекурсивной функции поиска чисел из ряда Фибоначчи int main(int argc, char* argv) { unsigned long entered_number; cout << "Enter number from the Fibonacci series: "; cin >> entered_number; for (int counter = 1; counter <= entered_number; counter++) cout << setw(2) < #include using namespace std; void tower(int, int, int, int); // объявление прототипа рекурсивной функции int count = 1; // глобальная переменная для подсчёта количества шагов int _tmain(int argc, _TCHAR* argv) { cout << "Enter of numbers of disks: ";// введите количество дисков, которые надо переместить int number; cin >> number; cout << "Enter the number of basic rod: "; // введите номер стержня, на котором диски будут находится изначально int basic_rod; cin >> basic_rod; cout << "Enter the number of final rod: "; // введите номер стержня, на который необходимо переместить диски int final_rod; cin >> final_rod; int help_rod; // блок определения номера вспомогательного стержня, анализируя номера начального и финального стержня if (basic_rod != 2 && final_rod != 2) help_rod = 2; else if (basic_rod != 1 && final_rod != 1) help_rod = 1; else if (basic_rod != 3 && final_rod != 3) help_rod = 3; tower(// запуск рекурсивной функции решения задачи Ханойских башен number, // переменная, хранящая количество дисков, которые надо переместить basic_rod, // переменная, хранящая номер стержня, на котором диски будут находится изначально help_rod , // переменная, хранящая номер стержня, который используется, как вспомогательный final_rod); // переменная, хранящая номер стержня, на который необходимо переместить диски system("pause"); return 0; } void tower(int count_disk, int baza, int help_baza, int new_baza) { if (count_disk == 1) // условие завершения рекурсивных вызовов { cout << setw(2) << count << ") "<< baza << " " << "->" << " " << new_baza << endl; count++; } else { tower(count_disk -1, baza, new_baza, help_baza); // перемещаем все диски кроме самого последнего на вспомогательный стержень tower(1, baza, help_baza, new_baza); // перемещаем последний диск с начального стержня на финальный стержень tower(count_disk -1, help_baza, baza, new_baza); // перемещаем все диски со вспомогательного стержня на финальный } }

// код Code::Blocks

// код Dev-C++

// hanoi_tower.cpp: определяет точку входа для консольного приложения. // Программа, рекурсивно решающая задачу "Ханойская башня" #include #include using namespace std; void tower(int, int, int, int); // объявление прототипа рекурсивной функции int count = 1; // глобальная переменная для подсчёта количества шагов int main() { cout << "Enter of numbers of disks: ";// введите количество дисков, которые надо переместить int number; cin >> number; cout << "Enter the number of basic rod: "; // введите номер стержня, на котором диски будут находится изначально int basic_rod; cin >> basic_rod; cout << "Enter the number of final rod: "; // введите номер стержня, на который необходимо переместить диски int final_rod; cin >> final_rod; int help_rod; // блок определения номера вспомогательного стержня, анализируя номера начального и финального стержня if (basic_rod != 2 && final_rod != 2) help_rod = 2; else if (basic_rod != 1 && final_rod != 1) help_rod = 1; else if (basic_rod != 3 && final_rod != 3) help_rod = 3; tower(// запуск рекурсивной функции решения задачи Ханойских башен number, // переменная, хранящая количество дисков, которые надо переместить basic_rod, // переменная, хранящая номер стержня, на котором диски будут находится изначально help_rod , // переменная, хранящая номер стержня, который используется, как вспомогательный final_rod); // переменная, хранящая номер стержня, на который необходимо переместить диски return 0; } void tower(int count_disk, int baza, int help_baza, int new_baza) { if (count_disk == 1) // условие завершения рекурсивных вызовов { cout << setw(2) << count << ") "<< baza << " " << "->" << " " << new_baza << endl; count++; } else { tower(count_disk -1, baza, new_baza, help_baza); // перемещаем все диски кроме самого последнего на вспомогательный стержень tower(1, baza, help_baza, new_baza); // перемещаем последний диск с начального стержня на финальный стержень tower(count_disk -1, help_baza, baza, new_baza); // перемещаем все диски со вспомогательного стержня на финальный } }

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

Enter of numbers of disks: 3 Enter the number of basic rod: 1 Enter the number of final rod: 3 1) 1 -> 3 2) 1 -> 2 3) 3 -> 2 4) 1 -> 3 5) 2 -> 1 6) 2 -> 3 7) 1 -> 3

Рисунок 5 — Рекурсия в С++

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

Все эти задачи можно было решить итеративно. Возникает вопрос: “Как лучше решать, итеративно или рекурсивно?”. Отвечаю: “Недостаток рекурсии в том, что она затрачивает значительно больше компьютерных ресурсов, нежели итерация. Это выражается в большой нагрузке, как на оперативную память, так и на процессор. Если очевидно решение той или иной задачи итеративным способом, то им и надо воспользоваться иначе, использовать рекурсию!” В зависимости от решаемой задачи сложность написания программ изменяется при использовании того или иного метода решения. Но чаще задача, решённая рекурсивным методом с точки зрения читабельности кода, куда понятнее и короче.

Рис. 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).

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

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

19.4. Языковые средства систем управления

базами данных

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

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

для высококвалифицированных пользователей языковые сред-ства представляются в их явной синтаксической форме;

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

Языковые средства используются для выполнения двух основ-ных функций:

для описания представления базы данных на управляемых уров-нях архитектуры системы;

для инициирования выполнения операций манипулирования данными.

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

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

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

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

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

В настоящее время имеются многочисленные примеры языков СУБД, объединяющих возможности описания данных и манипули-рования данными в единых синтаксических рамках. Более того, в современных СУБД обычно поддерживается единый интегрированный язык, содержащий все необходимые средства для работы с ба-зой данных, начиная от"ее создания, и обеспечивающий базовый пользовательский интерфейс с базами данных. Наиболее популяр-ным и стандартным для реляционных СУБД является язык SQL (Structured Query Language), разработанный фирмой IBM и реализо-ванный в реляционной СУБД System R, а впоследствии и в коммер-ческой системе DB2. Другим примером языков этого класса могут служить: язык Quel системы Ingres, созданный Калифорнийским университетом, языковые средства большинства СУБД для персо-нальных ЭВМ, например язык dBase семейства СУБД фирмы Asthon-Tate и многочисленных совместимых с ним систем, язык СУБД: R:Base фирмы Microrim.

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

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

Как уже отмечалось, конечные пользователи информационной системы разделяются на две категории - прямые и косвенные. Те, кто относится к группе прямых пользователей, в отличие от косвен-ных, самостоятельно без посредников общается с ЭВМ. Они способ-ны разрабатывать новые приложения.

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

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

Изучение простейших возможностей языков конечных пользо-вателей не требует больших затрат времени. Такой уровень подготов-ки (обычно 1-3 дня) позволит пользователю разрабатывать неслож-ные приложения.

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

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

Язык QBE

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

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

Важно, что для выполнения действий над базой пользователю достаточно обладать элементарным запасом языковых средств, что-бы понимать и использовать возможности всего языка. Синтаксис языка прост, тем не менее охватывает широкий спектр сложных опе-раций. Это достигается за счет использования одинаковых операций для извлечения, манипулирования, определения и контроля данных. Операции языка «подражают» ручному манипулированию таблица-ми, сохраняя при этом все требования реляционной модели. Форми-рование операций должно следовать процессу рассуждений пользо-вателя, предоставляя тем самым свободу при их построении. Архи-тектура языка QBE направлена на удовлетворение сформулирован-ных требований.

Язык SQL

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

Его появление и развитие как средства описания доступа к БД связано с созданием теории реляционных БД. Прообраз языка воз-ник в 1970 г. в лаборатории Санта-Тереза фирмы IBM в рамках научно-исследовательского проекта System/R. Сегодня - это фактичес-кий стандарт интерфейса с современными СУБД. Популярность его настолько велика, что разработчики нереляционных СУБД (напри-мер, ADABAS), снабжают свои системы SQL-интерфейсом.

Язык SQL имеет официальный стандарт - ANSI/ISO. Большин-ство разработчиков придерживаются этого стандарта, однако часто расширяют его для реализации новых возможностей обработки дан-ных.

SQL не является языком программирования в традиционном представлении. На нем пишутся не программы, а запросы к базе данных. Поэтому это язык декларативный. Это означает, что с его помощью можно сформулировать, что необходимо получить, однако нельзя указать, как это следует сделать. В частности, в отличие от процедурных языков программирования (Си, Паскаль), в языке SQL отсутствуют такие операторы, как if/then/else.

Запрос в языке SQL состоит из одного или нескольких операто-ров, следующих один за другим и разделенных точкой с запятой. Наиболее важные выделены в стандарте ANSI/ISO SQL.

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

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

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

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

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

19.5. Основы информационной безопасности

систем управления базами данных

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

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

В целях защиты информации в базах данных на практике важ-нейшими являются следующие аспекты информационной безопас-ности (Европейские критерии):

доступность (возможность получить некоторую требуемую ин-формационную услугу);

целостность (актуальность и непротиворечивость информации, ее защищенность от разрушения и несанкционированного измене-ния);

конфиденциальность (защита от несанкционированного прочте-ния).

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

Рассмотрим основные программно-технические меры, применение которых позволит решить некоторые из вышеперечисленных проблем:

аутентификация и идентичность;

управление доступом;

поддержка целостности;

протоколирование и аудит;

защита коммуникаций между клиентом и сервером;

отражение угроз, специфичных для СУБД.

Аутентификация и идентичность

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

Управление доступом.

Управление доступом базируется на реализации следующего минимального набора действий:

произвольное управление доступом;

обеспечение безопасности повторного использования объектов;

использование меток безопасности;

принудительное управление доступом.

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

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

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

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

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

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

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

Поддержка целостности

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

Протоколирование и аудит

Такая мера, как протоколирование и аудит, состоит в следую-щем:

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

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

оказание помощи;

организация пассивной защиты информации от нелегальных

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

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

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

Следующий механизм, обеспечивающий высокий уровень отка-зоустойчивости, - технология тиражирования данных. Тиражирова-ние данных - это асинхронный перенос изменений объектов исходной базы данных в базы, принадлежащие различным узлам распре-деленной системы. В конфигурации серверов базы данных выделяют один основной и ряд вторичных. В обычном режиме работы основ-ной сервер выполняет чтение и обновление данных, обеспечивает перенос зафиксированных изменений на вторичные серверы. В слу-чае отказа основного сервера его функции автоматически (вручную) переводятся на вторичный сервер в режим работы «чтение + запись». После восстановления функций основного сервера ему может быть присвоен статус вторичного, а вторичному делегированы все полно-мочия основного (при этом обеспечивается непрерывная доступность данных). Процедура тиражирования осуществляется либо в синхрон-ном, либо в асинхронном режиме. Благодаря первому осуществляет-ся гарантированность полной согласованности данных, т.е. на вто-ричном сервере будут зафиксированы все транзакции, выполненные на основном. Асинхронный режим улучшает рабочие характеристи-ки системы, не всегда обеспечивая полную согласованность (стоит заметить, что далеко не во всех задачах требуется синхронизация фиксации; достаточно поддерживать тождественность данных лишь в критические моменты времени).

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

Защита коммуникаций между клиентом и сервером

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

Отражение угроз, специфичных для СУБД

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

работ Серия «Высшее образование» ...

  • Серия «высшее образование» концепции современного

    Документ

    Лишь благодаря целостности и является следствием организации . 12. Организация и дезорганизация - диалектически связанные... Контрольных работ 458 Основные вопросы по курсу «Концепции современного естествознания» . . 464 Серия «Высшее образование» ...

  • Серия «ВЫСШЕЕ ОБРАЗОВАНИЕ» М А Р К Е Т И Н Г КУРС ЛЕКЦИЙ Москва ИНФРА-М 1999

    Курс лекций

    Серия «ВЫСШЕЕ ОБРАЗОВАНИЕ» Л.Е.БАСОВСКИЙ М А Р К Е Т И Н Г КУРС ЛЕКЦИЙ... им. Выбор торговых посредников и организация работы с ними – сложная задача. ... использовании метода контрактов государственная организация работает с одной или несколькими фирмами...

  • Высшая школа экономики (175)

    Программа

    Средства и финансовые ресурсы предприятия. Организация финансовой работы на предприятии, цели, задачи, основные... -во «Весь мир», 2003. – 720 с. – (Серия «Высшее образование» ). Организация деятельности коммерческого банка. Учебник (под...

  • Список приобретенной литературы за 2009 год 1 ефимова анализ современный инструментарий для принятия экономических решений учебник / -2-е изд стер - м издательство «омега-л» 2010 -350 с ил табл - (высшее образование) 2 веселовский

    Список учебников

    ... Высшее образование ). 81.Бурмистрова Л.М. Финансы организаций (предприятий): Учеб. пособие.- М.: ИНФРА-М, 2009.- 240 с.- (Высшее образование ... - М. : ИНФРА-М, 2009. - 640 с. Серия : (Высшее образование ). 70. Треушников М.К. Гражданский процесс: теория...

  • Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

    Размещено на http://www.allbest.ru/

    1. Теоретическая часть

    1 . 1 Языковые средства СУБД

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

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

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

    Наиболее известными из языков этого типа являются:

    * Smalltalking - малый разговорный;

    * QBE (Query By Example-программирование на примере);

    * Форт, который находит применение при решении сложных задач имитационного моделирования, в системах искусственного интеллекта в графических системах и т.п. Основной особенностью языка Форт является его открытость, которая позволяет на основе имеющихся определений строить новые функции. При этом программист может вводить новые операции, типы данных или определения. Возможность поддержки средствами Форт многозадачного режима работы придают ему свойства операционной системы. Особое место среди языков программирования занимают функциональные языки, в частности Пролог (PROLOG -PROgram-ming in LOGic - логическое программирование), предложенный А.Калмероэ в 1978 г., являющийся языком логического программирования, относящимся к языкам пятого поколения. Главное назначение языка - разработка интеллектуальных программ и систем. Пролог - это язык программирования, созданный специально для работы с базами знаний, основанными на фактах и правилах (одного из элементов систем искусственного интеллекта). В языке реализован механизм возврата для выполнения обратной цепочки рассуждений, при котором предполагается, что некоторые выводы или заключения истинны, а затем эти предположения проверяются в базе знаний, содержащей факты и правила логического вывода. Если предположение не подтверждается, выполняется возврат и выдвигается новое предположение.

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

    Sequel (Structured English QUEry Language) и его усовершенствованный вариант SQL - языки манипулирования данными, основанные на исчислении отношений. Используются в реляционных СУБД в качестве языка запросов к базам данных и языка программирования задач обработки данных.

    1.2 Функци и языковых средств СУБД

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

    Функции СУБД

    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-го поколения являются универсальными, другие - спроектированы для специфических приложений. Примерами таких языков являются языки для управления финансами, управления работой станков с программным управлением и т.д.

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

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

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

    ЯОД и ЯМД не всегда синтаксически оформляются в виде самостоятельных языков. Они могут быть составными частями единого языка данных, сочетающего возможности определения данных и манипулирования данными. Имеются многочисленные примеры языков СУБД, объединяющих возможности описания данных и манипулирования данными в единых синтаксических рамках. Наиболее распространенным среди языков такого рода является язык 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 Классификация БнД

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

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

    Языковые средства большинства современных СУБД относятся к языкам 4-го поколения (к 1-му поколению языков относят машинные языки, ко 2-му - символические языки ассемблера, к 3-му - алгоритмические языки типа PL, Cobol и т.п., которые в 1960-е гг. назывались языками высокого уровня, но уровень, которых гораздо ниже, чем у языков 4-го поколения. Имеются еще и языки 5-го поколения, к которым относят языки систем искусственного интеллекта, например Prolog).

    Рис. 1 Классификация языковых средств БнД

    Языки 4-го поколения создавались по принципу: «люди стоят дороже, чем машины». При их проектировании использовались следующие принципы.

    1. Принцип минимума работы: язык должен обеспечить минимум усилий, чтобы «заставить» машину работать.

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

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

    4. Принцип минимума времени. Язык должен позволять без существенной задержки реализовывать возникающие потребности в доступе к информации и ее обработке.

    5. Принцип минимума ошибок. Технология должна быть спроектирована таким образом, чтобы минимизировать ошибки человека, а уж если они возникли, то, по возможности, «выловить» их автоматически.

    6. Принцип минимума поддержки. Механизм языка должен позволять легко вносить изменения в имеющиеся приложения.

    7. Принцип максимума результата. Язык предоставляет пользователям мощный инструмент для решения разнообразных задач.

    На рис. 1.1 приведены компоненты языка 4-го поколения. Как видим, здесь представлены все основные «генераторы», наличие которых уже стало традиционным для СУБД разных классов.

    Рис. 1.1 Компоненты языка 4-го поколения

    Можно выделить две концепции развития языковых средств: концепцию разделения и концепцию интеграции. При использовании концепции разделения различают языки описания данных (ЯОД) и языки манипулирования данными (ЯМД). Назначение каждого из этих подклассов ясно из их названия.

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

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

    Рис. 1.2. Технические средства БнД

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

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

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

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

    · табличный язык запросов типа QBE;

    · язык SQL - аналитический язык запросов, относящийся к классу языков исчисления кортежей;

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

    Описание данных в этих системах может быть представлено в табличном виде либо, если определение данных выполняется средствами SQL или с использованием операторов языка xBase, в аналитическом виде.

    Кроме упомянутых языковых средств эти системы включают в себя генераторы экранных форм, отчетов и приложений, а также язык разветвленной иерархической системы «меню», позволяющей пользователю выбрать те действия, которые он желает выполнить.

    1.4 Языки запросов

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

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

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

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

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

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

    2 .1 Язык запросов SQL

    Часто СУБД обеспечивают автоматическое преобразование «текстов» с одного языка на другой. Так, например, многие СУБД, такие, как Access, FoxPro и др., используют языки запросов табличного типа не только для непосредственной реализации запросов, но и как средство для более простого описания запроса и последующего автоматического преобразования его на язык SQL.

    Язык SQL-ЛИНТЕР реализует международный стандарт языка SQL - ANSI/ISO SQL-92 . В SQL-ЛИНТЕР пользователь найдет такие мощные языковые средства, как предложение UNION, полный набор операций соединения - JOIN, все описанные в указанном стандарте возможности по реализации ограничений целостности и пр. Для совместимости с некоторыми СУБД других производителей (Oracle, DB2, Informix, Microsoft SQL Server и др.) в язык запросов ЛИНТЕР введены специальные встроенные функции, языковая работа по управлению контролем доступа к информации, иерархические запросы к таблицам, последовательности и т.д. Для удобства пользователей в SQL-ЛИНТЕР включены так же следующие расширения указанного стандарта:

    · Языковая работа с BLOB-столбцами.

    · Языковая работа с событиями в ЛИНТЕР.

    · Разрешено использование нескольких таблиц во FROM в операциях UPDATE и DELETE.

    Например:

    · DELETE FROM таблица JOIN список _ таблиц WHERE ...

    · UPDATE таблица JOIN список _ таблиц WHERE ...

    Разрешена конструкция INTO в SELECT-операторе для совместимости с некоторыми диалектами языка SQL.

    Например: SELECT список_выражений INTO список_параметров FROM ...

    Разрешена конструкция CAST NULL AS тип. Введены следующие предложения для установки режимов работы каналов:

    SET TRANSACTION READ ONLY - перевод канала в режим read-only;

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED - перевод канала в режим грязного чтения.

    Введены предложения для работы с правилами репликации: CREATE REPLICATION RULE правило FOR таблицa TO таблица ON NODE имя_узла USER пользователь PASSWORD "пароль" ;

    ALTER REPLICATION RULE правило [ PASSWORD "пароль"] ;

    DROP REPLICATION RULE правило;

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

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

    Язык хранимых процедур СУБД ЛИНТЕР

    Наличие механизма хранимых процедур в СУБД ЛИНТЕР позволяет существенно расширить возможности языка SQL, организуя процедурную обработку данных на сервере согласно алгоритму пользователя. По функциональной мощности хранимые процедуры ЛИНТЕР в некоторых аспектах даже превышают стандарт ANSI/ISO SQL-92/PSM (Persistent Stored Modules). Есть множество важных моментов, не отраженных в стандарте.

    Например: Использование оттранслированных запросов и запросов с параметрами (динамически изменяемых запросов), управление транзакциями. Хранимые процедуры ЛИНТЕР могут использовать как обычные, так и оттранслированные запросы с параметрами и без параметров, кроме того процедуры имеют возможность возвращать курсор, что очень удобно для программирования. Язык хранимых процедур предоставляет мощный синтаксис выражений включающий все необходимые операции с переменными и значениями каждого типа данных, вызовы разнообразных стандартных функций (таких, как преобразование типов, работа со строчными данными и т.д.) операцию присваивания (тот факт, что присваивание является операцией, а не отдельным оператором, позволяет строить, например, такие конструкции: a:= b:= c:= 0;).

    Язык хранимых процедур позволяет работать со всеми стандартными типами данных ЛИНТЕР (Integer, Smallint, Char, Byte, Numeric, Real, Double, Date), а также дополнительным типом BOOL (логический). Тип CHAR рассматривается как строки с заданной максимальной длиной, и для него определены удобные в использовании строковые константы и операции конкатенации. Все операции со всеми типами данных реализуют трехзначную логику, то есть поддерживается значение NULL для любого типа данных, которое означает состояние « значение не определено».

    Последовательность операторов позволяет закодировать линейный алгоритм. Для организации ветвящихся алгоритмов может использоваться оператор типа IF..ELSEIF...ELSEIF...ELSE..ENDIF, оператор выбора CASE, оператор перехода на метку GOTO. Циклические алгоритмы организуются при помощи оператора цикла WHILE. Для вызова из одной процедуры других используется оператор CALL. Допустимы рекурсивные вызовы процедур. Процедуры могут получать входные параметры и возвращать результат работы через механизм возвращаемого значения (оператор RETURN) и/или выходные параметры. Результатом работы процедуры может являться не только скалярное значение, но и курсор (выборка). Для обработки результатов SELECT-запросов в процедурах используются курсоры (CURSOR), тип которых объявляется в соответствии со структурой ответа. Цикл работы с курсором может включать его открытие оператором OPEN (как результат запроса или выполнения другой процедуры), выборку данных оператором FETCH (в любом направлении) и закрытие (CLOSE) или, если процедура возвращает курсор, возврат (RETURN).

    Процедуры могут работать со столбцами типа BLOB. Для этого используются стандартные функции чтения/записи в BLOB, который ассоциируется с текущей строкой курсора. Понятие «курсор» используется исключительно для выборки данных. Для выполнения любых DML и DDL запросов (запросов отличных от SELECT-запроса) используется оператор EXECUTE.

    Все операции процедур по модификации данных входят в пользовательскую транзакцию. Завершением транзакции управляет пользователь, однако, процедура также может зафиксировать или откатить изменения, сделанные в ее теле (и теле ее дочерних процедур) операторами COMMIT и ROLLBACK.

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

    Для организации работы с хранимыми процедурами и триггерами СУБД ЛИНТЕР содержит транслятор хранимых процедур, преобразовывающий исходный текст процедуры/триггера в оттранслированный код, позволяющий быстро выполнять процедуру в исполняющей подсистеме. Этот код хранится в специальной системной таблице $$$PROC, описания входных/выходных параметров процедур хранятся в таблице параметров $$$PRCD. Обе эти таблицы должны быть созданы перед началом работы с процедурами/триггерами (для триггеров так же необходимо наличие таблицы $$$TRIG).

    В поле типа BLOB таблицы $$$PROC сохраняются оттранслированный код и исходный текст процедуры или триггера (последнее позволяет пользователю получать исходный текст в целях редактирования). Процедуры и триггеры создаются с помощью соответствующих запросов SQL типа CREATE/ALTER PROCEDURE, CREATE TRIGGER. В случае ошибки в тексте процедуры/триггера возвращается специальный код ошибки ЛИНТЕР и интерактивные утилиты выдают подробную расшифровку в какой строке и какая ошибка произошла. В этом случае в таблице $$$PROC создается только одна запись, содержащая исходный текст, что в последствии позволяет пользователю получить его и исправить ошибки. Возможно использование хранимых процедур как функций, расширяющих язык SQL.

    Для запуска процедур используется запрос

    EXECUTE <процедура> (<параметры>)

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

    Триггеры: связь событий и хранимых процедур

    Хранимые процедуры очень удобны, когда пользователь хочет реализовать некоторый достаточно сложный алгоритм обработки данных и запустить его в нужный момент. Однако в приложениях часто требуется выполнить какие-либо действия при условии возникновения определенной ситуации. Триггеры обеспечивают целостность, выполняя комплексную межтабличную проверку допустимости данных вне контекста справочной целостности и ограничений проверки. Наиболее важное назначение триггеров - определение глобального делового правила. Например, триггер может использоваться для обеспечения того, чтобы менеджеру службы продаж посылалось сообщение о недостаточном количестве товара на складе и необходимости пополнения запаса, если общее количество товара на складе стало меньше чем зарезервированное. Другой пример - при добавлении новых строк в одну таблицу в целях обеспечения целостности данных может потребоваться соответствующим образом добавлять или изменять строки других, связанных, таблиц. Итак, триггер - это хранимая процедура, которая автоматически вызывается при выполнении того или иного действия с конкретной таблицей, направленного на изменение данных. Явно триггер вызываться не может. При создании триггера указывается, к какой таблице и к какому действию (UPDATE, INSERT или DELETE) он привязывается. Триггер может вызываться один раз при выполнении всего запроса, либо каждый раз, когда необходимо обновить, удалить или вставить очередную строку в таблице (триггер FOR EACH ROW). Причем можно указать, когда должен вызываться триггер: до операции (триггер BEFORE) или после (триггер AFTER). Основной частью триггера является его тело, которое определяется точно так же, как тело хранимой процедуры и содержит алгоритм реакции триггера на вызвавшее его действие. В теле триггера допустимы любые SQL-запросы, вызовы хранимых процедур и т.д. Для триггеров на каждую строку внутри тела можно использовать значения полей записи, которые были до операции изменения и значения, которые должны быть установлены после операции. Эти значения доступны через поля предопределенных переменных-курсоров OLD и NEW, структура которых соответствует структуре таблицы. В триггере BEFORE можно присвоить полям переменной NEW новые значения, и при выполнении операции INSERT или UPDATE они будут использованы вместо старых. Единственным значением, которое может вернуть триггер, является логическое значение, при чем, если триггер BEFORE возвращает «ложно», соответствующая операция отменяется для данной строки или всего SQL-оператора, в зависимости от вида триггера. Отладка хранимых процедур ЛИНТЕР

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

    Второй вариант предоставляет мощную возможность по отладке процедур и триггеров в рамках их «родной» среды, когда они запущены в штатном порядке. Отладчик позволяет просматривать исходный текст процедуры (триггера), выделяя строку с текущим исполняемым оператором.

    Процесс отладки включает возможность пошагового выполнения процедур (триггеров), установки разнообразных точек останова и выполнения до одной из них, выполнения с заходом внутрь вызываемых дочерних процедур, наблюдения за значениями локальных переменных и конкретных выражений, стеком вызова. Кроме обычных точек останова (останов каждый раз при выполнении конкретного оператора) поддерживаются так же условные точки (останов только в случае выполнения конкретного условия, например, i >10) и точки останова на изменение значений. Отладчик также помогает разобраться в причине возникновения исключений, приостанавливая выполнение процедур и указывая место, где произошло исключение.

    Заключение

    база данных языковый средство

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

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

    Список использованной литературы

    1. Ревунков, Г.И. Базы и банки данных и знаний/ Г.И. Ревунков, Э.Н. Самохвалов, М. Чистов. - М.: Высшая школа, 2005. - 392 с.

    2. Шаймарданов, Р.Б. Моделирование и автоматизация проектирования структур баз данных / Р.Б. Шаймарданов. - М.: Радио и связь, 2004. - 120 с.

    3. Озкархан, Э. Машины баз данных и управление базами данных/ Э. Озкархан. - М.: Мир, 2006. - 695 с

    4. Цехановский, В.В., Яковлев А. Автоматизированные банки данных/ В.В. Цехановский., А. Яковлев. - Л.: ЛЭТИ, 2006. - 63с.

    5. Диго С.М. Проектирование баз данных: Учебник /.М.: Финансы и статистика -1988,-212с.

    Размещено на Allbest.ru

    Подобные документы

      Работа с хранящейся в базах данных информацией. Язык описания данных и язык манипулирования данными. Распространение стандартизованных языков. Структурированный язык запросов SQL. Язык запросов по образцу QBE. Применение основных операторов языка.

      презентация , добавлен 14.10.2013

      Рассмотрение совокупности программ и языковых средств (специальных языков описания и манипулирования данными), предназначенных для создания, ведения и использования баз данных. Определение языков общения. Исследование принципов построения банка данных.

      реферат , добавлен 07.08.2017

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

      лекция , добавлен 19.08.2013

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

      контрольная работа , добавлен 16.11.2010

      Система управления базами данных как составная часть автоматизированного банка данных. Структура и функции системы управления базами данных. Классификация СУБД по способу доступа к базе данных. Язык SQL в системах управления базами данных, СУБД Microsoft.

      реферат , добавлен 01.11.2009

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

      реферат , добавлен 29.11.2010

      Основные понятия базы данных и систем управления базами данных. Типы данных, с которыми работают базы Microsoft Access. Классификация СУБД и их основные характеристики. Постреляционные базы данных. Тенденции в мире современных информационных систем.

      курсовая работа , добавлен 28.01.2014

      Программные продукты компании Microsoft: Access, Visual FoxPro7.0, dBASE. Возможности интеграции, совместной работы и использования данных. Системы управления базами данных (СУБД), их основные функции и компоненты. Работа с данными в режиме таблицы.

      курсовая работа , добавлен 15.12.2010

      Классификация баз данных. Использование пакета прикладных программ. Основные функции всех систем управления базами данных. Настольная система управления базами данных реляционного типа Microsoft Access. Хранение и извлечение электронных данных.

      курсовая работа , добавлен 23.04.2013

      Теоретические сведения и основные понятия баз данных. Системы управления базами данных: состав, структура, безопасность, режимы работы, объекты. Работа с базами данных в OpenOffice.Org BASE: создание таблиц, связей, запросов с помощью мастера запросов.



    © 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows