Базы данных
Вид материала | Документы |
- 1 научиться создавать таблицу базы данных в режиме таблицы, 54.71kb.
- Ms access Создание базы данных, 34.31kb.
- Лекция 2 10. Полнотекстовые базы данных, 133.46kb.
- Практическая работа № «Создание базы данных», 21.96kb.
- Информационные системы, использующие базы данных: оборудование, программное обеспечение,, 102.98kb.
- Конспект лекций по курсу "базы данных" (Ч., 861.92kb.
- Реферат на тему: Access. Базы данных, 274.77kb.
- Лекция №3 нормализация данных, 107.45kb.
- Курсовая работа по дисциплине «Базы данных» на тему: «Разработка базы данных для учета, 154.05kb.
- Создание базы данных “Классный, 73.09kb.
Вопрос №5. Связь SQL с реляционной алгеброй
Реляционная алгебра – это формальный язык запросов, связанный с реляционной моделью. Алгеброй называется математическая структура, состоящая из двух различных множеств (Ωa, Ωo). Ωa – множество операндов, Ωo – множество операций. Алгебра должна удовлетворять большому количеству аксиом, однако решающее значение имеет то, что результат операции над операндом должен входить во множество Ωa. Простым примером алгебры является множество целых чисел. Операндами являются целые числа, операциями – сложение и умножение.
Реляционная алгебра представляет собой набор операторов, использующих отношения в качестве аргументов, и возвращающие отношения в качестве результата. Таким образом, реляционный оператор выглядит как функция с отношениями в качестве аргументов: R = f(R1, R2, R3, …) Реляционная алгебра является замкнутой, т.к. в качестве аргументов в реляционные операторы можно подставлять другие реляционные операторы, подходящие по типу: R = f(f1(f11,f12,f13), f2(f21,f22.f23), …) Таким образом, в реляционных выражениях можно использовать вложенные выражения сколь угодно сложной структуры. Каждое отношение обязано иметь уникальное имя в пределах базы данных. Имя отношения, полученного в результате выполнения реляционной операции, определяется в левой части равенства.
Однако можно не требовать наличия имен от отношений, полученных в результате реляционных выражений, если эти отношения подставляются в качестве аргументов в другие реляционные выражения. Такие отношения будем называть неименованными отношениями. Неименованные отношения реально не существуют в базе данных, а только вычисляются в момент вычисления значения реляционного оператора. Традиционно определяют восемь реляционных операторов объединенных в две группы:
- Объединение, Пересечение, Вычитание, Декартово произведение;
- Выборка, Проекция, Соединение, Деление.
Все они являются независимыми, т.е. некоторые из этих операторов могут быть выражены через другие операторы.
В реализациях конкретных реляционных СУБД сейчас не используется в чистом виде ни реляционная алгебра, ни реляционное исчисление. Фактическим стандартом доступа к реляционным данным стал язык SQL (Structured Query Language).
Язык SQL представляет собой смесь операторов реляционной алгебры и выражений реляционного исчисления, использующий синтаксис, близкий к фразам английского языка и расширенный дополнительными возможностями, отсутствующими в реляционной алгебре и реляционном исчислении. Вообще, язык доступа к данным называется реляционно полным, если он по выразительной силе не уступает реляционной алгебре (или, что то же самое, реляционному исчислению), т.е. любой оператор реляционной алгебры может быть выражен средствами этого языка. Именно таким и является язык SQL.
Один из самых мощных и наиболее часто используемый оператор SELECT реализует все операции реляционной алгебры.
Например, если в операторе SELECT указано более одного имени таблицы, неявно подразумевается, что над перечисленными таблицами осуществляется операция декартова произведения:
SELECT *
FROM R1, R2;
что соответствует декартову произведению таблиц R1 и R2.
На таблицы, участвующие в таких множественных операциях, как объединение (union), пересечение (intersect) разность (except) накладываются определенные ограничения, обеспечивающие их совместимость по соединению:
- таблицы должны иметь одинаковые схемы;
- значения в соответствующих столбцах таблиц должны принадлежать одному и тому же домену.
Первое ограничение является обязательным, и его контроль обеспечивается средствами языка. Следить за тем, чтобы исходные таблицы удовлетворяли второму ограничению, и чтобы не происходило соединение "книг" и "ботинок", должен сам пользователь.
Запрос на объединение может объединять любое число исходных запросов. Все запросы, участвующие в указанных операциях, не должны содержать выражений, то есть вычисляемых полей.
Ни один из исходных запросов в операции UNION не должен содержать предложения упорядочения результата ORDER BY, однако результат объединения может быть упорядочен, для этого предложение ORDER BY с указанием списка столбцов упорядочения записывается после текста последнего исходного SELECT-запроса.
Приведем простой пример с двумя исходными отношениями, представляющими состав изделий:
Какие типы деталей необходимы для производства обоих изделий?
Для достижения этой цели необходимо выполнить операцию объединения где запрос будет выглядеть следующим образом:
(SELECT *
FROM r)
UNION CORRESPONDING
(SELECT *
FROM s)
Поскольку обе таблицы имеют все общие столбцы, то результирующее отношение, которое содержит все детали, входящие в состав обоих изделий, будет выглядеть так:
По умолчанию при выполнении запроса на объединение дубликаты кортежей всегда исключаются. Поэтому, если найдутся детали, которые входят, в состав обоих изделий, то они все равно в результирующий список попадут только один раз.