
- •Содержание
- •Глава 1 Концепция баз данных 6
- •Глава 2 Модели данных 12
- •Глава 3 Реляционная модель данных 24
- •Глава 4 Элементы языка sql 42
- •Глава 5 Проектирование баз данных 66
- •Глава 6 Функции субд и системы обработки транзакций 81
- •Глава 7 Технологии, модели и архитектура систем обработки данных 88
- •Глава 1 Концепция баз данных
- •1.1 Данные и эвм
- •1.2 Поколения субд и направления исследований
- •1.3 Терминология в субд
- •1.4 Вопросы для самоконтроля к главе 1
- •Глава 2 Модели данных
- •2.1. Классификация моделей данных
- •2.2 Основные особенности систем, основанных на инвертированных списках
- •2.2.1 Структуры данных
- •2.2.2 Манипулирование данными
- •2.2.3 Ограничения целостности
- •2.3 Иерархические модели
- •2.3.1. Иерархические структуры данных
- •2.3.2 Манипулирование данными
- •2.3.3 Ограничения целостности
- •2.4 Сетевые модели
- •2.4.1 Сетевые структуры данных
- •2.4.2 Манипулирование данными
- •2.4.3 Ограничения целостности
- •2.5 Физические модели организации баз данных
- •Файловые структуры, используемые для хранения данных в бд
- •Модели страничной организации данных в современных бд
- •Этапы доступа к бд
- •Вопросы и упражнения для самоконтроля к главе 2
- •Глава 3 Реляционная модель данных
- •3.1 Базовые понятия реляционных баз данных
- •3.1.1. Тип данных
- •3.1.2. Домен
- •3.1.3 Схема отношения, схема базы данных
- •3.1.4 Кортеж, отношение, ключи
- •3.1.5 Связи в реляционных базах данных
- •3.2 Фундаментальные свойства отношений
- •3.2.1 Отсутствие кортежей-дубликатов
- •3.2.2 Отсутствие упорядоченности кортежей
- •3.2.3 Отсутствие упорядоченности атрибутов
- •3.2.4 Атомарность значений атрибутов
- •3.3. Характеристика реляционной модели данных
- •3.4 Трехзначная логика (3vl)
- •3.5 Реляционная алгебра
- •Эквисоединение. Наиболее важным частным случаем -соединения является случай, когда есть просто равенство. Синтаксис эквисоединения:
- •3.6 Особенности операций реляционной алгебры
- •Реляционное исчисление
- •Вопросы и упражнения для самоконтроля к главе 3
- •Глава 4 Элементы языка sql
- •4.1 История языка sql
- •4.2 Структура языка sql
- •Ddl (Data Definition Language) - операторы определения объектов базы данных:
- •Dml (Data Manipulation Language) - операторы манипулирования данными:
- •Dcl (Data Control Language) - операторы контроля данных, защиты и управления данными:
- •4.3 Создание запроса с помощью оператора select
- •4.3.1 Создание простых запросов
- •4.3.2. Агрегирование данных в запросах
- •4.3.3 Формирование запросов на основе соединения таблиц
- •4.3.4 Формирование структур вложенных запросов
- •Простые подзапросы
- •4.3.4.2 Соотнесенные (коррелированные) подзапросы
- •Запросы с использованием кванторов
- •4.3.5 Объединение нескольких запросов в один
- •4.3.6 Синтаксис оператора select
- •4.4 Операторы манипулирования данных
- •4.4.1 Оператор удаления данных delete
- •4.4.2 Оператор вставки данных insert
- •4.4.3 Оператор обновления данных update
- •Операторы определения объектов базы данных
- •4.5.1 Операторы определения таблицы
- •4.5.2 Оператор определения представлений create view
- •Операторы контроля данных, защиты и управления данными
- •4.6.1 Операторы управления привилегиями
- •4.6.2 Операторы управления транзакциями
- •4.6.3 Проблемы параллельной работы транзакций
- •Вопросы и упражнения для самоконтроля к главе 4
- •Глава 5 Проектирование баз данных
- •5.1 Проектирование реляционных бд с использованием принципов нормализации
- •Проектирование реляционных бд с использованием семантических моделей
- •5.2.1 Применение семантических моделей при проектировании
- •5.2.2. Основные понятия модели Entity-Relationship
- •5.2.3 Пример разработки простой er-модели
- •Практические рекомендации по проектированию бд
- •Вопросы и упражнения для самоконтроля к главе 5
- •Глава 6 Функции субд и системы обработки транзакций
- •6.1 Основные функции субд
- •1.Непосредственное управление данными во внешней памяти
- •2. Управление буферами оперативной памяти
- •3. Управление транзакциями
- •4. Журнализация
- •5. Поддержка языков бд
- •Системы обработки транзакций
- •6.2.1 Oltp-системы
- •6.2.2 Olap -системы
- •6.2.3 Мониторы транзакций
- •Архитектура субд
- •6.4 Пользователи бд
- •6.4 Вопросы и упражнения для самоконтроля по главе 6
- •Глава 7 Технологии, модели и архитектура систем обработки данных
- •7.1 Технологии и модели архитектуры «клиент-сервер»
- •7.2 Распределенная обработка данных
- •Аспекты сетевого взаимодействия
- •Технология распределенной бд (технология star)
- •Технология тиражирования данных
- •7.3 Концепция активного сервера в модели dbs
- •7.4 Вопросы и упражнения для самоконтроля к главе 7
- •Литература
3.5 Реляционная алгебра
Вторая часть реляционной модели, манипуляционная часть, утверждает, что доступ к реляционным данным осуществляется при помощи реляционной алгебры или эквивалентного ему реляционного исчисления.
В реализациях конкретных реляционных СУБД сейчас не используется в чистом виде ни реляционная алгебра, ни реляционное исчисление. Фактическим стандартом доступа к реляционным данным стал язык SQL (Structured Query Language). Язык SQL представляет собой смесь операторов реляционной алгебры и выражений реляционного исчисления, использующий синтаксис, близкий к фразам английского языка и расширенный дополнительными возможностями, отсутствующими в реляционной алгебре и реляционном исчислении. Вообще, язык доступа к данным называется реляционно полным, если он по выразительной силе не уступает реляционной алгебре (или, что то же самое, реляционному исчислению), т.е. любой оператор реляционной алгебры может быть выражен средствами этого языка. Именно таким и является язык SQL.
В данной главе будут рассмотрены основы реляционной алгебры.
Реляционная алгебра представляет собой
набор операторов, использующих отношения
в качестве аргументов, и возвращающие
отношения в качестве результата. Таким
образом, реляционный оператор
выглядит как функция с отношениями в
качестве аргументов:
Реляционная алгебра является замкнутой, т.к. в качестве аргументов в реляционные операторы можно подставлять другие реляционные операторы, подходящие по типу:
Таким образом, в реляционных выражениях можно использовать вложенные выражения сколь угодно сложной структуры.
Каждое отношение обязано иметь уникальное имя в пределах базы данных. Имя отношения, полученного в результате выполнения реляционной операции, определяется в левой части равенства. Однако можно не требовать наличия имен от отношений, полученных в результате реляционных выражений, если эти отношения подставляются в качестве аргументов в другие реляционные выражения. Такие отношения будем называть неименованными отношениями. Неименованные отношения реально не существуют в базе данных, а только вычисляются в момент определения значения реляционного оператора.
Традиционно, вслед за Э. Коддом, определяют восемь реляционных операций реляционной алгебры, объединенных в две группы.
Теоретико-множественные операции:
объединение;
пересечение;
вычитание;
декартово произведение.
Специальные реляционные операции:
выборка (селекция, ограничение) ;
проекция;
соединение;
деление.
Не все они являются независимыми, т.е. некоторые из этих операций могут быть выражены через другие реляционные операции. Каждая операция реляционной алгебры использует одну или несколько таблиц (отношений) в качестве своих операндов и продуцирует в результате новую таблицу, т.е. позволяет «разрезать» или «склеивать» таблицы (рис. 3.3)
Рисунок. 3.3. Графическая интерпретация некоторых операций реляционной алгебры
Кроме того, в состав алгебры включается операция присваивания, позволяющая сохранить в базе данных результаты вычисления алгебраических выражений, и операция переименования атрибутов, дающая возможность корректно сформировать заголовок (схему) результирующего отношения. Если не вдаваться в некоторые тонкости, которые мы рассмотрим в следующих подразделах, то почти все операции предложенного выше набора обладают очевидной и простой интерпретацией:
1. Объединение. При выполнении
операции объединения двух отношений
производится отношение, включающее все
кортежи, входящие хотя бы в одно из
отношений-операндов. Объединением
двух совместимых по типу отношений
и
называется
отношение с тем же заголовком, что и у
отношений
и
,
и телом, состоящим из кортежей,
принадлежащих или
,
или
,
или обоим отношениям.
Синтаксис операции объединения:
Объединение, как и любое отношение, не может содержать одинаковых кортежей. Поэтому, если некоторый кортеж входит и в отношение , и отношение , то в объединение он входит один раз.
Пример 3.1 Пусть даны два отношения и с информацией о сотрудниках:
Отношение A
Табельный номер |
Фамилия |
Зарплата |
1 |
Иванов |
1000 |
2 |
Петров |
2000 |
3 |
Сидоров |
3000 |
Отношение В
Табельный номер |
Фамилия |
Зарплата |
1 |
Иванов |
1000 |
4 |
Пушников |
2500 |
3 |
Сидоров |
3000 |
Объединение отношений и Отношение A UNION B будет иметь вид:
Табельный номер |
Фамилия |
Зарплата |
1 |
Иванов |
1000 |
2 |
Петров |
2000 |
3 |
Сидоров |
3000 |
4 |
Пушников |
2500 |
2. Пересечение. Операция пересечения двух отношений производит отношение, включающее все кортежи, входящие в оба отношения-операнда. Пересечением двух совместимых по типу отношений и называется отношение с тем же заголовком, что и у отношений и , и телом, состоящим из кортежей, принадлежащих одновременно обоим отношениям и .
Синтаксис операции пересечения:
Пример 3.2 Для тех же отношений и , что и в предыдущем примере пересечение
A INTERSECT B имеет вид:
Табельный номер |
Фамилия |
Зарплата |
1 |
Иванов |
1000 |
3 |
Сидоров |
3000 |
3. Разность. Отношение, являющееся разностью двух отношений включает все кортежи, входящие в отношение - первый операнд, такие, что ни один из них не входит в отношение, являющееся вторым операндом. Вычитанием (разностью) двух совместимых по типу отношений и называется отношение с тем же заголовком, что и у отношений и , и телом, состоящим из кортежей, принадлежащих отношению и не принадлежащих отношению .
Синтаксис операции вычитания:
Пример 3.3 Для тех же отношений и , что и в предыдущем примере вычитание Отношение A MINUS B имеет вид:
Табельный номер |
Фамилия |
Зарплата |
2 |
Петров |
2000 |
4. Декартово произведение.
При выполнении прямого произведения
двух отношений производится отношение,
кортежи которого являются конкатенацией
(сцеплением) кортежей первого и второго
операндов. Декартовым произведением
двух отношений
и
называется
отношение, заголовок которого является
сцеплением заголовков отношений
и
,
а тело состоит из кортежей, являющихся
сцеплением кортежей отношений
и
.
Синтаксис операции декартового
произведения:
Замечание. Мощность произведения равна произведению мощностей отношений и , т.к. каждый кортеж отношения соединяется с каждым кортежем отношения .
Замечание. Если в отношения и имеются атрибуты с одинаковыми наименованиями, то перед выполнением операции декартового произведения такие атрибуты необходимо переименовать.
Замечание. Перемножать можно любые два отношения, совместимость по типу при этом не требуется.
Пример 3.4 Пусть даны два отношения и с информацией о поставщиках и деталях:
Отношение A (Поставщики)
Номер поставщика |
Наименование поставщика |
1 |
Иванов |
2 |
Петров |
3 |
Сидоров |
Отношение B (Детали)
Номер детали |
Наименование детали |
1 |
Болт |
2 |
Гайка |
3 |
Винт |
Декартово произведение отношений и Отношение A TIMES B будет иметь вид:
Номер поставщика |
Наименование поставщика |
Номер детали |
Наименование детали |
1 |
Иванов |
1 |
Болт |
1 |
Иванов |
2 |
Гайка |
1 |
Иванов |
3 |
Винт |
2 |
Петров |
1 |
Болт |
2 |
Петров |
2 |
Гайка |
2 |
Петров |
3 |
Винт |
3 |
Сидоров |
1 |
Болт |
3 |
Сидоров |
2 |
Гайка |
3 |
Сидоров |
3 |
Винт |
Замечание. Сама по себе операция декартового произведения не очень важна, т.к. она не дает никакой новой информации, по сравнению с исходными отношениями. Для реальных запросов эта операция почти никогда не используется. Однако операция декартового произведения важна для выполнения специальных реляционных операций, о которых речь пойдет ниже.
5. Ограничение (выборка, селекция).
Результатом ограничения отношения по
некоторому условию является отношение,
включающее кортежи отношения-операнда,
удовлетворяющее этому условию. Выборкой
(ограничением, селекцией) на
отношении
с условием
называется
отношение с тем же заголовком, что и у
отношения
,
и телом, состоящем из кортежей, значения
атрибутов которых при подстановке в
условие
дают
значение ИСТИНА.
представляет
собой логическое выражение, в которое
могут входить атрибуты отношения
и
(или) скалярные выражения.
В простейшем случае условие
имеет вид
,
где
-
один из операторов сравнения (
и т.д.), а
и
-
атрибуты отношения
или
скалярные значения.
Синтаксис операции выборки:
,
или
Пример 3.5 Пусть дано отношение с информацией о сотрудниках:
Отношение A
Табельный номер |
Фамилия |
Зарплата |
1 |
Иванов |
1000 |
2 |
Петров |
2000 |
3 |
Сидоров |
3000 |
Результат выборки
будет
иметь вид:
Табельный номер |
Фамилия |
Зарплата |
1 |
Иванов |
1000 |
2 |
Петров |
2000 |
Смысл операции выборки очевиден - выбрать кортежи отношения, удовлетворяющие некоторому условию. Таким образом, операция выборки дает «горизонтальный срез» отношения по некоторому условию.
6. Проекция. При выполнении проекции
отношения на заданный набор его атрибутов
производится отношение, кортежи которого
производятся путем взятия соответствующих
значений из кортежей отношения-операнда.
Проекцией отношения
по
атрибутам
,
где каждый из атрибутов принадлежит
отношению
,
называется отношение с заголовком
и
телом, содержащим множество кортежей
вида
,
таких, для которых в отношении
найдутся
кортежи со значением атрибута
равным
,
значением атрибута
равным
,
…, значением атрибута
равным
.
Синтаксис операции проекции:
Замечание. Операция проекции дает «вертикальный срез» отношения, в котором удалены все возникшие при таком срезе дубликаты кортежей.
Пример 3.6 Пусть дано отношение с информацией о поставщиках, включающих наименование и месторасположение:
Отношение A (Поставщики)
Номер поставщика |
Наименование поставщика |
Город поставщика |
1 |
Иванов |
Уфа |
2 |
Петров |
Москва |
3 |
Сидоров |
Москва |
4 |
Сидоров |
Челябинск |
Проекция
будет
иметь вид:
Город поставщика |
Уфа |
Москва |
Челябинск |
7.
Соединение. При соединении двух
отношений по некоторому условию
образуется результирующее отношение,
кортежи которого являются сцеплением
кортежей первого и второго отношений
и удовлетворяют этому условию. Соединением
отношений
и
по
условию
называется
отношение
представляет собой логическое выражение, в которое могут входить атрибуты отношений и и (или) скалярные выражения. Таким образом, операция соединения есть результат последовательного применения операций декартового произведения и выборки. Если в отношениях и имеются атрибуты с одинаковыми наименованиями, то перед выполнением соединения такие атрибуты необходимо переименовать.
Операция соединения отношений, наряду с операциями выборки и проекции, является одной из наиболее важных реляционных операций.
Обычно рассматривается несколько разновидностей операции соединения:
общая операция соединения;
-соединение (тэта-соединение);
эквисоединение;
естественное соединение
Наиболее важным из этих частных случаев является операция естественного соединения. Все разновидности соединения являются частными случаями общей операции соединения.
Тэта-соединение. Пусть отношение содержит атрибут , отношение содержит атрибут , а - один из операторов сравнения ( и т.д.). Тогда -соединением отношения по атрибуту с отношением по атрибуту называют отношение
Это частный случай операции общего соединения.
Пример 3.7 Рассмотрим некоторую компанию, в которой хранятся данные о поставщиках и поставляемых деталях. Пусть поставщикам и деталям присвоен некий статус. Пусть бизнес компании организован таким образом, что поставщики имеют право поставлять только те детали, статус которых не выше статуса поставщика (смысл этого может быть в том, что хороший поставщик с высоким статусом может поставлять больше разновидностей деталей, а плохой поставщик с низким статусом может поставлять только ограниченный список деталей, важность которых (статус детали) не очень высока).
Отношение A (Поставщики)
Номер поставщика |
Наименование поставщика |
X (Статус поставщика) |
1 |
Иванов |
4 |
2 |
Петров |
1 |
3 |
Сидоров |
2 |
Отношение B (Детали)
Номер детали |
Наименование детали |
Y (Статус детали) |
1 |
Болт |
3 |
2 |
Гайка |
2 |
3 |
Винт |
1 |
Ответ на вопрос "какие поставщики
имеют право поставлять какие детали?"
дает
-соединение
:
Отношение "Какие поставщики поставляют
какие детали"
Номер поставщика |
Наименование поставщика |
X (Статус поставщика) |
Номер детали |
Наименование детали |
Y (Статус детали) |
1 |
Иванов |
4 |
1 |
Болт |
3 |
1 |
Иванов |
4 |
2 |
Гайка |
2 |
1 |
Иванов |
4 |
3 |
Винт |
1 |
2 |
Петров |
1 |
3 |
Винт |
1 |
3 |
Сидоров |
2 |
2 |
Гайка |
2 |
3 |
Сидоров |
2 |
3 |
Винт |
1 |