Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к экзамену по Б_Д.doc
Скачиваний:
4
Добавлен:
09.08.2019
Размер:
614.91 Кб
Скачать
  1. Унарные и бинарные операции реляционной алгебры.

Унарные операции:

Бинарные операции:

1. Выборка Смысл операции в том, что выбираются строчки, которые подходят по условию F. Попробуем из таблицы «Фрукты» выбрать все яблоки:

2. Проекция

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

3. Произведение

Произведение – это сцепление строчек, то есть объектов таблицы, по принципу каждый с каждым. Безучастных не бывает :) Представим, что покупатели так и не смогли выбрать что-то конкретное и заказали какое-то количество каждого сорта фруктов:

4. Соединение

Соединение происходит по общему столбцу, соответственно поставленному условию. Соединим таблицу «Фрукты» с содержимым заказов при условии, что идентификационный номер фрукта в списке больше его номера в заказе. Получится полная бессмыслица конечно… :wacko: Короче смотрим:

    Несмотря на абсурдность такого соединения, можно сказать, что если мы заказали фрукты с определенным номером, то получим в соответствие все фрукты что есть в списке с большим номером. 5. Эквисоединение

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

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

Зачем дублировать значения, когда можно их не дублировать :) Поэтому смотрим следующую операцию: 6. Естественное соединение

    Выбрасываем из эквисоединения повторяющийся столбец и готово:

7. Полусоединение

    Из двух таблиц полусоединение выделяет только те строчки первой таблицы, которые могли бы соединиться со строчками второй таблицы. Возьмем сотрудников. Они любят работать, но еще больше любят получать зарплату :whistle: Зарплата хранится в отдельной таблице, доступа к которой у них нет. А посмотреть то хочется!! :yes: И тогда хитрые сотрудники решают воспользоваться полусоединением, то есть выбрать себя в том случае, если их id соединился со строчкой в таблице зарплаты:

Итог – Сидорову не повезло :D  8. Левое внешнее соединение

    Соединяя две таблицы левым внешним соединением, мы получим абсолютно все строчки из левой таблицы и только те, что соединились из правой. Если соединения не нашлось, напротив строки будет NULL, то есть пустота. Посмотрим, кто из сотрудников не получил зарплату?? :) 

9. Правое внешнее соединение

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

Из соединения видно, что зарплату начислили сотруднику, который в фирму еще не устроился. Вот так легко найти ошибки при заполнении :yes:  Про операции объединения, пересечения, разности и деления расскажу в следующей теме, а сейчас несколько замечаний: Замечание 1: Объединение и соединение – разные вещи. Соединение происходит по одному общему столбцу, а объединение предполагает, что таблицы одинаковые по структуре (то есть все столбцы однотипные). Если в таблицах по 3 столбца, то при соединении мы получим 6 столбцов (в естественном соединении – 5), а при объединении их так и останется три. Замечание 2: В MS Access допущена довольно серьёзная ошибка. Если посмотреть свойства связи при соединении двух таблиц, то там написано «параметры объединения». НЕ ВЕРЬТЕ ЭТОМУ!! :no: Это параметры соединения :yes: А вообще, тому, как на практике реализуются все приведенные операции, будет посвящена отдельная тема.

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

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

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

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

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

12. Разность

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

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

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

Просто отличная база получилась :D Теперь поделим всех на рыжих и толстых :whistle: 

В результате получим:

Алгоритм выполнения такой операции можно описать тремя формулами:

Здесь С = {Код_рольз., Ник, Пол, Возраст}, то есть разность атрибутов таблиц Пользователи и Характеристики. Все очень просто :rolleys: 

  1. Совместимость отношения по соединению и объединению.

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

Соединение происходит по общему столбцу, соответственно поставленному условию.

  1. Определение операций выборки и проекции

См. вопрос 16

  1. Декартово произведение. Тета, по эквивалентности и естественное соединения.

соединения - это подмножества декартова произведения. Так как декартово произведение n таблиц - это таблица, содержащая все возможные строки r, такие, что r является сцеплением какой-либо строки из первой таблицы, строки из второй таблицы, ... и строки из n-й таблицы (а мы уже научились выделять с помощью SELECT любое подмножество реляционной таблицы), то осталось лишь выяснить, можно ли с помощью SELECT получить декартово произведение. Для получения декартова произведения нескольких таблиц надо указать во фразе FROM перечень перемножаемых таблиц, а во фразе SELECT – все их столбцы.

Так, для получения декартова произведения Вид_блюд и Трапезы надо выдать запрос

SELECT Вид_блюд.*, Трапезы.*

FROM Вид_блюд, Трапезы;

Получим таблицу, содержащую 5 х 3 = 15 строк

Операция THETA-JOIN (тета-соединение) производит конкатенацию пар кортежей при условии, что удовлетворяется некоторое заданное условие θ, налагаемое на некоторые компоненты этих кортежей. При вычислении этого условие для любой возможной пары кортежей вырабатывается истинностное значение F, ω или T. Мы оставляем лишь операцию соединения, конкатенирующую только такие пары кортежей, для которых при вычислении условия вырабатывается значение T и называем его TRUE THETA JOIN (тета-соединение по "истине"). Кроме того, мы вводим операцию MAYBE THETA JOIN (тета-соединение "может быть"), конкатенирующую только те пары кортежей, для которых при вычислении заданного условия вырабатывается ω.

Также см. вопрос 16