• Реляционная алгебра, операции реляционной алгебры. Реляционная алгебра в базах данных: операции, примеры

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

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

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

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

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

    Объектно-ориентированная модель.

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

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

    Объектно-реляционные СУБД

    Разница между объектно-реляционными и объектными СУБД : первые являют собой надстройку над реляционной схемой, вторые же изначально объектно-ориентированы. Главная особенность и отличие объектно-реляционных (как и объектных) СУБД от реляционных заключается в том, что ОРСУБД интегрированы с Объектно-Ориентированным (OO) языком программирования, внутренним или внешним как C++, Java .

    Объектно-реляционными СУБД являются, например, широко известные Oracle Database , Microsoft SQL Server , PostgreSQL, Microsoft Access.

    Реляционный подход к построению модели предметной области.

    · предметная область моделируется совокупностью отдельных информационных объектов (сущностей), каждый из которых описывается своей двумерной таблицей;

    · между таблицами существуют связи;

    · каждый элемент таблицы - один элемент данных;

    · все столбцы в таблице однородные, т.е. все элементы в столбце имеют одинаковый тип (числовой, символьный и т.д.) и длину;

    · каждый столбец описывает один атрибут сущности;

    · каждый столбец имеет уникальное имя;

    · строка содержит значения атрибутов для одного экземпляра сущности;

    · одинаковые строки в таблице отсутствуют (наличие первичного ключа);

    · порядок следования строк и столбцов может быть произвольным.

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

    Первая нормальная форма

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

    Преобразование отношения к первой нормальной форме может привести к увеличению количества реквизитов (полей) отношения и изменению ключа.

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

    · таблица должна содержать данные об одном типе объектов;

    · каждая таблица должна содержать одно поле или несколько полей, образующих уникальный идентификатор (или первичный ключ) для каждой строки;

    · все неключевые поля должны определяться полным уникальным идентификатором данной таблицы.

    Третья нормальная форма

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

    Типы связей. Свойства отношений

    · Отношение "один-к-одному" (1:1) означает, что каждая запись в одной таблице соответствует не более чем одной записи в другой таблице.

    · Отношение "один-ко-многим" (1:М) означает, что каждой записи в одной таблице соответствует 0 или 1 или несколько записей в другой таблице.

    · Отношение "многие-к-одному" (М:1) аналогично рассмотренному ранее типу "один-ко-многим". Тип отношения между объектами зависит от точки зрения.

    · Отношение "многие-ко-многим" (М:М). возникает между двумя таблицами тогда, когда каждой записи в одной таблице соответствует 0 или более записей в другой таблице и наоборот.

    Простые и составные ключи

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

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

    Такой первичный ключ называют составным ключом

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

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

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

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

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

    Объединяет информацию двух разных отношений в одну.

    Обозначения - r Χ s,

    где r и s - отношения, а их выход будет определяться как

    r Χ s = {qt | q ∈ r и t ∈ s}.

    Вывод. Устанавливает отношение, которое показывает все книги и статьи, написанные с помощью учебника.

    Переименовать операцию (ρ).

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

    Обозначение - ρ x (E),

    где результат выражения E сохраняется с именем x.

    Дополнительные операции:

    • установить пересечение;
    • присваивание;
    • естественное соединение.

    Реляционное исчисление

    Является непроцедурным язык запросов, то есть он говорит, что делать, но не объясняет, как это реализовать. Реляционное исчисление существует в двух формах:

    • корреляционное исчисление кортежа;
    • фильтрация переменных диапазонов.

    Обозначения - T/Состояние: возвращает все кортежи T, удовлетворяющие условию. Результат. Возвращает кортежи с именем. TRC можно количественно определить. Можно использовать экзистенциальные (∃) и универсальные кванторы (∀). Вывод. Вышеприведенный запрос даст тот же результат, что и предыдущий.

    Доменное реляционное исчисление DRC

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

    Обозначения - {a 1 , a 2 , a 3 , ..., a n | P (a 1 , a 2 , a 3 , ..., a n)},

    где a1, a2 - атрибуты, а P обозначает формулы, построенные внутренними значениями.

    Вывод. Устанавливает статью, страницу и тему из отношения TutorialsPoint, где subject является базой данных.

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

    Вариации и схемы реляционного исчисления и алгебры

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

    • сущности и ее атрибутов;
    • связи, которая является ассоциацией между вышеупомянутыми значениями.

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

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

    Отношение - это ассоциация между сущностями. Процесс составления следующий:

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

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

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

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

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

    Существующие варианты для описания, хранения, изменения информации

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

    • создает новые таблицы и представления из СУБД.
    • выбрасывает команды.
    • изменяет схему базы данных.
    • эта команда добавляет атрибут в объект типа string.

    SQL оснащен языком манипулирования данными (DML). Он изменяет экземпляр базы, вставляя, обновляя и удаляя информацию. DML отвечает за изменение всех данных. SQL содержит следующий набор команд в разделе DML:

    1. SELECT - это одна из основных команд запроса. Он аналогичен проекционной операции реляционной алгебры. Он выбирает атрибуты на основе условия, описанного в приложении WHERE.
    2. FROM - этот раздел принимает имя в качестве аргумента, из которого атрибуты должны быть выбраны/спроецированы. В случае если дано более одного названия, этот пункт соответствует декартовому произведению.
    3. WHERE - этот раздел определяет предикат или условия, которые должны соответствовать, чтобы квалифицировать проецирующийся атрибут.

    Существуют также команды:

    • вставка;
    • изменение значений;
    • удаление.

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

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

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

    Информация об автомобилях модели 1996 года, где в ходе инспекции на 1999 год обнаружены недостатки.

    Сначала выводится информация о машинах, чтобы понимать значения всех атрибутов отношения. Информация об инспекциях хранится в таблице «Проверка», и, если обнаружены неисправности, они регистрируются в таблице «Проблема». Таким образом, нужны эти три таблицы, чтобы получить нужную информацию.

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

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

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

    Варианты исчислений без промежуточных результатов

    Необходимая информация: Имя водителя для модельного года 1995 года или более старые автомобили, которые не были проверены на 2000 год. Имя находится в таблице "Водитель". Правоохранительные органы описаны в таблице «Инспекция и автомобили в столовой машине». Таким образом, нужны эти три таблицы. Во-первых, необходимо узнать автомобили, которые не были осмотрены на 2000 год. Невозможно решить эту проблему, используя только инспекцию, указанную в таблице, поскольку она содержит данные об этих проверках, которые были сделаны, а не о тех, что не были реализованы. Эта проблема решается путем поиска дополняющих автомобилей, которые проверяются до 2000 года. На самом деле нужны только их регистрационные номера.

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

    Где закреплена и защищена информация

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

    1. Первичное. К этой категории относится память, которая напрямую доступна для ЦП. Регистры, быстрая память (кэш) и основная (ОЗУ) напрямую доступны для центральной, так как все они размещены на материнской плате или чипсете. Это хранилище, как правило, очень маленькое, сверхбыстрое и неустойчивое. Для поддержания состояния требуется постоянный источник питания. В случае сбоя все его данные теряются.
    2. Вторичное. Используется для хранения информации для будущего использования или резервного копирования. Включает в себя устройства памяти, которые не являются частью чипсета или материнской платы процессора, например магнитные диски, оптические диски (DVD, CD и т. д.), жесткие диски, флэш-накопители и магнитные ленты.
    3. Третичное. Используется для хранения огромных объемов данных. Поскольку такие запоминающие устройства являются внешними по отношению к компьютерной системе, они являются самыми медленными по скорости. Эти гаджеты хранения в основном используются для резервного копирования всей системы. Оптические диски и магнитные ленты широко используются в качестве третичного хранилища.

    Для эффективности запроса важны специальные операции реляционной алгебры.

    Структура хранения

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

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

    Магнитные и жесткие диски являются наиболее распространенными вторичными устройствами хранения в современных компьютерных системах. Они называются магнитными, состоят из металлической основы. Эти диски размещаются вертикально на шпинделе. Головка чтения/записи перемещается между ними и используется для намагничивания или снятия такого пятна под ним. Его можно распознать как 0 (ноль) или 1 (один).

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

    Файловые операции

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

    • обновление;
    • поиск.

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

    1. Открыть - существует в одном из двух режимов чтения или записи. В первом случае операционная система не позволяет никому изменять данные. Другими словами, данные только считываются. Файлы, открытые в режиме чтения, могут совместно использоваться несколькими объектами. Режим записи позволяет изменять данные. Файлы могут быть прочитаны, но не могут использоваться совместно.
    2. Закрыть - это самая важная операция с точки зрения операционной системы, так как она удаляет все блокировки (если в режиме общего доступа), сохраняет данные (если они изменены) на вторичный носитель и освобождает все буферы и обработчики, связанные с файлом.
    3. Индексирование - это метод структуры информации для эффективного извлечения записей из файлов системы на основе некоторых атрибутов, где была выполнена эта система. Определяется на основе атрибутов.

    Индексирование может быть следующего типа:

    1. Первичный определяется в файле упорядоченных данных. Файл информации упорядочен в ключевом поле.
    2. Вторичный индекс сгенерирован из поля, которое является ключом-кандидатом, и имеет уникальное значение в каждой записи или не ключ с повторяющимися значениями.
    3. Кластеризация определяется в упорядоченном файле данных, в не ключевом поле.

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

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

    Поехали …

    Что такое SQL?

    SQL (Structured Query Language) структурированный язык запросов, универсальный компьютерный язык, применяемый для создания, модификации и управление данными в реляционных базах данных

    Что такое реляционная база данных?

    Это совокупность взаимосвязанных данных хранящихся в виде отношений

    Что такое отношения?

    Отношение это некое множество картежей

    Что такое кортеж?

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

    Продемонстрирую кортеж из двух элементов с помощью графа:

    Вершины графа это элементы их некоторого множества, в данном случае, это элемент а1 из множества А и элемент b1 из множества B . Ребро между вершинами обозначает связь между элементами или как говорят элемент а1 находится в отношение с b1 .

    Продемонстрирую этот же кортеж с помощью таблицы:

    Номер 1 у а1 и b1 , был выбран произвольно.

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

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

    Продемонстрирую, как представить отношение в виде графа:

    На графике видно, что есть несколько кортежей, причем какой кортеж первый, а какой второй и третий не важно , это просто множество кортежей. В множестве нет такого понятия «первый», «второй» и «третий», это всё сразу и очередность не важна.

    Продемонстрирую, как представить отношение в виде таблицы:

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

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

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

    Итак, с логической цепочкой мы разобрались: SQL, реляционная БД, отношения, кортеж..Теперь мы затронем язык SQL, т.е. тему манипулирования с отношениями, важно разобраться какие операции мы можем проводить над отношениями .

    Все операции продемонстрировать не возможно, в связи с их большим количеством, приведу только базовые:

    1. Селекция (другие имена операции — выборка, ограничение)

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

    Пусть есть отношение, назовем его «исходная таблица №1»:

    Результат «выборки» из исходной таблицу №1, при условии что А=а3

    На языке SQL:

    синтаксис — SELECT * FROM имя_таблицы WHERE имя_столбца=значение

    SELECT * FROM исходная_таблица WHERE А=a3

    2. Проекция

    Операция «проекция» выполняется над одним отношением , в результате неё формируется новое отношение с указанными столбцами таблицы .

    Например, есть отношение, назовем ее «исходная таблица №2»:

    Произведем над данным отношением операцию «проекция» по атрибутам А и С , результат:

    В результате мы получили два одинаковых картежа, в отношение такого быть не может, поэтому сократим их (в СУБД сокращения происходят автоматически):

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

    На языке SQL:

    синтаксис — SELECT список_столбцов FROM имя_таблицы

    реализация для данного случая — SELECT А,С FROM исходная_таблица_№2

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

    Операция «естественное соединение » выполняется над двумя логическими связанными отношениями , в результате неё формируется новое отношение со столбцами первого и второго отношения и с кортежами, которые получаются в результате соединения каждого кортежа первого и второго отношения . На примере должно быть более понятно, пусть есть два отношения, назовем их исходная таблица №3.1 и исходная таблица №3.2:

    Исходная таблица №3_1

    Исходная таблица №3_2

    Проведем операцию «соединения» первого и второго отношения, результат:

    Интересно заметить, что мы получили исходное отношение из раздела «2. Проекция», последовательность столбцов в отношение значения не имеет.

    На языке SQL:

    реализация для данного случая — SELECT исходная_таблица_№3_1.*, исходная таблица №3_2.В FROM исходная_таблица_№3_1, исходная таблица №3_2 WHERE исходная таблица №3_1.A= исходная таблица №3_2.A

    4. Объединение

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

    Исходная таблица №4_1

    Исходная таблица №4_2

    Произведем операцию «объединения» отношения №4.1 и отношения №4.2 , результат:

    На языке SQL:

    синтаксис — SELECT список_столбцов_таблицы1 FROM таблица1 UNION SELECT список_столбцов_таблицы2 FROM таблица2

    реализация для данного случая — SELECT А,В FROM исходная_таблица_№4_1 UNION SELECT А,В FROM исходная_таблица_№4_2

    5. Пересечение

    Операция «пересечение» выполняется , результат операции новое отношение, которое включает в себя одинаковые кортежи «первого» и «второго» отношения .

    Пример, пусть есть два отношения:

    Исходная таблица №5_1

    Исходная таблица №5_2

    Произведем операцию «пересечения» с данными отношениями, результат:

    Т.е. в результирующее отношение, попали повторяющиеся кортежи из «первого» и «второго» отношения.

    На языке SQL:

    синтаксис — SELECT одна_из_таблиц.столбец1, одна_из_таблиц.столбец2, … FROM таблица1,таблица2 WHERE таблица1.столбец1=таблица2.столбец1 AND таблица1.столбец2= таблица2.столбец2 AND …

    реализация для данного случая –

    SELECT исходная_таблица_№5_1.А, исходная_таблица_№5_1.В FROM исходная_таблица_№5_1, исходная_таблица_№5_2 WHERE исходная_таблица_№5_1.А = исходная_таблица_№5_2.А AND исходная_таблица_№5_1.В = исходная_таблица_№5_2.В

    6. Вычитание (разность)

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

    Пример, пусть есть два отношения:

    Исходная таблица №6_1

    Исходная таблица №6_2

    Произведем операцию «разность» , т.е. от исходной таблицы №6_1 отнимем исходную таблицу №6_2, результат:

    Т.е. результирующее отношение, это «первое» отношение без повторяющихся кортежей «второго» отношения.

    На языке SQL:

    реализация для данного случая – SELECT исходная_таблица_№6_1.А, исходная_таблица_№6_1.В FROM исходная_таблица_№6_1 WHERE NOT EXISTS (SELECT исходная_таблица_№6_2.А, исходная_таблица_№6_2.В FROM исходная_таблица_№6_2
    WHERE исходная_таблица_№6_2.А= исходная_таблица_№6_1.А AND исходная_таблица_№6_2.В= исходная_таблица_№6_1.В)

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

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

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

    Исходная таблица №7_1

    Исходная таблица №7_2

    Произведем «декартово произведение» данных двух отношений, результат:

    На языке SQL:

    реализация для данного случая – SELECT исходная_таблица_№7_1.А, исходная_таблица_№7_1.В, исходная_таблица_№7_2.А, исходная_таблица_№7_2.В FROM исходная_таблица_№7_1, исходная_таблица_№7_2

    Мы разобрались с основными операции над отношениями и напоследок теоретической части поста разберемся что такое ключ.

    Что такое ключ?

    Ключ – это один или не сколько столбцов таблицы , которые однозначно определяют запись (строку) . Пример, пусть есть отношение представленное в виде таблицы:

    Ключом данного отношения может быть столбец А . Т.к. значения только данного столбца в отношение , например: а3 определяет запись «а3 b1 d3» , a2 определят запись «a2 b2 d3» , a1 определяет запись «a1 b2 d1» . Другие столбцы данную функцию нести не могут.

    Если ключ состоит из одного столбца , то его называют простым , если из нескольких его называют составным . В данной таблице, помимо простого ключа, есть еще один – составной, состоящий из столбцов B и D . Значения этих столбцов однозначной определят запись (строки), пример: b1 и d3 однозначно определяет запись «a3 b1 d3» , b2 и d3 однозначной определяет запись «a2 b2 d3» , b2 и d1 однозначно определяет запись «a1 b2 d1» .

    На практике обычно выбирают один ключ , причем самый простой , в данном случае это столбец А . Такой ключ также называют «первичный ключ ».

    Вам будет интересно:

    ^

    Лекция № 4. Реляционная алгебра. Унарные операции

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

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

    ^

    1. Унарная операция выборки

    Первой унарной операцией, которую мы рассмотрим, является операция выборки – операция выбора строк из таблицы, представляющей отношение, по какому

    либо принципу, т. е. выбор строк

    кортежей, удовлетворяющих определенному условию или условиям.

    ^ Оператор выборки обозначается σ <P >, условие выборки P <S >, т. е., оператор σ берется всегда определенным условием на кортежи P , а само условие P записывается зависящим от схемы отношения S . С учетом всего этого сама операция выборки над схемой отношения S применительно к отношению r

    σ <P >r (S ) σ <P >r = {t (S ) |t r & P <S >t } = {t (S ) |t r & IfNull (P <S >t , False };

    Результатом этой операции будет новое отношение с той же схемой отношения S , состоящее из тех кортежей t (S ) исходного отношения

    операнда, которые удовлетворяют условию выборки Pt . Понятно, что для того, чтобы применить какое

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

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

    ^ S : Сессия (№ зачетной книжки, Фамилия, Предмет, Оценка).

    Условие выборки возьмем такое:

    P <S > = (Предмет = ‘Информатика’ and Оценка > 3).

    Нам необходимо из исходного отношения

    операнда выделить те кортежи, в которых содержится информация о студентах, сдавших предмет «Информатика» не ниже, чем на три балла.

    Пусть также дан следующий кортеж из этого отношения:

    t 0 (S ) ∈ r (S

    Применяем наше условие выборки к кортежу t 0 , получаем:

    Pt 0 = (‘Базы данных’ = ‘Информатика’ and 5 > 3);

    На данном конкретном кортеже условие выборки не выполняется.

    А вообще результатом этой конкретной выборки

    σ <Предмет = "Информатика" and Оценка > 3 > Сессия

    будет таблица «Сессия», в которой оставлены строки, удовлетворяющие условию выборки.

    ^

    2. Унарная операция проекции

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

    либо признаку. А именно машина выбирает те атрибуты (т. е. буквально те столбцы) исходного отношения

    операнда, которые были указаны в проекции.

    ^ Оператор проекции обозначается [S" ] или π . Здесь S" – подсхема исходной схемы отношения S , т. е. ее некоторые столбцы. Что это означает? Это означает, что у S’ атрибутов меньше, чем у S , потому что в S" остались только те из них, для которых выполнилось условие проекции. А в таблице, представляющей отношение r (S" ), строк столько же, сколько их у таблицы r (S ), а столбцов – меньше, так как остались только соответствующие оставшимся атрибутам. Таким образом, оператор проекции π< S"> применительно к отношению r (S ) дает в результате новое отношение с другой схемой отношения r (S" ), состоящее из проекций t (S ) [S" ] кортежей исходного отношения. Как определяются эти проекции кортежей? Проекция любого кортежа t (S ) исходного отношения r (S ) на подсхему S" определяется следующей формулой:

    t (S ) [S’ ] = {t (a )|a def (t ) ∩ S ’}, S " ⊆S .

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

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

    π <S" >r (S ) ≡ π <S’ >r r (S ) [S ’] ≡ r [S" ] = {t (S ) [S’ ] | t r };

    Рассмотрим пример, иллюстрирующий принцип работы операции выборки.

    Пусть дано отношение «Сессия» и схема этого отношения:

    S : Сессия (№ зачетной книжки, Фамилия, Предмет, Оценка);

    Нас будут интересовать только два атрибута из этой схемы, а именно «№ зачетной книжки» и «Фамилия» студента, поэтому подсхема S" будет выглядеть следующим образом:

    ^ S" : (№ зачетной книжки, Фамилия).

    Нужно исходное отношение r (S ) спроецировать на подсхему S" .

    t 0 (S ) ∈ r (S ): {(№ зачетной книжки: 100), (Фамилия: ‘Иванов’), (Предмет: ‘Базы данных’), (Оценка: 5)};

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

    t 0 (S ) S" : {(№ зачетной книжки: 100), (Фамилия: ‘Иванов’)};

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

    ^

    3. Унарная операция переименования

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

    ^ Оператор переименования выглядит следующим образом: ρ<φ >, здесь φ – функция переименования .

    Эта функция устанавливает взаимно

    однозначное соответствие между именами атрибутов схем S и Ŝ, где соответственно S – схема исходного отношения, а Ŝ схема отношения с переименованными атрибутами. Таким образом, оператор ρ <φ> в применении к отношению r (S ) дает новое отношение со схемой Ŝ , состоящее из кортежей исходного отношения только с переименованными атрибутами.

    Запишем операцию переименования атрибутов в терминах систем управления базами данных:

    ρ <φ > r (S ) ≡ ρ <φ >r = {ρ <φ > t (S )| t r };

    Приведем пример использования этой операции:

    Рассмотрим уже знакомое нам отношение Сессия, со схемой:

    S: Сессия (№ зачетной книжки, Фамилия, Предмет, Оценка);

    Введем новую схему отношения Ŝ, с другими именами атрибутов, которые мы бы хотели видеть вместо имеющихся:

    Ŝ : (№ ЗК, Фамилия, Предмет, Балл);

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

    φ : (№ зачетной книжки, Фамилия, Предмет, Оценка) → (№ ЗК, Фамилия, Предмет, Балл);

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

    φ : (№ зачетной книжки, Оценка) (№ ЗК, Балл);

    t 0 (S ) r (S ): {(№ зачетной книжки: 100), (Фамилия: ‘Иванов’), (Предмет: ‘Базы данных’), (Оценка: 5)};

    Применим оператор переименования к этому кортежу:

    ρ<φ> t 0 (S ): {(№ ЗК: 100), (Фамилия: ‘Иванов’), (Предмет: ‘Базы данных’), (Балл: 5)};

    Итак, это один из кортежей нашего отношения, у которого переименовали атрибуты.

    В табличных терминах отношение

    ρ < № зачетной книжки, Оценка «№ ЗК, Балл > Сессия –

    это новая таблица, полученная из таблицы отношения «Сессия», переименованием указанных атрибутов.

    ^

    4. Свойства унарных операций

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

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

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

    1) соотношение мощностей:

    а) для операции выборки: | σ <P >r |≤ |r |;

    б) для операции проекции: | r [S" ] | ≤ |r |;

    в) для операции переименования: | ρ <φ >r | = |r |;

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

    В случае же операции переименования, мощность отношения не изменяется, за счет того, что при смене имен никакие кортежи из отношения не исключаются;

    2) свойство идемпотентности:

    а) для операции выборки: σ <P > σ <P >r = σ <P >;

    б) для операции проекции: r [S’ ] [S’ ] = r [S" ];

    в) для операции переименования в общем случае свойство идемпотентности неприменимо.

    Это свойство означает, что двойное последовательное применение одного и того же оператора к какому

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

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

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

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

    3) свойство монотонности:

    а) для операции выборки: r 1 r 2 ⇒ σ <P > r 1 σ <P >r 2 ;

    б) для операции проекции: r 1 r 2 r 1 [S" ] r 2 [S" ];

    в) для операции переименования: r 1 r 2 ρ <φ >r 1 ⊆ ρ <φ >r 2 ;

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

    Связь между записью-владельцем и записью-членом также имеет вид 1:N.

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

    • деревья (a) и (b), показанные на рис. 4.2 , заменяются одной сетевой структурой, в которой запись СОТРУДНИК входит в два групповых отношения;
    • для отображения типа M:N вводится запись СОТРУДНИК_КОНТРАКТ, которая не имеет полей и служит только для связи записей КОНТРАКТ и СОТРУДНИК, (см. рис. 4.3). Отметим, что в этой записи может храниться и полезная информация, например, доля данного сотрудника в общем вознаграждении по данному контракту.


    Рис. 4.3.

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

    Способ упорядочения подчиненных записей:

    • произвольный,
    • хронологический /очередь/,
    • обратный хронологический /стек/,
    • сортированный.

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

    Режим включения подчиненных записей:

    • автоматический - невозможно занести в БД запись без того, чтобы она была сразу же закреплена за неким владельцем;
    • ручной - позволяет запомнить в БД подчиненную запись и не включать ее немедленно в экземпляр группового отношения. Эта операция позже инициируется пользователем.

    Режим исключения.

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

    • Фиксированное. Подчиненная запись жестко связана с записью владельцем и ее можно исключить из группового отношения только удалив. При удалении записи -владельца все подчиненные записи автоматически тоже удаляются. В рассмотренном выше примере фиксированное членство предполагает групповое отношение "ЗАКЛЮЧАЕТ" между записями "КОНТРАКТ" и "ЗАКАЗЧИК", поскольку контракт не может существовать без заказчика.
    • Обязательное. Допускается переключение подчиненной записи на другого владельца, но невозможно ее существование без владельца. Для удаления записи-владельца необходимо, чтобы она не имела подчиненных записей с обязательным членством. Таким отношением связаны записи "СОТРУДНИК" и "ОТДЕЛ". Если отдел расформировывается, все его сотрудники должны быть либо переведены в другие отделы, либо уволены.
    • Необязательное. Можно исключить запись из группового отношения, но сохранить ее в базе данных не прикрепляя к другому владельцу. При удалении записи -владельца ее подчиненные записи - необязательные члены сохраняются в базе, не участвуя более в групповом отношении такого типа. Примером такого группового отношения может служить "ВЫПОЛНЯЕТ" между "СОТРУДНИКИ" и "КОНТРАКТ", поскольку в организации могут существовать работники, чья деятельность не связана с выполнением каких-либо договорных обязательств перед заказчиками.

    Операции над данными в сетевой модели БД

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

    Ограничения целостности

    Как и в иерархической модели обеспечивается только поддержание целостности по ссылкам (владелец отношения - член отношения).

    Достоинства и недостатки ранних СУБД

    Достоинства ранних СУБД:

    • развитые средства управления данными во внешней памяти на низком уровне;
    • возможность построения вручную эффективных прикладных систем;
    • возможность экономии памяти за счет разделения подобъектов (в сетевых системах)

    Недостатки ранних СУБД:

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

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

    Объектно-ориентированные СУБД

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

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

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

    Структура

    Структура объектной модели описывается с помощью трех ключевых понятий:

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

    Целостность данных

    Для поддержания целостности объектно-ориентированный подход предлагает использовать следующие средства:

    • автоматическое поддержание отношений наследования возможность объявить некоторые поля данных и методы объекта как "скрытые", не видимые для других объектов; такие поля и методы используются только методами самого объекта создание процедур контроля целостности внутри объекта

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

    К сожалению, в объектно-ориентированном программировании отсутствуют общие средства манипулирования данными, такие как реляционная алгебра или реляционное счисление. Работа с данными ведется с помощью одного из объектно-ориентированных языков программирования общего назначения, обычно это SmallTalk, C++ или Java.

    Подведем теперь некоторые итоги

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

    В то же время, ОО - модели присущ и ряд недостатков :

    • отсутствуют мощные непроцедурные средства извлечения объектов из базы. Все запросы приходится писать на процедурных языках, проблема их оптимизации возлагается на программиста;
    • вместо чисто декларативных ограничений целостности (типа явного объявления первичных и внешних ключей реляционных таблиц с помощью ключевых слов PRIMARY KEY и REFERENCES ) или полудекларативных триггеров для обеспечения внутренней целостности приходится писать процедурный код.

    Очевидно, что оба эти недостатка связаны с отсутствием развитых средств манипулирования данными. Эта задача решается двумя способами - расширение ОО-языков в сторону управления данными (стандарт ODMG), либо добавление объектных свойств в реляционные СУБД (SQL-3, а также так называемые объектно-реляционных СУБД).