База данных

Автор работы: Пользователь скрыл имя, 06 Января 2014 в 21:03, лекция

Описание работы

Системы управления базами данных (СУБД) – это специализированные программные продукты, позволяющие:
1) постоянно хранить сколь угодно большие (но не бесконечные) объемы данных;
2) извлекать и изменять эти хранящиеся данные в том или ином аспекте, используя при этом так называемые запросы;

Файлы: 1 файл

1.docx

— 453.70 Кб (Скачать файл)

 

r 2(S 2):

 

И пусть условием соединения отношений r 1(S 1) и r 2(S 2) будет: P = (b1 = b2), как и в предыдущих примерах.

Тогда результатом операции полного внешнего соединения отношений r 1(S 1) и r 2(S 2) по условию P = (b1 = b2) будет следующая таблица:

r 1(S 1) ↔× P r 2(S 2):

 

Итак, мы видим, что операция полного внешнего соединения наглядно оправдала свое определение как  объединения результатов операций левого и правого внешних соединений. Результирующее отношение операции внутреннего соединения дополнено  одновременно несоединимыми кортежами  как левого (первого, r 1(S 1)), так и правого (второго, r 2(S 2)) исходного отношения-операнда.

5. Производные  операции

 

Итак, мы рассмотрели различные  варианты операций соединения, а именно операции внутреннего соединения, левого, правого и полного внешнего соединения, которые являются производными восьми исходных операций реляционной алгебры: унарных операций выборки, проекции, переименования и бинарных операций объединения, пересечения, разности, декартова  произведения и естественного соединения. Но и среди этих исходных операций есть свои примеры производных операций.

1. Например, операция пересечения  двух отношений является производной от операции разности этих же двух отношений. Покажем это.

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

 

r 1(S ) ∩ r 2(S ) = r 1 \ r 1 \ r 2

 

или, что дает тот же результат:

 

r 1(S ) ∩ r 2(S ) = r 2 \ r 2 \ r 1;

 

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

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

Пусть нам даны два отношения r 1(S 1) и r 2(S 2) которые будут выступать в качестве операндов. Они равны:

r 1(S 1):

 

r 2(S 2):

 

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

r 3(S 3) ≔ r 1(S 1) × r 2(S 2):

 

А результатом внутреннего  соединения этих же отношений r 1(S 1) и r 2(S 2) по условию P = (b1 = b2) будет следующая таблица:

r 4(S 4) ≔ r 1(S 1) × P r 2(S 2):

 

Сравним эти два результата, получившиеся новые отношения r 3(S 3) и r 4(S 4).

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

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

 

r 1(S 1) × r 2(S 2) = { ρ  <ϕ 1> r 1 × E ρ < ϕ 2>r 2}[S ∪ S 2],

 

где E –  условие соединимости  кортежей;

 

E = ∀a  ∈S 1 ∩ S 2 [IsNull  (b 1) & IsNull  (2) ∪b 1 = b 2];

 

 

b 1 = ϕ 1 (name (a )), b 2 = ϕ 2 (name (a ));

 

Здесь одна из функций переименования  ϕ 1 является тождественной, а другая функция переименования (а именно – ϕ 2) переименовывает атрибуты, на которых наши схемы пересекаются.

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

6. Выражения  реляционной алгебры

 

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

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

 

Поставщики (Код поставщика , Имя поставщика, Город поставщика);

Инструменты (Код инструмента , Имя инструмента, …);

Поставки (Код поставщика , Код детали );

 

Подчеркнутые имена атрибутов1 являются ключевыми (т. е. идентификационными) атрибутами, причем каждый в своем отношении.

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

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

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

 

Поставщики  × Поставки ≔ r 1 (Код поставщика, Имя поставщика, Город поставщика, Код поставщика, Код инструмента);

 

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

 

Поставщики  × Поставки ≔ r 1 (Код поставщика, Имя поставщика, Город поставщика, Код инструмента);

 

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

 

r 1 × Инструменты [Код инструмента, Имя инструмента] ≔ r 2 (Код поставщика, Имя поставщика, Город поставщика, Код инструмента, Код инструмента, Имя инструмента);

 

Получившийся результат  обозначим r 2, дублирующиеся атрибуты исключаем:

 

r 1 × Инструменты [Код инструмента, Имя инструмента] ≔ r 2 (Код поставщика, Имя поставщика, Город поставщика, Код инструмента, Имя инструмента);

 

Заметим, что из отношения  Инструменты мы берем только два  атрибута: «Код инструмента» и «Имя инструмента». Чтобы это осуществить  мы, как можно заметить из записи отношения r 2, применили унарную операцию проекции: Инструменты [Код инструмента, Имя инструмента], т. е., если бы отношение Инструменты было представлено в виде таблицы, результатом этой операции проекции стали бы два первых столбца с заголовками соответственно «Код инструмента» и «Имя инструмента».

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

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

3. Напишем унарную операцию  выборки по условию <«Имя  инструмента» = «Плоскогубцы»> применительно  к отношению r 2, полученному в предыдущем пункте. А к результату этой операции применим, в свою очередь, унарную операцию проекции [Код поставщика, Имя поставщика, Город поставщика], для того чтобы получить все значения этих атрибутов, потому что именно эту информацию нам и требуется получить исходя из заказа.

Итак:

 

(σ <Имя инструмента = «Плоскогубцы»> r 2) [Код поставщика, Имя поставщика, Город поставщика] ≔ r 3 (Код поставщика, Имя поставщика, Город поставщика, Код инструмента, Имя инструмента).

 

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

4. Сначала составим разность  отношения «Поставщики» и отношения r 3, а после применения этой бинарной операции применим унарную операцию проекции на атрибуты «Имя поставщика» и «Город поставщика».

 

(Поставщики \ r 3) [Имя поставщика, Город поставщика] ≔ r 4 (Код поставщика, Имя поставщика, Город поставщика);

 

Результат обозначили r 4, в это отношение и вошли как раз только те кортежи исходного отношения «Поставщики», которые соответствуют условию нашего заказа.

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

 

Лекция  № 6. Язык SQL

 

Дадим сначала небольшую  историческую справку.

Язык SQL, предназначенный  для взаимодействия с базами данных, появился в середине 1970-х гг. (первые публикации датируются 1974 г.) и был разработан в компании IBM в рамках проекта экспериментальной реляционной системы управления базами данных. Исходное название языка – SEQUEL (Structured English Query Language) – только частично отражало суть этого языка. Первоначально, сразу после его изобретения и в первичный период эксплуатации языка SQL, его название являлось аббревиатурой от словосочетания Structured Query Language, что переводится как «Язык структурированных запросов». Конечно, язык был ориентирован главным образом на удобную и понятную пользователям формулировку запросов к реляционным базам данных. Но, в действительности, он почти с самого начала являлся полным языком баз данных, обеспечивающим, помимо средств формулирования запросов и манипулирования базами данных, следующие возможности:

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

2) средства определения  ограничений целостности и триггеров  (о которых будет упомянуто  позднее);

3) средства определения  представлений баз данных;

4) средства определения  структур физического уровня, поддерживающих  эффективное выполнение запросов;

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

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

В настоящее время SQL –  это уже не аббревиатура, а название самостоятельного языка.

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

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

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

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

1. Оператор Select – базовый оператор языка  структурированных запросов

 

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

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

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

Информация о работе База данных