Город_размещения_Поставщика
Между предками и потомками автоматически поддерживается целостность ссылок. Основное правило: никакой потомок не может существовать без своего родителя, у некоторых родителей не может быть потомков.
Иерархическая модель данных активно использовалась во многих СУБД до появления реляционных систем. Наиболее известным ее представителем является СУБД IMS компании IBM Corp., первая версия которой появилась в 60-е гг. СУБД IMS эксплуатируется и в настоящее время. Иерархическую модель данных поддерживают также следующие СУБД: MARK IV компании Control Pate Corporation, System 2000, разработанный SAS-Institute и др.
"Живучесть" иерархических моделей обусловлена тем, что многие структуры данных естественным образом иерархичны (например, в области биологии: виды, классы, группы и т.д.).
3.2. Сетевые модели
Концепция сетевой модели данных была сформулирована в конце 60-х годов в Предложениях группы CODASYL, и с тех пор на нее ссылаются как на модель CODASYL DTBG. Сети представляют естественный способ представления отношений между объектами. Они широко применяются в математике, физике, социологии и др. областях знаний. Сетевой подход к организации данных является расширением иерархического. В иерархических структурах запись-потомок должна иметь одного предка; в сетевой структуре данных потомок может иметь любое число предков. Возможные связи в сетевой модели представлены на рис. 10.
Сетевая БД состоит из набора записей и набора связей между этими записями. Тип связи определяется для двух типов записи: предка и потомка. Экземпляр типа связи состоит из одного экземпляра типа записи предка и упорядоченного набора экземпляров типа записи потомка. Для данного типа связи С с типом записи предка P и типом записи потомка PT должны выполняться следующие два условия:
Ø каждый экземпляр типа P является предком только в одном экземпляре C;
Ø каждый экземпляр PT является потомком не более чем в одном экземпляре С.
На формирование типов связи не накладываются особые ограничения, т.е. возможны, например, следующие ситуации:
Ø тип записи потомка в одном типе связи может быть типом записи предка в другом типе связи (как в иерархии);
Ø данный тип записи P может быть типом записи предка в любом числе типов связи;
Ø данный тип записи P может быть типом записи потомка в любом числе типов связи;
Ø может существовать любое число типов связи с одним и тем же типом записи предка и одним и тем же типом записи потомка; и если L1 и L2 – два типа связи с одним и тем же типом записи предка P и одним и тем же типом записи потомка C, то правила, по которым образуется родство, в разных связях могут различаться;
Ø типы записи X и Y могут быть предком и потомком в одной связи и потомком и предком – в другой;
Ø предок и потомок могут быть одного типа записи.
Пример сетевой схемы БД приведен на рис. 11.
Примерный набор операций для манипулирования данными может быть следующим:
Ø найти конкретную запись в наборе однотипных записей (студента Петрова С.И.);
Ø перейти от предка к первому потомку по некоторой связи (к первому студенту группы 22 ИТ);
Ø перейти к следующему потомку в некоторой связи (от Петрова С.И. к Матвееву Р.С.);
Ø перейти от потомка к предку по некоторой связи (найти группу Ивановой Т.И.);
Ø создать новую запись;
Ø удалить запись;
Ø изменить запись;
Ø включить в связь;
Ø исключить из связи;
Ø переставить в другую связь и т.д.
В принципе поддержание целостности связей не требуется, но иногда требуют целостности по ссылкам (как в иерархической модели).
Системы на основе сетевой модели не получили широкого распространения на практике. Типичным представителем подобной СУБД является IDMS компании Cullinana Corp. После вхождения Cullinana Corp в состав Computer Associates, правами на систему IDMS стала обладать эта компания, которая до сих пор продолжает ее поставлять и развивать.
3.3. Реляционные модели
Реляционный подход формировался в 70-е гг. Публикация известной статьи Э.Ф. Кодда о реляционной модели данных ( в июне 1970 г.) стимулировала целый ряд математических исследований, направленных на изучение свойств реляционных баз данных, впоследствии приведших к созданию теории реляционных баз данных. В своих работах Э.Ф. Кодд описал математические основы реляционной модели. Основная идея Кодда состояла в том, чтобы применить концепцию математических отношений к моделированию данных. Отношение – это таблица из строк и столбцов. Наиболее важные характеристики реляционной модели заключаются в следующем:
Ø Описание данных производится в соответствии с их естественной структурой, т. е. не требуется добавления дополнительных структур для машинного представления.
Ø Обеспечивается независимость данных от их физического представления, от связей между данными и от соображений реализации.
Ø Модель обеспечивает строгую математическую основу для интерпретации выводимости, избыточности и непротиворечивости отношений.
В это же время компания IBM начала разработку нескольких исследовательских проектов и программных продуктов-прототипов, нацеленных на создание реляционных СУБД. Благодаря успешному созданию исследовательских прототипов, реляционная теория стала активно продвигаться на практике. В 80-х гг. было создано большое количество коммерческих реляционных продуктов – от компаний IBM, Oracle Corp., Ingres Corp. и др. поставщиков. В настоящее время реляционные СУБД доминируют на рынке инструментальных средств разработки систем баз данных. Примерами наиболее известных из них являются следующие: dBaseIIIPlus, dBaseIV (фирма Ashton-Tate), DB2 (IBM), R:BASE (Microrim), FoxBase (Fox Software), Paradox (Borland), Access (Microsoft), Clarion (Clarion software), Oracle (Oracle) и др.
Реляционные системы продолжают совершенствоваться и их внутренняя природа значительно меняется. В связи с распространением объектного подхода в 90-е гг. появились объектно-реляционные модели. Расширяется и сфера применения реляционных систем. Подробнее современные направления технологий баз данных изложены в главе 6.
Примером развития реляционной модели является постреляционная модель. Классическая реляционная модель предполагает неделимость данных, постреляционная модель снимает ограничение неделимости данных, допускает многозначные поля, состоящие из множества значений. Набор значений многозначных полей считается отдельной таблицей, встроенной в основную таблицу (табл. 1).
Таблица 1
Постреляционная таблица
Наименование материала | Тип | Количество |
Ткань пальтовая | п/ш | |
ч/ш | ||
Ткань костюмная | п/э | |
п/ш |
На длину и количество полей в записях не накладывается требование постоянства, поэтому структура данных и таблиц имеет большую гибкость.
Достоинством постреляционной модели является возможность представления совокупности связанных реляционных таблиц одной постреляционной таблицей. Это обеспечивает высокую наглядность представления информации и повышение эффективности ее обработки. К недостаткам можно отнести сложность решения проблемы обеспечения целостности и непротиворечивости хранимых данных.
Постреляционная модель поддерживается, например, СУБД uniVers, Bubba, Dasdb.
3.3.1. Основные понятия реляционной модели
Реляционная модель определяется тремя аспектами данных: структурой данных (объектами данных), целостностью данных и обработкой данных. Основными понятиями, описывающими структуру данных в реляционной модели, являются: отношение, кортеж, атрибут, домен, первичный ключ.
Под отношением будем понимать двумерную таблицу, содержащую некоторые данные о рассматриваемой предметной области.
Кортеж представляет упорядоченный набор элементов (соответствует строке этой таблицы).
Атрибут соответствует столбцу таблицы. Количество атрибутов называется степенью отношения.
Домен представляет множество всех значений для определенных атрибутов отношения.
Первичный ключ – уникальный идентификатор отношения, однозначно определяющий каждый кортеж.
В реляционной теории определяются свойства отношений:
Ø Отношение не должно содержать одинаковых кортежей. Важным следствием этого свойства является то, что каждую строку можно однозначно определить с помощью набора атрибутов, составляющих первичный ключ.
Ø Кортежи не упорядочены сверху вниз.
Ø Атрибуты не упорядочены слева направо.
Ø Все значения атрибутов должны быть атомарными (простыми), т.е. не допускать группы значений в одном столбце одной строки (не расчленять значения).
На рис.12 приведен пример отношения Провайдеры Internet.
Отношение Провайдеры Internet включает 4 домена. Домен 1 содержит названия провайдеров, домен 2 – почасовую оплату, домен 3 – предлагаемую скорость соединения, домен 4 – адреса Web-сайтов.
Название провайдера | Почасовая оплата | Скорость | Web-сайт |
Демос | 44,0 | www.demos.ru | |
Портал | 38,0 | www.portal.ru | |
Гласнет | 46,0 | www.glasnet.ru |
Отношение Провайдеры Internet содержит 3 кортежа, каждый из которых состоит из 4-х элементов, выбираемых из соответствующего домена. Каждому кортежу соответствует строка таблицы.
Схема отношения (заголовок отношения) представляет собой список имен атрибутов. Например, для приведенного примера схема отношения имеет вид ПРОВАЙДЕРЫ INTERNET(Название Провайдера, Почасовая Оплата, Скорость, Web-Сайт). Множество собственно кортежей отношения часто называютсодержимым (телом) отношения.
Каждое отношение имеет минимальный набор атрибутов, по значениям которых можно однозначно идентифицировать требуемый кортеж. Такой набор называется ключом. Минимальность означает, что исключение из набора любого атрибута не позволяет идентифицировать отношение по оставшимся. Каждое отношение обладает хотя бы одним возможным ключом. Любой из возможных ключей принимается за первичный ключ. Первичным ключом называется атрибут отношения, однозначно определяющий каждый из его кортежей. Например, в отношении ПРОВАЙДЕРЫ INTERNET ключевым может являться атрибут Название провайдера. Ключ может быть составным, т.е. содержать несколько атрибутов. Следует отдавать предпочтение несоставным ключам или ключам, составленным из минимального числа атрибутов.
Ключи являются важным инструментом поддержания целостности данных и служат для реализации следующих целей:
Ø исключения дублирования значений в ключевых атрибутах(остальные атрибуты в расчет не принимаются);
Ø упорядочения кортежей. Некоторые СУБД позволяют производить упорядочение по возрастанию или убыванию значений всех ключевых атрибутов, а также смешанное упорядочение (по одним – возрастание, а по другим – убывание);
Ø ускорения работы с кортежами отношения;
Ø организации связывания таблиц.
База данных содержит несколько таблиц. Иногда одни и те же имена атрибутов используются в разных таблицах. Пусть в отношении R1 имеется неключевой атрибут А, значения которого являются значениями ключевого атрибута В другого отношения R2. Тогда говорят, что атрибут А отношения R1 является внешним ключом.Т.е. внешний ключ представляет набор атрибутов отношения, значения которых являются одновременно значениями первичного ключа другого отношения.Внешний ключ, ссылающийся на свою собственную реляционную таблицу, называется рекурсивным внешним ключом. С помощью внешних ключей устанавливаются связи между отношениями.
Например, имеются следующие отношения КЛИЕНТЫ (Код клиента, Название клиента, Адрес клиента) и ЗАКАЗЫ (Номер заказа, Код клиента, Количество товара). Если определить атрибут Код клиента в отношении КЛИЕНТЫ как первичный ключ, то в отношении ЗАКАЗЫ этот атрибут будет являться внешним ключом. Если каждый клиент может разместить только один заказ, то говорят, что таблицы связаны соотношением "один-к-одному". Если же каждый клиент может разместить любое количество заказов (в том числе и ни одного), то таблицы связаны соотношением "один-ко-многим". Таблица КЛИЕНТЫ в этом контексте называется основной, таблица заказы – дополнительной. Существуют типы связей "многие-ко-многим" и "многие-к-одному". Подробнее типы связей рассмотрены в главе 4.
Список, в котором указываются имена реляционных таблиц с перечислением их атрибутов (первичные ключи подчеркнуты) и определений внешних ключей называется реляционной схемой базы данных.
Для пользователей информационной системы является важным, чтобы база данных отражала предметную область однозначно и непротиворечиво. Если она обладает такими свойствами, то говорят, что БД удовлетворяет условию целостности. Чтобы добиться выполнения этого условия, на БД накладывают некоторые ограничения, называемые ограничениями целостности. Выделяют два основных типа ограничений: целостность сущностей и ссылочная целостность.
Кортежи реляционной таблицы представляют в модели элементы конкретных объектов реального мира – сущностей. Ограничение первого типа состоит в том, что любой кортеж любого отношения должен отличаться от любого другого кортежа этого отношения, т. е. любое отношение должно обладать первичным ключом. Это требование автоматически удовлетворяется, если в системе не нарушаются базовые свойства отношений. Первичный ключ определяет каждый кортеж, а следовательно, каждый элемент сущности. Для работы с данными каждого кортежа необходимо знать значение ключа. Таким образом, элемент не должен записываться в базу данных до тех пор, пока не определены значения его ключевых атрибутов. Т. е. никакой ключевой атрибут любой строки не должен быть пустым.
Внешние ключи служат для обеспечения целостности данных, называемое ссылочной целостностью. Это означает, что значение внешнего ключа должно быть либо пустым, либо равным одному из текущих значений первичного ключа другой таблицы, иначе каждому значению внешнего ключа должны соответствовать строки в связываемых отношениях. Для нашего примера это означает, что если в отношении ЗАКАЗЫ указан Код клиента, то этот клиент должен существовать.
Ограничения целостности должны поддерживаться СУБД. Для соблюдения целостности сущностей достаточно гарантировать отсутствие в отношении кортежей с одним и тем же значением первичного ключа. Со ссылочной целостностью значительно сложнее. Необходимо следить за тем, чтобы не появлялись некорректные значения внешних ключей при обновлении отношений (например, заказы несуществующих клиентов). При удалении кортежа существует три подхода, позволяющие поддерживать ссылочную целостность:
Ø запрещается производить удаление кортежа, на который существуют ссылки (либо сначала удалить ссылающиеся кортежи, либо изменить значения их внешнего ключа);
Ø при удалении кортежа, на который имеются ссылки, во всех ссылающихся кортежах значение внешнего ключа становится неопределенным;
Ø при удалении кортежа из отношения, на которое ведется ссылка, из ссылающегося отношения автоматически удаляются все ссылающиеся кортежи (каскадное удаление).
Большинство современных СУБД способны контролировать соблюдение правила ссылочной целостности. Для этой цели используются различные объекты баз данных (ссылочные ограничения и правила, триггеры и др.).
Уточним еще раз условия, которым должны удовлетворять данные в реляционных таблицах:
Ø все строки таблицы должны быть уникальны, т. е. не может быть в таблице двух одинаковых строк;
Ø имена столбцов таблицы должны быть различны, а значения их атомарными;
Ø все строки одной таблицы должны иметь одну структуру,соответствующуюименам и типам столбцов;
Ø последовательность размещения строк и столбцов в таблице является несущественной.
База данных включает одну или несколько таблиц, объединенных смысловым содержанием, а также процедурами контроля целостности и обработки информации. Помимо таблиц, база данных содержит еще и другие объекты: экранные формы, отчеты, прикладные программы, работающие с информацией базы данных. Кроме того база данных хранит словарь данных (метаданные – "данные о данных").
3.3.2. Реляционная алгебра
В предыдущем разделе мы рассмотрели два аспекта реляционной модели: структуру данных и целостность данных. Третьим, наиболее важным аспектом реляционной модели, являются предложенные Е.Ф. Коддом реляционные языки обработки данных: реляционная алгебра и реляционное исчисление.
И реляционная алгебра и реляционное исчисление являются теоретическими языками. Выражения реляционной алгебры и формулы реляционного исчисления выполняются над отношениями реляционных БД, т.е. операнды и результаты всех действий являются отношениями. Языки реляционной алгебры являются процедурными, так как отношение, являющееся результатом запроса к реляционной БД, вычисляется при пошаговом выполнении последовательности реляционных операторов, применяемым к отношениям. Операторы состоят из операндов, в роли которых выступают отношения, и реляционных операций. Результатом реляционной операции является отношение.
Языки исчислений, в отличие от реляционной алгебры, являются непроцедурными (описательными, или декларативными) и позволяют выражать запросы с помощью предиката первого порядка (высказывания в виде функции), которому должны удовлетворять кортежи или домены отношений. Запрос к БД, выполненный с использованием подобного языка, содержит лишь информацию о желаемом результате. Для этих языков характерно наличие наборов правил для записи запросов. Непроцедурные языки формулируют, что нужно делать, а не как этого добиться.
Механизмы реляционной алгебры и реляционного исчисления эквивалентны. Это означает, что для любого допустимого выражения реляционной алгебры можно построить эквивалентную (производящую такой же результат) формулу реляционного исчисления и наоборот.
Основные операции реляционной алгебры, предложенные Коддом, следующие: объединение, разность (вычитание), пересечение, декартово (прямое) произведение (или произведение), выборка (селекция, ограничение), проекция, деление и соединение.
К. Дж. Дейт расширил этот набор, включив операции: переименования атрибутов, образования новых вычисляемых атрибутов, вычисления итоговых функций, построения сложных алгебраических выражений, присвоения, сравнения и т. д.
Операции реляционной алгебры Кодда можно разделить на две группы: множественные (объединение, разность, пересечение и произведение) и специальные реляционные (проекция, выборка, деление и соединение).
Операции реляционной алгебры могут выполняться над одним отношением (унарная операция) или над двумя отношениями (бинарная операция). При выполнении бинарной операции отношения, участвующие в операциях, должны быть совместимы по структуре. Для этого, во-первых, отношения должны иметь одинаковое количество атрибутов. Во-вторых, атрибуты должны иметь одинаковые имена. В-третьих, атрибуты должны быть определены на одном домене. Структура результирующего отношения по определенным правилам наследует свойства структур исходных отношений. В большинстве рассматриваемых бинарных реляционных операций будем считать, что заголовки исходных отношений идентичны. Некоторые отношения не являются совместимыми по структуре, но становятся таковыми после переименования атрибутов. Операция переименования рассмотрена далее.
В нашем пособии мы рассмотрим операции реляционной алгебры, следуя подходу, предложенному К. Дж. Дейтом в [10].
В качестве примера воспользуемся базой данных поставщиков и тканей. В таблице S (поставщики) находятся сведения о поставщиках тканей: код поставщика, название, рейтинг, город расположения поставщика В качестве первичного ключа таблицы выбран код поставщика S#. Таблица M (материалы)содержит сведения о поставляемых тканях: код материала; наименование материала, тип материала, поверхностная плотность материала (MS), название города, где производится этот материал. Первичным ключом этой таблицы является М# (код материала). Последняя таблица SM (поставки) содержит сведения о поставках тканей, осуществляемых поставщиками, и их количестве. Например, поставщик S1 поставляет ткани M1, M2 и др., поставщик S4 – ткань M4 и т.д. Предполагается, что в одно и то же время не может быть более, чем одной поставки для одного поставщика и для одной ткани. Поэтому в качестве первичного ключа этой таблицы можно выбрать составной ключ S#М#, представляющий уникальную комбинацию для каждой поставки с точки зрения набора текущих поставок в таблице. Каждое из полей S# и М# таблицы SM в отдельности является внешним ключом по отношению к таблице S и M соответственно. Можно также отметить, что данные в табл. 2–4 приведены неполные и упрощенные, реальная база данных содержит значительно больше объектов и сведений.
Таблица 2
Поставщики
S# | Поставщик | Рейтинг | Город_П |
S1 | ООО "Росмануфактура" | Москва | |
S2 | ООО "Сибтекстиль" | Тюмень | |
S3 | ТД "Ивановские ткани" | Иваново | |
S4 | ЧП Федоров А.К. | Москва | |
S5 | ООО "Андромеда" | Омск |
Таблица 3
Материалы
М# | Наименование материала | Тип | MS | Город_M |
M1 | Ткань пальтовая "Ассоль" | п/ш | Москва | |
M2 | Сукно костюмное "Снежинка" | ч/ш | Омск | |
M3 | Ткань пальтовая-мохер "День" | п/ш | Улан-Удэ | |
M4 | Ткань костюмная "Вечер" | п/э | Тюмень | |
M5 | Ткань костюмно-платьевая "Искра" | п/э | Тюмень | |
M6 | Драп пальтовый "Бриз" | ч/ш | Москва |
Таблица 4
Поставки
S# | М# | Количество |
S1 | M1 | |
S1 | M2 | |
S1 | M3 | |
S1 | M4 | |
S1 | M5 | |
S1 | M6 | |
S2 | M1 | |
S2 | M2 | |
S3 | M2 | |
S4 | M2 | |
S4 | M4 | |
S4 | M5 |
Операции реляционной алгебры
Объединением двух совместимых отношений R1 и R2 одинаковой размерности (R1 UNION R2) является отношение R, содержащее все кортежи, которые принадлежат исходным отношениям (за исключением повторяющихся).
Пример 3.1. Объединение отношений
Пусть отношением R1 будет множество поставщиков из Москвы, а отношением R2 – множество поставщиков, которые поставляют материал M1. Тогда отношение R обозначает поставщиков, находящихся в Москве, или поставщиков, поставляющих материал M1, либо тех и других (рис. 13).
Вычитанием совместимых отношений R1 и R2 одинаковой размерности (R1 MINUS R2) является отношение, тело которого состоит из множества всех кортежей, принадлежащих отношению R1, но не принадлежащих отношению R2.
Для тех же отношений R1 и R2 из предыдущего примера отношение R будет представлять собой множество поставщиков, находящихся в Москве, но не поставляющих материал M1 (рис. 14).
Можно заметить что результат операции вычитания зависит от порядка следования операндов, т. е. R1 MINUS R2 и R2 MINUS R1 – не одно и то же.
Пересечением двух совместимых отношений R1 и R2 одинаковой размерности (R1 INTERSECT R2) является отношение R с телом, включающим в себя кортежи, одновременно принадлежащие обоим отношениям.
Для отношений R1 и R2 результирующее отношение R будет означать всех поставщиков из Москвы, поставляющих материал M1. Тело отношения R состоит из единственного элемента (рис. 15).
Произведением отношения R1 степени k1 (степень отношения – количество атрибутов в отношении) и отношения R2 степени k2 (R1 ТIМЕS R2), которые не имеют одинаковых имен атрибутов, является такое отношение R степени (k1+k2), заголовок которого представляет сцепление заголовков отношений R1 и R2, а тело – имеет кортежи, такие, что первые k1 элементов кортежей принадлежат множеству R1, а последние k2 элементов – множеству R2. Т. е. можно отметить, что произведение возвращает отношение, содержащее всевозможные кортежи, которые являются сочетанием двух кортежей, принадлежащих соответственно двум определенным отношениям.
При необходимости получить произведение двух отношений, имеющих одинаковые имена одного или нескольких атрибутов, применяется операция переименования RENAME.
Пример 3.2. Произведение отношений
Отношение R1 представляет множество номеров всех текущих поставщиков {S1, S2, S3, S4, S5}, а отношение R2 – множество номеров всех материалов {M1, M2, M3, M4, M5, M6}. Результат операции – множество пар типа "поставщик-материал", т.е. {(S1, M1), (S1, M2), (S1, M3)…(S5, M6)}.
Можно заметить, что на практике явное использование произведения требуется только для сложных запросов.
Выборка возвращает отношение, содержащее все кортежи из определенного отношения, которые удовлетворяют определенным условиям. Выборка (R WHERE f) отношения R по формуле f представляет собой новое отношение с заголовком отношения R и телом, состоящим из таких кортежей отношения R, которые удовлетворяют истинности логического выражения, заданного формулой f.
Для записи формулы f используются имена атрибутов, константы, логические операции (AND – И, OR – ИЛИ, NOT – НЕ), операции отношения между величинами и скобки.
Пример 3.3. Выборка
1. Логическое выражение: M WHERE MS <400 (рис. 16). Результирующее отношение содержит кортежи таблицы М, содержащие материалы, поверхностная плотность которых меньше 400.
2. Логическое выражение: SM WHERE S# = "S1" АND М# = "M1" (рис. 17). Результирующее отношение содержит кортеж таблицы SM, определяющий поставку поставщиком S1 материала M1.
Проекция возвращает отношение, содержащее все кортежи определенного отношения после исключения из него некоторых атрибутов.
Проекция отношения R на атрибуты X, У,..., Z (R [X, Y,..., Z]), где множество (X, У,..., Z} является подмножеством полного списка атрибутов заголовка отношения R, представляет собой отношение с заголовком X, Y,..., Z и телом, содержащим кортежи отношения R, за исключением повторяющихся кортежей. Повторение одинаковых атрибутов в списке X, Y,..., Z запрещается.
Операция проекции допускает следующие дополнительные варианты записи.
1. Отсутствие списка атрибутов подразумевает указание всех атрибутов (операция тождественной проекции);
2. Выражение вида R[ ] означает пустую проекцию, результатом которой является пустое множество;
3. Операция проекции может применяться к произвольному отношению, в том числе и к результату выборки.
Пример 3.4. Проекция
1. Результат проекции отношения M на атрибуты Тип, Город_М (M[Тип, Город_М]) представлен на рис. 18.
2. Результат проекции ((S WHERE Город_П="Москва")[S#, Город_П]) (рис. 19).
Деление для двух отношений (бинарного и унарного), возвращает отношение, содержащее все значения одного атрибута бинарного отношения, которое соответствует (в другом атрибуте) всем значениям в унарном отношении.
Результатомделения отношения R1 с атрибутами А и В на отношение R2 с атрибутом В (R1 DIVIDEBY R2), где А и В простые или составные атрибуты, причем атрибут В – общий атрибут, определенный на одном и том же домене (множестве доменов составного атрибута), является отношение R с заголовком А и телом, состоящим из кортежей r таких, что в отношении R1 имеются кортежи (r, s), причем множество значений s включает множество значений атрибута В отношения R2.
Пример 3.5. Деление отношений
R1 – проекция SM[S#, М#], R2 – отношение с заголовком М# и телом M2, M4. Результатом будет отношение R с заголовком S# и телом S1, S4 (рис. 20).
Соединение возвращает отношение, кортежи которого – это сочетание двух кортежей, имеющих общее значения для одного или нескольких общих атрибутов этих двух отношений. Операция соединения имеет несколько разновидностей. Наиболее важным является естественное соединение.
Операция естественного соединения (операция JOIN) применяется к двум отношениям, имеющим общий атрибут. Этот атрибут в отношениях имеет одно и то же имя и определен на одном и том же домене.
Пусть отношения R1 и R2 имеют заголовки {X1, X2,… ,XM, Y1,Y2,..,YN} и {Y1,Y2,..,YN, Z1, Z2, ZP} соответственно; т.е. атрибуты Y1,Y2,..,YN – общие атрибуты для двух отношений. Можно рассматривать выражения { X1, X2,… ,XM }, { Y1,Y2,..,YN }, { Z1, Z2, ZP } как три составных атрибута X, Y, Z соответственно. Тогда естественным соединением отношений R1 и R2 (R1 JOIN R2) является отношение с заголовком {X, Y, Z} и телом, содержащим множество всех кортежей таких, для которых в отношении R1 значение атрибута X равно x, атрибута Y равно y, в отношении R2 значение атрибута Y равно y, значение атрибута Z равно z.
Допустим, что атрибуты Город_П и Город_М определены на одном и том же домене: множестве названий городов. Имя этого домена может быть Город. Результат естественного соединения (S JOIN M) приведен на рис. 21.
Соединение Сf(R1, R2) отношений R1 и R2 по условию, заданному формулой f (q – соединение), представляет собой отношение R, которое можно получить путем произведения отношений R1 и R2 с последующим применением к результату операции выборки по формуле f. Правила записи формулы f такие же, как и для операции выборки.
Другими словами, соединением отношения R1 по атрибуту А с отношением R2 по атрибуту В (отношения не имеют общих имен атрибутов) является результат выполнения операции вида:
(R1 Т1МЕS R2) WHERE А Q В,
где Q – логическое выражение над атрибутами, определенными на одном (нескольких – для составного атрибута) домене.
Пример 3.6. q-соединение
Необходимо найти соединение отношений S и P по атрибутам Город_П и Город_М соответственно, причем кортежи результирующего отношения должны удовлетворять отношению "больше".
(S TIMES M) WHERE Город_П > Город_М.Результат операции q-соединения показан в табл. 5.
Таблица 5
Результат операции соединения
S# | Поставщик | Рейтинг | Город_П | М# | Наиме-нование материала | Тип | MS | Город_М |
S2 | ООО "Сиб-текстиль" | Тю-мень | M1 | Ткань пальтовая "Ассоль" | п/ш | Москва | ||
S2 | ООО "Сиб-текстиль" | Тю-мень | M2 | Сукно "Снежинка" | ч/ш | Омск | ||
S2 | ООО "Сиб-текстиль" | Тю-мень | M6 | Драп пальтовый "Бриз" | ч/ш | Москва | ||
S5 | ООО "Андро-меда" | Омск | M1 | Ткань пальтовая "Ассоль" | п/ш | Москва | ||
S5 | ООО "Андро-меда" | Омск | M6 | Драп пальтовый "Бриз" | ч/ш | Москва |
При рассмотрении операций реляционной алгебры К. Дж. Дейтом вводятся дополнительные операторы: переименования, расширения, подведения итогов, обновления [10].
Операторпереименования позволяет изменить имя атрибута отношения и имеет следующий синтаксис:
<отношение> RENAME <исходное имя атрибута>
АS <новое имя атрибута>,
где <отношение> задается именем отношения либо выражением реляционной алгебры. В последнем случае выражение заключают в круглые скобки.
Например, S RENAME Город_П AS
Город_размещения_Поставщика
Допустим, необходимо изменить несколько имен атрибутов. Для такого случая Дейт вводит оператор множественного переименования, синтаксис которого приведен ниже:
<отн.> RENAME <исх_имя_атр.1> АS <нов_имя_атр.1>,
<исх_имя_атр.2> АS <нов_имя_атр.2>,...,
<исх_имя_атр.N> АS <нов_имя_атр.N>.
Операторрасширения позволяет добавить в отношение дополнительный атрибут, значения которого вычисляются посредством некоторых скалярных вычислений. Оператор расширения имеет вид:
EXTEND <отношение> АDD <выражение>АS<нов_атрибут>,
где к исходному отношению добавляется (ключевое слово АDD) новый атрибут с именем <нов_атрибут>, значения которого подсчитываются по правилам, заданным <выражением>. Исходное отношение может быть задано именем отношения или с помощью выражения реляционной алгебры, заключенного в круглые скобки. При этом имя нового атрибута не должно входить в заголовок исходного отношения и не может использоваться в <выражении>.
Например, EXTEND S ADD 'Поставщик' AS SNAME.
Приведенное выражение дополняет отношение S столбцом SNAME, значениями которого является символьная константа 'Поставщик'.
Помимо обычных арифметических операций и операций сравнения в выражении можно использовать итоговые функции, такие как, COUNT (количество), SUM (сумма), AVG (среднее), МАХ, МIN.
Оператор множественного расширения имеет следующую синтаксическую конструкцию:
EXTEND <отношение> АDD <выр_1> АS <атр_1>,
<выр_2> АS <атр_2>,...,
<выр_N>АS <атр_N>.
Операцияподведения итогов SUMMARIZE выполняет "вертикальные" или групповые вычисления и имеет следующий формат:
SUMMARIZE <отношение> ВY (<список атрибутов>) АDD <выражение> АS <новый атри6ут>,
где исходное отношение задается именем отношения либо заключенным в круглые скобки выражением реляционной алгебры, <список атрибутов> представляет собой разделенные запятыми имена атрибутов исходного отношения А1, А2,..., АN, <выражение> – это скалярное выражение, аналогичное выражению операции EXTEND, а <новый атрибут> – имя формируемого атрибута. В списке атрибутов и в выражении не должно использоваться имя нового атрибута.
Результатом операции SUMMARIZE является отношение R с заголовком, состоящим из атрибутов списка, расширенного новым атрибутом. Для получения тела отношения R сначала выполняется проецирование (назовем проекцию R1) исходного отношения на атрибуты А1, А2,..., АN , после чего каждый кортеж проекции расширяется новым (N+1)-матрибутом. Поскольку проецирование, как правило, приводит к сокращению количества кортежей по отношению к исходному отношению (удаляются одинаковые кортежи), то можно считать, что происходит своеобразное группирование кортежей исходного отношения: одному кортежу отношения R1 соответствует один или более (если было дублирование при проецировании) кортежей исходного отношения. Значение (N+1)-го атрибута каждого кортежа отношения R формируется путем вычисления выражения над соответствующей этому кортежу группой кортежей исходного отношения.
Пример 3.7. Подведение итогов
Пусть требуется вычислить количество поставок по каждому из поставщиков: