SQL – стандартный язык реляционных баз данных

Автор работы: Пользователь скрыл имя, 01 Ноября 2011 в 18:09, курсовая работа

Описание

Цель работы – исследование функциональных возможностей систем управления базами данных с помощью языка SQL.

Содержание

ВВЕДЕНИЕ 6

1. РЕЛЯЦИОННЫЕ БАЗЫ ДАННЫХ. 7

1.1. Понятие и назначение БД и СУБД. 7

1.2. Реляционные базы данных. 11

2. ЯЗЫК SQL КАК СТАНДАРТНЫЙ ЯЗЫК РЕЛЯЦИОННЫХ БАЗ ДАННЫХ. 17

2.1 Язык SQL 17

2.2. Типы данных 19

3. ФОРМЫ И СВОЙСТВА ЯЗЫКА SQL. 32

1.1. Формы языка SQL. 32

1.2. Запросы и операторы манипулирования данными 33

1.3. Операторы определения и манипулирования схемой БД 35

1.4. Определения ограничений целостности и триггеров 35

1.5. Представления базы данных 37

1.6. Определение управляющих структур 38

1.7. Авторизация доступа к отношениям и их полям 39

1.8. Точки сохранения и откаты транзакции 40

1.9. Встроенный SQL 40

1.10. Динамический SQL 41

4. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ В ОБЛАСТИ ПРЕДМЕТА ФИНАНСЫ И КРЕДИТ 44

4.1. Составить блок-схему и написать программу на языке Pascal. 44

4.2. Контрольный пример. 44

4.3. Блок-схема алгоритма решения задачи: 45

4.4. Текст программы на языке Pascal. 45

4.5. Результат выполнения программы на контрольном примере. 47

ЗАКЛЮЧЕНИЕ 49

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 51

Работа состоит из  1 файл

СОДЕРЖАНИЕ.docx

— 155.34 Кб (Скачать документ)

     Литералы  типов целых чисел представляются в виде строк символов, изображающих десятичные числа; в начале строки могут  присутствовать символы «+» или  «-» (если символ знака отсутствует, подразумевается «+»). Примеры литералов  типов  INTEGER и SMALLINT: 1826545, 876.

     Точные  типы, допускающие  наличие дробной  части 

  • Тип NUMERIC. Это не просто тип данных, а параметризуемый тип. При определении столбца можно указать спецификацию NUMERIC (p, s), где p и s – литералы  истинно целого типа, и p задает точность значений (число сохраняемых бит), а s – шкалу (число десятичных цифр в дробной части). Задаваемая шкала не должна быть отрицательной и не должна превышать значение точности. При определении столбца можно использовать сокращенные формы спецификации типа – NUMERIC и NUMERIC (p). Первая форма предполагает использование точности, определяемое по умолчанию в реализации, и шкалы, равной нулю, а вторая – использование заданной точности и шкалы, равной нулю. Допустимые диапазоны значений p и s определяются в реализации.
  • Тип DECIMAL. Этот тип аналогичен типу NUMERIC. Отличие состоит в том, что если при определении столбца типа DECIMAL задается точность p, то на самом деле используется точность m, определяемая в реализации, такая, что m > p. Шкала всегда устанавливается такой, как явно или неявно (по умолчанию) задается. При указании типа столбца можно использовать спецификации DECIMAL, DECIMAL (p) и DECIMAL (p, s).

     Литералы  типов точных чисел, допускающих наличие дробной части, представляются в виде строк символов, изображающих десятичные числа, в начале которых могут присутствовать символы «+» или «-», а внутри последовательности цифр может присутствовать символ «.». Примеры литералов типов  NUMERIC и DECIMAL: 125, 26.36.

      1. Приближенные  числовые типы

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

  • Тип REAL. Значения типа соответствуют числам с плавающей точкой одинарной точности. Точность определяется в реализации, но обычно совпадает с точностью одинарной плавающей арифметики, поддерживаемой на аппаратной платформе, которая используется реализацией.
  • Тип DOUBLE PRECISION. Точность значений этого типа определяется в реализации, но она должна быть больше точности типа REAL. Обычно приближенным числам SQL с двойной точностью соответствуют поддерживаемые аппаратурой числа с плавающей точкой двойной точности.
  • Тип FLOAT. Это параметризуемый тип, значение параметра p которого задает необходимую точность значений. Требуется, чтобы реально обеспечиваемая реализацией точность значений была не меньше p. Допустимый диапазон значений параметра p определяется в реализации.
      1. Типы  символьных строк

     В SQL определены три параметризуемых  типа символьных строк:

  • Тип CHARACTER. Значениями типа являются символьные строки. Конкретный набор допустимых символов определяется в реализации, но, как правило, включает набор символов ASCII. При определении столбца допускается использование спецификаций CHARACTER (x) и просто CHARACTER. Последний вариант эквивалентен заданию CHARACTER (1). После определения столбца типа CHARACTER (x) СУБД будет резервировать место для хранения x символов этого столбца во всех строках соответствующей таблицы. Если, например, определен столбец типа CHARACTER (8) и в некоторой строке таблицы в него заносится символьная строка длиной пять символов, то реально будут храниться восемь символов, последние три из которых будут пробелами.
  • Тип CHARACTER VARYING. При определении столбца допускается использование спецификаций CHARACTER VARYING (x) и просто CHARACTER VARYING. Если в некоторой таблице определяется столбец типа CHARACTER VARYING (x), то в каждой строке этой таблицы значения данного столбца будут занимать ровно столько места, сколько требуется для сохранения соответствующей символьной строки (но ни одна такая строка не может состоять более чем из x символов).
  • Тип CHARACTER LARGE OBJECT. Этот тип данных предназначен для определения столбцов, хранящих большие и разные по размеру группы символов. При определении столбца задается спецификация CLOB (z), где z задает максимальный размер соответствующей группы символов. Максимально возможное значение параметра z определяется в реализации, но, очевидно, что оно должно быть существенно больше максимально возможного значения параметра x, присутствующего в типах CHAR и CHAR VARYING.

     Литералы  типов символьных строк представляются в виде последовательностей символов, заключенных в одинарные или двойные кавычки. В первом случае среди набора символов литерала допускается наличие символов двойной кавычки, а во втором – символов одинарной кавычки. Примеры литералов  символьных строк: ’ABCDEF’, ’Ab"Ctd’, "Fbcdef", "ab’cdtF".

      1. Типы битовых строк
     В SQL определены три параметризуемых  типа битовых строк:
  • Тип BIT. Значениями типа являются битовые строки. При определении столбца допускается использование спецификаций BIT (x) и просто BIT. После определения столбца типа BIT (x) СУБД будет резервировать место для хранения x бит этого столбца во всех строках соответствующей таблицы.
  • Тип BIT VARYING. При определении столбца допускается использование только спецификации без умолчания вида BIT VARYING (x), где значение x определяет максимальную длину битовой строки, которую можно хранить в данном столбце.
  • Тип BINARY LARGE OBJECT. Этот тип данных предназначен для определения столбцов, хранящих большие и разные по размеру группы байтов. При определении столбца задается спецификация BLOB (z), где z задает максимальный размер соответствующей группы байтов. С технической точки зрения типы CLOB и BLOB очень похожи. Их разделение требуется для того, чтобы подчеркнуть, что значения типа CLOB состоят из символов (в частности, в них может осмысленно производиться текстовый поиск), а значения типа BLOB состоят из произвольных байтов, не обязательно кодирующих символы.

         Литералы  типов битовых строк представляются как заключенные в одинарные кавычки последовательности символов «0» и «1», предваряемые символом «B»; или предваряемые символом «X» последовательности символов, которые изображают шестнадцатеричные цифры (за цифрой «9» следуют «A», «B», «C», «D», «E» и «F»). Примеры литералов  типов битовых строк: B’0111001111000111111111’, X’78FBCD0012FFFFA’.

      1. Типы даты и времени

     Возможность сохранения в базе данных информации о дате и времени очень важна  с практической точки зрения. Достаточно вспомнить взбудоражившую весь мир  «проблему 2000 года», одним из основных источников которой было некорректное хранение дат в базах данных. В  стандарте SQL поддержке средств работы с датой и временем уделяется  большое внимание. В частности, поддерживаются специальные «темпоральные» типы данных DATE, TIME, TIMESTAMP, TIME WITH TIME ZONE и TIMESTAMP WITH TIME ZONE.

     Тип даты

  • Тип DATE. Значения этого типа состоят из компонентов-значений года, месяца и дня некоторой даты. Значение года состоит из четырех десятичных цифр и соответствует летоисчислению от Рождества Христова до 9999 г. Значение месяца состоит из двух десятичных цифр и варьируется от 01 до 12. Значение номера дня месяца состоит из двух десятичных цифр и варьируется от 01 до 31.

       Литералы  типа DATE представляются в виде строки «’yyyy-mm-dd’», где символы y, m и d должны изображать десятичные числа. Например, литерал  DATE ’1949-04-08’ представляет дату 8 апреля 1949 г.

     Типы  времени 

  • Тип TIME. Значения этого параметризованного типа состоят из компонентов-значений часа, минуты и секунды некоторого времени суток. Значение часа состоит ровно из двух десятичных цифр и варьируется от 00 до 23. Значение минуты состоит из двух десятичных цифр и варьируется от 00 до 59. Основное значение секунды также состоит из двух цифр, но может включать дополнительные цифры, представляющие доли секунды. Так что в целом значение секунды варьируется от 00 до 61.999... В значении времени присутствуют две лишние секунды, поскольку Всемирная служба времени иногда добавляет две секунды к последней минуте года для синхронизации мирового времени с реальным. Решение о поддержке этих «високосных» секунд принимается на уровне реализации. Число цифр в доле секунды также определяется в реализации. В стандарте требуется только то, чтобы это число было не меньше шести. При определении столбца типа TIME может указываться TIME (p) (значение p задает точность долей секунды) или просто TIME (в этом случае доли секунды не учитываются).

        Литералы типа  TIME представляются в виде строки TIME ’hh:mm-ss:f...f’, где символы h, m, s и f должны изображать десятичные числа. Например, литерал  TIME ’16:33-20:333’ представляет время суток 16 часов 33 минуты 20 и 333 тысячных секунды.

     Типы  временной метки 

  • Тип TIMESTAMP. Значения этого параметризованного типа состоят из компонентов — значений года, месяца и дня некоторой даты, а также компонентов — значений часа, минуты и секунды некоторого времени суток (т. е. каждое значение задает некоторую абсолютную временную метку – отсюда название типа TIMESTAMP). Число десятичных цифр в значениях-компонентах и ограничения этих значений такие же, как у значений типов DATE и TIME. При определении столбца типа TIMESTAMP может указываться TIMESTAMP (p) или просто TIMESTAMP. Максимально допустимое значение p определяется в реализации.
  • Литералы типа  TIMESTAMP представляются в виде строки TIMESTAMP ’yyyy-mm-dd hh:mm-ss:f...f’, где символы y, m, d, h, m, s и f должны изображать десятичные числа. Например, литерал  TIMESTAMP ’1949-04-08 16:33-20:333’ представляет временную метку 16 часов 33 минуты 20 и 333 тысячных секунды 8 апреля 1949 г.

     Типы  времени и временной  метки с временной  зоной 

  • Тип TIME WITH TIME ZONE. Этот тип данных похож на тип TIME с тем лишь отличием, что значения типа TIME WITH TIME ZONE включают дополнительный компонент — значение, характеризующее смещение соответствующего времени относительно гринвичского времени (теперь его называют UTC – universal time coordinated).
  • Тип TIMESTAMP WITH TIME ZONE. Этот тип данных отличается от типа TIMESTAMP тем, что значения типа TIMESTAMP WITH TIME ZONE включают дополнительный компонент-значение, характеризующее смещение соответствующего времени относительно гринвичского.
      1. Типы временных интервалов

     Временным интервалом называется разность между двумя значениями даты или времени. В SQL определены две категории типов временных интервалов: «год-месяц» и «день-время суток». Временные интервалы языка SQL не привязываются к начальному и/или конечному значению даты/времени, а описывают только протяженность во времени. В общем случае при определении столбца типа временного интервала указывается INTERVAL start (p) [ TO end (q) ], где в качестве «start» и «end» могут задаваться YEAR, MONTH, DAY, HOUR, MINUTE и SECOND. Параметр p задает требуемую точность лидирующего поля интервала (число десятичных цифр). Параметр q может задаваться только в том случае, когда в качестве end используется SECOND, и указывает точность долей секунды. Возможны следующие вариации типов временных интервалов.

  • Типы категории «год-месяц». Можно определить столбцы следующих типов: INTERVAL YEAR, INTERVAL YEAR (p), INTERVAL MONTH, INTERVAL MONTH (p), INTERVAL YEAR TO MONTH, INTERVAL YEAR (p) TO MONTH. Если значение параметра p не указывается явно, по умолчанию принимается его значение «2».
  • Типы категории «день-время суток». При определении столбца можно использовать следующие комбинации:

   INTERVAL DAY (p), INTERVAL DAY, INTERVAL DAY (p) TO HOUR, INTERVAL DAY TO HOUR, INTERVAL DAY (p) TO MINUTE, INTERVAL DAY TO MINUTE, INTERVAL DAY (p) TO SECOND (q), INTERVAL DAY TO SECOND (q), INTERVAL DAY (p) TO SECOND, INTERVAL DAY TO SECOND, INTERVAL HOUR (p), INTERVAL HOUR, INTERVAL HOUR (p) TO MINUTE, INTERVAL HOUR TO MINUTE, INTERVAL HOUR (p) TO SECOND (q), INTERVAL HOUR TO SECOND (q), INTERVAL HOUR TO SECOND, INTERVAL MINUTE (p), INTERVAL MINUTE, INTERVAL MINUTE (p) TO SECOND (q), INTERVAL MINUTE TO SECOND (q), INTERVAL MINUTE (p) TO SECOND, INTERVAL MINUTE TO SECOND, INTERVAL SECOND (p, q),INTERVAL SECOND (p), INTERVAL SECOND.

     Если  значение параметра p не указывается  явно, по умолчанию также принимается его значение «2». Значением параметра q по умолчанию является «6». Пример литерала одной из разновидностей типа INTERVAL: INTERVAL ’10:20’ MINUTE TO SECOND – временной интервал в 10 минут и 20 секунд.

      1. Булевский тип
     При определении столбца булевского типа указывается просто спецификация BOOLEAN. Булевский тип состоит из трех значений: true, false и unknown (соответствующие  литералы обозначаются TRUE, FALSE и UNKNOWN). Поддерживается возможность построения булевских  выражений, которые вычисляются  в трехзначной логике.
      1. Типы коллекций

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

     Типы  массивов

     Любой возможный тип массива получается путем применения конструктора типов  ARRAY. При определении столбца, значения которого должны принадлежать некоторому типу массива, используется конструкция dt ARRAY [ mc ], где dt специфицирует некоторый допустимый в SQL тип данных, а mc является литералом некоторого точного числового типа с нулевой длиной шкалы и определяет максимальное число элементов в значении типа массива (в терминологии SQL:1999 это значение называется максимальной кардинальностью массива). В стандарте SQL:1999 многомерные массивы и массивы массивов не поддерживались. Однако в стандарте SQL:2003 это ограничение было снято, и теперь типом элементов любого типа коллекций может быть любой допустимый в SQL тип данных, кроме самого конструируемого типа коллекции.

     Элементам каждого значения типа массива соответствуют  их порядковые номера, называемые индексами. Значение индекса всегда должно принадлежать отрезку [1, mc]. Значениями типа массива  dt ARRAY [mc] являются все массивы, состоящие из элементов типа dt, максимальное значение индекса которых cs не превосходит значения mc. При сохранении в базе данных значения типа массива занимает столько памяти, сколько требуется для сохранения cs элементов. Обеспечивается доступ к элементам массива по их индексам.

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

     Типы  мультимножеств

     При определении столбца таблицы  типа мультимножеств используется конструкция dt MULTISET, где dt задает тип данных элементов  конструируемого типа мультимножеств. Значениями типа мультимножеств являются мультимножества, т. е. неупорядоченные  коллекции элементов одного и  того же типа, среди которых допускаются  дубликаты. Например, значениями типа INTEGER MULTISET являются мультимножества, элементами которых — целые числа. Примером такого значения может быть мультимножество {15, 52, 15, -26, 17}.

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

      1. Анонимные строчные типы

     Анонимный строчный тип– это конструктор типов  ROW, позволяющий производить безымянные типы строк (кортежей). Любой возможный строчный тип получается путем использования конструктора  ROW. При определении столбца, значения которого должны принадлежать некоторому строчному типу, используется конструкция ROW (fld1, fld2, ѕ, fldn ), где каждый элемент fldi, определяющий поле строчного типа, задается в виде тройки fldname, fldtype, fldoptions. Подэлемент fldname задает имя соответствующего поля строчного типа. Подэлемент fldtype специфицирует тип данных этого поля. В качестве типа данных поля строчного типа можно использовать любой допустимый в SQL тип данных, включая типы коллекций, определяемые пользователями типы и другие строчные типы. Необязательный подэлемент fldoptions может задаваться для указания применяемого по умолчанию порядка сортировки, если соответствующий подэлемент fldtype указывает на тип символьных строк, а также должен задаваться, если fldtype указывает на ссылочный тип. Степенью строчного типа называется число его полей.

      1. Типы, определяемые пользователем

     Эта категория типов данных связана  с объектными расширениями языка SQL.

     Структурные типы.

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

     Индивидуальные  типы.

     Можно определить долговременно хранимый, именованный тип данных, опираясь на единственный предопределенный тип. Например, можно определить индивидуальный тип данных PRICE, опираясь на тип DECIMAL (5, 2). Тогда значения типа PRICE представляются точно так же, как значения типа DECIMAL (5, 2). Однако в SQL:1999  индивидуальный тип не наследует от своего опорного типа набор операций над значениями. Например, чтобы сложить два значения типа PRICE требуется явно сообщить системе, что с этими значениями нужно обращаться как со значениями типа DECIMAL (5, 2). Другая возможность состоит в явном определении методов, функций и процедур, связанных с данным индивидуальным типом.

      1. Ссылочные типы

     Эта категория типов данных связана  с объектными расширениями языка SQL. Обеспечивается механизм конструирования типов (ссылочных типов), которые могут использоваться в качестве типов столбцов типизированных таблиц. Фактически значениями ссылочного типа являются строки соответствующей типизированной таблицы. То есть каждой строке типизированной таблицы приписывается уникальное значение, которое может использоваться в методах, определенных для табличного типа, для уникальной идентификации строк соответствующей таблицы. Эти уникальные значения называются ссылочными значениями, а их тип – ссылочным типом. [13]

     
 
  1. ФОРМЫ И ОСНОВНЫЕ ВОЗМОЖНОСТИ ЯЗЫКА  SQL.

      1. Формы языка SQL.

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

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

         Вложенный SQL состоит из команд SQL, помещенных внутри программ, которые обычно написаны на некотором другом языке. Это делает эти программы более мощными  и эффективным. Однако, допуская эти  языки, приходится иметь дело с структурой SQL и стилем управления данных который  требует некоторых расширений к  интерактивному SQL. Передача SQL команд во вложенный SQL является выдаваемой ("passed off") для переменных или параметров используемых программой в которую  они были вложены.

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

         DDL (Язык Определения Данных) —Язык Описания Схемы в ANSI, состоит из команд, которые создают объекты (таблицы, индексы, просмотры, и так далее) в базе данных.

         DML (Язык Манипулирования Данными) — это набор команд, которые определяют, какие значения представлены в таблицах в любой момент времени.

         DCD (Язык Управления Данными) состоит из средств, которые определяют, разрешить ли пользователю выполнять определенные действия или нет.

         Они являются составными частями DDL в ANSI. Это  не различные языки, а разделы  команд SQL сгруппированных по их функциям.[4]

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

      1. Запросы и операторы манипулирования  данными

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

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

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

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

         Самый общий вид запроса на языке SQL представляет теоретико-множественное  алгебраическое выражение, составленное из элементарных запросов. В SQL System R допускались  все базовые теретико-множественные  операции (UNION, INTERSECT и MINUS).

         Работа  с неопределенными значениями в SQL System R до конца продумана не была, хотя неявно предполагалось использование  трехзначной логики при вычислении логических выражений.

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

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

      1. Операторы определения и  манипулирования  схемой БД

         В число операторов определения схемы  БД SQL System R входили операторы создания и уничтожения постоянных и временных  хранимых отношений (CREATE TABLE и DROP TABLE) и  создания и уничтожения представляемых отношений (CREATE VIEW и DROP VIEW). В языке  и в реализации System R не запрещалось  использовать операторы определения  схемы в пределах транзакции, содержащей операторы выборки и манипулирования  данными. Допускалось, например, использование  операторов выборки и манипулирования  данными, в которых указываются  отношения, не существующие в БД к  моменту компиляции оператора. Конечно, эта возможность существенно  усложняла реализацию и требовалась  по существу очень редко.

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

      1. Определения ограничений целостности  и триггеров

         Язык SQL System R включал очень мощные средства контроля и поддержания целостности  БД. Средства контроля базировались на аппарате ограничений целостности (ASSERTIONS). Фактически, ограничение целостности - это логическое выражение, вычисляемое над текущим состоянием БД, ложность которого соответствует нецелостному состоянию БД. Логическое выражение ограничения целостности могло содержать любой допустимый в языке предикат.

         Ограничения целостности делились на два класса: проверяемые после выполнения оператора  манипулирования данными и проверяемые  при завершении транзакции или при  выполнении специального оператора INFORCE INTEGRITY. Типы предикатов, которые можно  использовать в операторах определения  ограничений целостности разных классов, различаются. В операторах первого класса проверяется, фактически, текущий кортеж, с которым производится манипулирование. Во втором случае проверяются  указанные в ограничении целостности  отношения, т.е. все их кортежи. Различается  и определяемая в языке реакция  системы на нарушения ограничений  целостности разных классов. В первом случае нарушение ограничения целостности  приводит к откату транзакции в точку, непосредственно предшествующую операции манипулирования данными, выполнение которого вызвало нарушение ограничения  целостности. Во втором случае ограничение  приводит к полному откату транзакции к ее началу.

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

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

      1. Представления базы данных

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

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

      1. Определение управляющих структур

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

         В SQL System R упоминаются два вида таких  структур: индексы и связи (links). Индекс - это инвертированный файл, обеспечивающий доступ к кортежам соответствующего отношения на основе заданных значений одного или нескольких столбцов, составляющих ключ индекса. Операторы языка позволяли  создавать и уничтожать индексы, но никаким образом не давали возможности  явно указать на необходимость использования  существующего индекса при выполнении оператора выборки, решение об этом возлагалось на реализацию.

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

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

      1. Авторизация доступа к отношениям и их полям

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

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

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

      1. Точки сохранения и откаты транзакции

         В SQL System R существовали два специальных  оператора для установки так  называемых точек сохранения транзакции и для отката транзакции к ранее  установленной точке сохранения.

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

      1. Встроенный SQL

         В SQL System R присутствуют специальные операторы, поддерживающие встраивание операторов SQL в традиционные языки программирования (в System R основным таким языком был PL/1).

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

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

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

      1. Динамический SQL

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

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

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

         Для выполнения ранее подготовленного  оператора SQL, не являющегося оператором выборки, служит оператор EXECUTE. Для выполнения динамически подготовленного оператора  выборки используется аппарат курсоров с некоторыми отличиями по части  задания адресов переменных включающей программы, в которые должны быть помещены значения столбцов текущего кортежа результата. [12] 
     
     
     
     
     
     
     
     
     

     

    1. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ В ОБЛАСТИ ПРЕДМЕТА ФИНАНСЫ И КРЕДИТ
      1. Составить блок-схему и написать программу на языке Pascal.

         Расчет  предварительных технико-экономических  показателей на этапе разработки программного обеспечении (ПО):

         Э=ПЭ+СЗ, где Э – суммарный доход  от эксплуатации ПО;

         ПЭ  – предполагаемая эффективность  ПО;

         СЗ  – сумма затрат

         ПЭ=Т*СР, где Т – приблизительный срок использования ПО;

         СР  – средства на разработку

         СЗ=СР+СС, где СС – средства на сопровождение

         СС=1,5*СР

         СР=К*ЗП*ТР+ЗО, где К – количество разработчиков;

         ЗП  – заработная плата; ТР – количество рабочих дней;

         ЗО  – затраты на оборудование.

         Расчет  организовать для N проектов.

      1. Контрольный пример.

      Пусть N=3, тогда:

      К(1)=10, ЗП(1)=20000, ТР(1)=5, ЗО(1)=75000, Т(1)=60;

      К(2)=15, ЗП(2)=25000, ТР(2)=6, ЗО(2)=90000, Т(2)=50;

      К(3)=7, ЗП(1)=20250, ТР(1)=7, ЗО(1)=80000, Т(1)=40.

      1. Блок-схема  алгоритма решения  задачи:

           

     
     

     
     
     
     
     
     
     
     

     

      1. Текст программы на языке  Pascal.

    Program Kursovaja;

    var i, n:  integer;

    K, ZP, TR, ZO, SR, SS, SZ, T, PE, E: Real;

    Begin

    Writeln(‘Введите количество проектов’);

    Readln(n);

    For i:=1to n do

    Begin

    Writeln(‘Введите количество разработчиков для ‘,i,’-го проекта’);

    Readln(K);

    Writeln(‘Введите заработную плату для ‘,i,’-го проекта’);

    Readln(ZP);

    Writeln(‘Введите количество рабочих дней для ‘,i,’-го проекта’);

    Readln(TR);

    Writeln(‘Введите затраты на оборудование для ‘,i,’-го проекта’);

    Readln(ZO);

    Writeln(‘Введите приблизительный срок использования ПО для ‘,i,’-го проекта’);

    Readln(T);

    SR:=K*ZP*TR+ZO;

    SS:=1.5*SR;

    SZ:=SR+SS;

    PE:=T*SR;

    E:=PE+SZ;

    Writeln(‘Для ‘,i,’-го проекта средства на разработку равны  ‘,SR:1:1,’, средства на сопровождение равны‘,SS:1:1,’, сумма затрат равна‘,SZ:1:1,’, предполагаемая эффективность равна‘,PE:1:1,’, суммарный доход равен‘,E:1:1,’’);

    SR:=0; SS:=0; SZ:=0; PE:=0; E:=0;

    End;

    Readln;

    End.

      1. Результат выполнения программы  на контрольном примере.
     

     
     
     

     

            ЗАКЛЮЧЕНИЕ

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

         Следует отметить, что  основным из достоинств языка SQL является наличие международных стандартов.

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

      1. Раскрыли понятие реляционных баз данных, их роль в программировании. В первой главе приведено понятие «реляционные базы данных», а также описаны архитектуры файл-сервер и клиент-сервер. Под реляционной подразумевают такую базу данных, в которой все данные, доступные пользователю, организованны в виде таблиц, а все операции над данными сводятся к операциям над этими таблицами. Именно объединение реляционных баз данных и клиент-серверных технологий позволяет современному бизнесу успешно управлять своими данными, оставаясь конкурентоспособным на рынке товаров и услуг.
      2. Выявили сущность языка SQL и провели анализ его типов данных. В настоящее время управление основными потоками информации осуществляется с помощью СУБД, которые используются с помощью языка SQL. SQLэто универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. В нашем все более и более взаимосвязанном компьютерном мире, пользователь снабженный таким языком, имеет огромное преимущество в использовании и обобщении информации из ряда источников с помощью большого количества способов. В работе также было приведено описание типов данных SQL. Нельзя с уверенностью сказать, что система типов языка SQL настолько полна, что может удовлетворить любые потребности, но можно отметить, что в этой системе типов отсутствует единый логический подход и имеется избыточность.
      3. Рассмотрели форы и свойства языка SQL. Приведены две формы языка SQL: Интерактивная и Вложенная. Интерактивный SQL используется для функционирования непосредственно в базе данных, чтобы производить вывод для использования его заказчиком. Вложенный SQL состоит из команд SQL, помещенных внутри программ, которые обычно написаны на некотором другом языке. Далее представлены основные свойства языка такие, как: запросы и операторы манипулирования данными, операторы определения и манипулирования схемой БД, определения ограничений целостности и триггеров, представления базы данных, определение управляющих структур, авторизация доступа к отношениям и их полям, точки сохранения и откаты транзакции, встроенный SQL, динамический SQL
      4. Составили блок-схему и разработали программу на языке Pascal. В четвертой главе представлена блок-схема алгоритма решения задачи, текст программы на языке Pascal, а также результат выполнения программы на контрольном примере.
     

     

      СПИСОК  ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

    Ссылки  на монографии и учебники:

    1. . Андон Ф., В. Резниченко Язык запросов SQL: Учебный курс. - СПб: Питер, 2006.
    2. Дж. Л. Вейскас. Эффективная работа с Microsoft Access 7.0. - Питер, Санкт-Петербург, 1997
    3. Грофф Д.Р., Вайнберг П. Н. -SQL Полное руководство - Киев, 1998
    4. Грубер М. Понимание SQL., пер. Лебедева В.Н., под ред. Булычева В.Н.–Москва, 1993г.
    5. Дейт К. Введение в системы баз данных . 6-издание. - Киев: Диалектика, 1998.
    6. Клайн К. SQL. Справочник. — М.: Кудиц-Образ, 2006.
    7. Лукин С.Н. Турбо–Паскаль 7.0 самоучитель для школьников, студентов и начинающих.- 1999.
    8. Макарова Н.В. Информатика – М. Финансы и статистика, 2007. – 765с.
    9. Пушников А.Ю. Введение в системы управления базами данных. Изд-е Башкирского ун-та. – Уфа, 1999.
    10. Фаронов В.В. Основы программирования в SQL. - М.: Издатель Молгачева С.В., 2002.

      Ссылки  на Интернет-источники:

    1. Кузнецов С.Д. Введение в стандарты языка баз данных SQL. http://www.citforum.ru.
    2. Лекция 13. Язык SQL. Функции и основные возможности. http://www.citforum.ru.
    1. Общее введение, типы данных и средства определения  доменов.http://www.uchi-it.ru/11/2/1.html.
    1. Язык программирования// Wikipedia. http://www.wikipedia.ru.
    2. SQL// Wikipedia. http://www.wikipedia.ru.

Информация о работе SQL – стандартный язык реляционных баз данных