Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GOS / Дисциплины программистского цикла.doc
Скачиваний:
53
Добавлен:
09.05.2015
Размер:
1.51 Mб
Скачать

18. Язык sql. Таблицы. Запросы. Вставка, удаление и обновление.

Structured Query Language.

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

  • SQL2 (SQL-92) принят в 1992 г.;

  • SQL3 (SQL-99);

  • SQL-2003.

Выделяются следующие подъязыки:

  • Data Definition Language (DDL). Определяет структуру базы, задает хранимые объекты и привилегии доступа к ним.

  • Data Manipulation Language (DML). Вставляет, обновляет и удаляет данные и выполняет запросы к ним.

  • Data Control Language (DCL)

О терминологии SQL

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

Базы, схемы, хранимые объекты базы

Хранимые объекты базы, образующие схему базы:

  • Таблицы

  • Представления (view)

  • Индексы (обычно B* и побитовые)

  • Триггеры

  • Последовательности (sequence)

  • Пользователи (user)

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

  • Процедуры (procedure)

  • Функции (function)

19. Реляционная алгебра.

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

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

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

Отношения - это наборы однотипных объектов. Они имеют имя и набор свойств, называемых атрибутами.

Основные свойства отношений (в теории):

  1. Кортежи не упорядочены;

  2. Атрибуты не упорядочены;

  3. Число кортежей в отношении конечно;

  4. Любой атрибут отношения должен содержать данные одного типа;

  5. Все используемые типы данных должны быть простыми;

  6. Отношение не обладает метрическими свойствами, такими как ширина столбцов, число записей и т.д.

Схемы Джекобса

В 1982 г. Б. Джекобс [2] ввел экспликацию понятия “схема”, позволяющую описать уже определенные к тому времени иерархическую, реляционную и сетевую модели баз данных.

На множестве имен M вводится понятие “R-правила”, определенное как выражение вида:

(1) R=(R1, … Rm)

Имя R Î M имеет высший порядок, имена нулевого порядка R1, … Rm Î M и попарно различны, но одно из них может совпадать с R.

Схема базы это конечный набор R-правил, у которых левые части попарно различны:

(2) Sch = {Ri=(Ri1, … Riki)| i=1, …,n}.

Некоторые имена нулевого порядка могут быть именами связей между R-правилами.

Характеристическое свойство реляционной модели

Определение (1): Схема Джекобса будет реляционной, если в правых частях R-правил стоят только имена нулевого порядка.

Установим взаимно однозначное соответствие между R-правилом (1) и предикатом R(R1, … Rm). Тогда определение реляционности схемы можно перефразировать так:

Определение (2): В реляционной модели имена отношений не могут совпадать с именами атрибутов.

Особенности реляционной модели:

  1. Схема базы образуется единственным источником данных – отношениями – и связями между отношениями, имеющими тип “один-к-одному” и “один-ко-многим”;

  1. Отношения строятся только на простых типах данных;

  2. Используется два эквивалентных способа манипулирования реляционными данными – реляционная алгебра и реляционные исчисления.

Реляционная алгебра

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

Отношение r определяется своей схемой R. Набор записей в отношении определяет его состояние. При этом повторяющиеся кортежи отсутствуют.

Операции реляционной алгебры

  • Проекция

  • Естественное соединение

  • J - соединение

  • Декартово произведение

  • Селекция

  • Булевы операции

  • Частное

  • Переименование атрибутов

Проекция

Проекция - это набор унарных операций выбора подмножества столбцов отношений projx(r), где R схема отношения r и x Í R – набор столбцов.

Пример:

Свойство: Если Y Í X Í R, то proj y(proj x (r)) = proj y (r)

Обобщение на несколько отношений.

Естественное соединение

Пусть отношения r1 и r2 имеют схемы R1(A1,...,Ak,B1,...,Bn) и R2(A1,...,Ak,C1,...,Cm). Тогда естественное соединение (join) отношений r1 и r2 есть отношение r3 со схемой R3(A1,...,Ak,B1,...,Bn, C1,...,Cm), в котором каждая запись(экземпляр) получена конкатенацией каждой записи из r1 с теми записями из r2, у которых совпадают значения в общих атрибутах A1,...,Ak.

Обозначения: join(r1,r2) или join =A (r1,r2) или r1 join r2

J - соединение

Определение: Пусть даны отношения r1, r2 со схемами

R1(A1,...,Ak, B1,...,Bl),

R2(C1,...,Cm, D1,...,Dn), соответственно;

J - оператор сравнения на группах атрибутов A и C. Тогда J - соединение отношений r1 и r2 есть отношение r3 со схемой

R3(A 1,...,Ak, B1,...,Bl, C1,...,Cm, D1,...,Dn),

полученной объединением атрибутов схем R1 и R2 без повторения. Записи r3 получаются конкатенацией тех записей из r1 и r2, у которых значения группы столбцов A в r1 и группы столбцов C в r2 находятся в отношении J (удовлетворяют J).

Обозначение: join AJC (r1,r2)

Замечание: Очевидно, если J есть равенство “=” и AºC получим естественное соединение со схемой

R3(A1,...,Ak, B1,...,Bl, D1,...,Dn).

Пример:

Исходные отношения

Условие J = losal £ sal £ hisal

Декартово произведение

Определение: Декартовым произведением отношений r и s арностей kr и ks, с непересекающимися множествами атрибутов, соответственно, R и S,называется отношение t = r ´ s арности kr+ks, состоящее из кортежей, первые kr компонентов которых есть кортежи из r, а последние ks компонентов выбираются из s.

Иначе говоря, кортежи t образованы конкатенацией каждого кортежа из r с каждым кортежем из s. Поэтому, если в текущем состоянии r и s имеют nr и ns кортежей, то в t их nr ´ ns.

Замечание: В одном отношении недопустим повтор имен. Поэтому, в частности не существует декартов квадрат. При соединении отношений с одноименными атрибутами некоторые из них могут быть переименованы.

Селекция (выбор)

Определение: Пусть F – формула, образованная:

  • операндами в виде констант или имен столбцов (номеров столбцов)

  • операторами сравнения <, =, >, £, ³, ¹

  • логическими операторами Ù, Ú, ù

Тогда результат селекции sel F(r) есть множество кортежей t из r, для которых формула F истинна.

Булевы операции

Два отношения r1 и r2 с одной и той же схемой R могут рассматриваться как подмножества множества всех возможных кортежей в схеме R. Поэтому к ним применимы булевы операции Ç, È, -

Дополнение

В определении дополнения возникают трудности. Пусть dom(R) множество всех возможных кортежей над атрибутами схемы R с определенным для каждого атрибута доменом. Если хотя бы один домен бесконечен, то полное отношение r*, включающее все элементы из dom(R), не будет отношением в понимании реляционной алгебры. Не будет отношением и дополнение к конечному отношению r: = r* – r

Частное

Определение: Пусть даны отношение r с арностью kr и схемой R и отношение s с арностью k s < k r и схемой S, причем S Ì R и S ¹ Æ.

Тогда частным называется отношение r ¸ s арности kr – ks, которое:

  • содержит столбцы отношения r отсутствующие в s;

  • часть записи r включается в r ¸ s если в r она сцеплена с каждой записью из s.

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

Пример:

Обозначение: r division s или division(r,s) или r ¸ s

Совместимость отношений и переименование атрибутов

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

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

Операция переименования атрибутов

Пример 1: Необходимо объединить отношения “Employee” и “Работники” для расчета суммарной заработной платы:

Employee(ename, salary)

Работники(ФИО, зарплата)

Переименования: ФИО ® ename, зарплата ® salary

(типы соответствующих атрибутов считаются одинаковыми)

Операция переименования атрибутов:

[нов_имя_отношения] RENAME список_старых_атрибутов AS список_новых_атрибутов

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

Независимые операции реляционной алгебры

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

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

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

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

  • Доказательство независимости объединения и вычитания не приводятся.

Зависимые операции реляционной алгебры

Операции соединения, пересечения и деления можно выразить через другие реляционные операции:

  • Операция соединения определяется через операции декартового произведения и выборки.

join F (r1,r2) = sel F (r1 ´ r2)

  • Операция пересечения выражается через вычитание следующим образом:

r1 Ç r2 = r1 – (r1 – r2)

  • Оператор деления выражается через операторы вычитания, декартового произведения и проекции следующим образом:

r1 ¸ r2 = proj X r1 – proj X ((proj X r1) join r2) – r1)

Реляционная алгебра. Перечень обозначений.

Обозначим:

  • U – множество атрибутов (универсум),

  • D – множество доменов,

  • dom – полная функция dom: U ® D – назначает домен каждому атрибуту,

  • R – множество всех возможных схем отношений на U,

  • r = {r1,...,rp} есть множество отношений ri со схемами Ri, соответственно,

  • q - множество бинарных отношений, определенных на доменах из D содержащее, по крайней мере, отношение равенства и неравенства для каждого домена.

Реляционная алгебра. Определение.

Определение: Реляционной алгеброй над U , D, dom, R, r, q называется семиместный кортеж

B = (U , D, dom, R, r, q, O ),

где O – это множество, содержащее операции селекции, проекции, объединения, пересечения, разности, дополнения, частного, естественного и J - соединения, а также операцию переименования атрибутов из U .

Примеры запросов

Заданы отношения:

emp (empno, ename, job, sal,deptno),

dept (deptno, dname, loc)

Смысл имен с точки зрения предметной области:

emp от employee – работник;

dept от department – отдел;

empno табельный номер;

ename имя работника;

job должность;

sal заработная плата;

deptno номер отдела;

dname название отдела;

loc местонахождение отдела.

  1. Выдать фамилии и должности лиц, получающих зарплату больше 1000:

proj {ename, job} (sel sal>1000 (emp))

  1. Выдать список сотрудников в виде отношения с атрибутами:

empno, ename, job, dname.

Первая неудачная попытка. Запрос с соединением:

proj {empno, ename, job, dname}(join deptno=deptno(emp, dept))

недопустим, так как в условии соединения deptno=deptno непонятно, из каких отношений берутся значения этих атрибутов.

Переименуем их таким образом: deptno из dept обозначим deptno1, а deptno из emp оставим без изменения.

Правильный запрос:

proj {empno, ename, job, dname}(join deptno1=deptno(emp, dept))

Замечание: в реализациях можно использовать уточнение имени атрибута именем отношения. В нашем примере dept.deptno и emp.empno.

Сравнение отношений и их табличных реализаций в БД

Три отличия отношений от таблиц:

  • В отношении нет одинаковых кортежей. Таблицы могут содержать одинаковые строки.

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

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

Заключение

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

  • Выделяются две группы операций:

    • Теоретико-множественные: объединение, пересечение, вычитание, декартово произведение, частное.

    • Реляционные: выборка, проекция, соединение, деление.

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

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

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