Cписок всех городов, в которых есть отделение компании, но нет объектов недвижимости, сдаваемых в аренду

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

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

• Тета-соединение (-join). Операция тета-соединения определяет отношение, которое содержит кортежи из декартового произведения отношений R и S, удовлетворяю­щие предикату F. Предикат F имеет вид R.аiS.bi, где вместо может быть указан один из операторов сравнения (<,<=, >, >=, = или ~). Как и в случае с декартовым произведением, степенью тета-соединения называется сумма степеней операндов-отношений R и S.

• Соединение по эквивалентности (equi-join). Это соединение является частным ви­дом тета-соединения. Если предикат F содержит только оператор равенства (=), то соединение называетсясоединением по эквива­лентности (equi-join).

• Естественное соединение (natural join). Естественным соединением называется соединение по эквивалентности двух отношений R и S, выполненное по всем общим атрибутам х, из ре­зультатов которого исключается по одному экземпляру каждого общего атрибута.

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

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

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

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

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

• Полусоединение (semi-join). Операция полусоединения определяет отношение, которое содержит те кортежи отношения R, которые входят в соединение отношений R и S.

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

Оператор деления.Оператор деления может быть полезен в случае запросов особого типа, которые довольно часто встречаются в приложениях баз данных. Предположим, что отноше­ние R определено на множестве атрибутов А, а отношение S – на множестве атрибу­тов В, причем В А (т.е. В является подмножеством А). Пусть С = А – В, т.е. С является множеством атрибутов отношения R, которые не являются атрибутами отношения S. Результатом оператора деления является набор кортежей отношения R, определенных на множестве атрибутов С, которые соответствуют комбинации всех кортежей отношения S.

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

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

Основные понятия реляционных баз данных. Необходимо иметь возможность уникальной идентификации каждого отдельного кортежа отношения по значениям его атрибутов. Рассмотрим терми­нологию, используемую для обозначения реляционных ключей на примере отношений Branch и Staff (табл. 14).

Таблица 14

Staff

Branch

Суперключ – атрибут или множество атрибутов, которое единственным образом (superkey) идентифицирует кортеж данного отношения.

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

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

Потенциальный ключ К для данного отношения R обладает двумя свойствами:

• уникальность. В каждом кортеже отношения R значение ключа К единст­венным образом идентифицируют этот кортеж;

• неприводимость. Никакое допустимое подмножество ключа К не обладает свойством уникальности.

Отношение может иметь несколько потенциальных ключей. Если ключ состоит из нескольких атрибутов, то он называется составным ключом. Рассмотрим отношение Branch. Конкретное значение атрибута City может определять сразу несколько отделений компании (например, в Москве может находиться два отделе­ния). Поэтому данный атрибут не может быть выбран в качестве потенциального ключа. Однако, поскольку для каждого от­деления компании задается его уникальный номер, каждое значение этого номера (атрибут Вnо) может определять не больше одного кортежа, а потому Вnо является потенциальным ключом. Аналогично, атрибуты Tel_No и Fax_No также являются потенциальными ключами этого отношения.

Обратите внимание на то, что любой конкретный набор кортежей отношения нельзя использовать для доказательства того, что некий атрибут или комбинация ат­рибутов являются потенциальным ключом. Тот факт, что в некоторый момент вре­мени не существует значений-дубликатов, совсем не означает, что их не может быть вообще. Однако наличие значений-дубликатов в конкретном существующем наборе кортежей вполне может быть использовано для демонстрации того, что некоторая комбинация атрибутов не может быть потенциальным ключом. Для идентификации потенциального ключа требуется знать смысл используемых атрибутов в “реальном мире”, только это позволит обоснованно принять решение о возможности существо­вания значений-дубликатов. Только исходя из подобной семантической информации можно гарантировать, что некоторая комбинация атрибутов является потенциаль­ным ключом отношения. Например, на основании дан­ных отношения Branch можно решить, что подходящим потенциальным ключом для отношения Staff вполне может быть атрибут LName, содержащий фамилию сотрудника. Однако, хотя в данный момент в организации имеется только один сотрудник с фамилией Смирнова, при зачислении в организацию нового сотрудника с фамилией Смирнова атрибут LName уже нельзя будет использовать в качестве потенциального ключа.

Первичный ключ – это потенциальный ключ, который выбран для уникальной идентификации кортежей внутри отношения.

Поскольку отношение не содержит кортежей-дубликатов, всегда можно уникаль­ным образом идентифицировать каждую его строку. Это значит, что отношение всегда имеет первичный ключ. В худшем случае все множество атрибутов может использо­ваться как первичный ключ, но обычно, чтобы различить кортежи, достаточно исполь­зовать несколько меньшее подмножество атрибутов. Потенциальные ключи, которые не выбраны в качестве первичного ключа, называются альтернативными ключами. Если в отношении Branch выбрать в качестве первичного ключа атрибут Bno, то альтернатив­ными ключами этого отношения будут атрибуты Tel_No и Fax_No.

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

Если некий атрибут присутствует в нескольких отношениях, то его наличие обычно отражает определенную связь между кортежами этих отношений. Например, атрибут Вnо намеренно включен в отношения Branch и Staff для установления связи между сведениями об отделениях компании и сведениями о сотрудниках, которые работают в каждом из отделений. В отношении Branch атрибут Вnо является первичным ключом, а в отношении Staff он введен для установления соответствия между сведениями о сотрудниках и сведениями о тех отделениях компании, в которых они работают. В отношении Staff атрибут Вno является внешним ключом. В таком случае говорят, что атрибут Вnо в отношении Staff ссылается на первичный ключ, т.е. на атрибут Вnо в базовом отношении Branch. Эти общие атрибуты играют важную роль в манипулировании данными.

Наши рекомендации