Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базисн_ засоби ман_пулювання реляц_йними даними.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
85.55 Кб
Скачать

2.4. Основні операції реляційної алгебри з обробки відношень

Реляційні оператори

            Рівень відповідності вимогам до реляційної БД може визначатися через ступінь підтримання реляційної алгебри.

            Реляційна алгебра визначає теоретичні способи маніпулювання вмістом таблиць за допомогою восьми реляційних операторів: SELECT (вибір), PROJECT (проекція), JOIN (з'єднання), INTERSECT (перетин), UNION (об'єднання), DIFFERENCE (різниця), PRODUCT (добуток),  DIVIDE (ділення).

            Щоб базу даних можна було вважати реляційною хоча б у найменшому ступені, її СУБД має підтримувати основні реляційні оператори SELECT (вибір), PROJECT (проекція) та  JOIN (з'єднання). Дуже мало СУБД підтримують всі вісім реляційних операторів.

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

            Оператори реляційної алгебри можна розглядати більш коректно, через їх математичні визначення, властивості та характеристики.

            З практичної точки зору для проектування БД важливо зрозуміти їх застосування, що досить легко зробити на прикладах.

 

2.5. Особливості теоретико-множинних операцій реляційної алгебри (сумісність, перейменування). Теоретико-множинні оператори

 Об'єднання (UNION)

ВизначенняОб'єднанням двох сумісних за типом відношень А та В називається відношення з тим самим заголовком, що й у відношень А та В, і тілом, що складається з кортежів, що належать або А, або В, або обом відношенням.

Синтаксис операції об'єднання: A UNION B

Об'єднання, як і будь-яке відношення, не може містити однакових кортежів. Тому, якщо деякий кортеж входить і у відношення А, і у відношення В, те в об'єднання він входить один раз.

Таким чином, оператор UNION об'єднує усі рядки з двох таблиць. Щоб оператор UNION можна було застосовувати, таблиці мають мати однакові властивості за атрибутами (стовпці та домени мають бути ідентичні). Коли одна чи більше таблиць сумісно використовують одні й ті самі стовпці та домени, говорять, що вони сумісні за об'єднанням (union-compstible) або за типом. Використовуючи термінологію, прийняту при описанні структури відношень, можна сказати, що відносини сумісні за типом, якщо вони мають ідентичні заголовки, а саме,

  • Відносини мають ту саму множину імен атрибутів, тобто для будь-якого атрибута в одному відношенні знайдеться атрибут з таким же найменуванням в іншому відношенні,

  • Атрибути з однаковими іменами визначені на тих самих доменах.

Дійсно, операція об'єднання двох відношень є просто операцією об'єднання двох множин кортежів, узятих з тіл відповідних відношень. Щоб результат був відношенням, вихідні відношення, по-перше, мають мати однакову кількість атрибутів. Щоб можна було визначити найменування атрибутів результуючого відношення, атрибути вихідних відношень мають мати однакові найменування. І, нарешті, за цих умов об'єднання кортежів утворить відношення лише тоді, коли атрибути вихідних відношень будуть визначені на однакових доменах. Сукупність цих умов визначає сумісність вихідних відношень за типом (за об'єднанням).

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

 

Оператор перейменування атрибутов має синтаксис ,

де R - відношення, а Atr1Atr2 - исходные имена атрибутов, NewAtr1NewAtr2 - нові імена атрибутів.

У результаті застосування оператора перейменування атрибутів одержуємо нове відношення, зі зміненими іменами атрибутів.

Приклад застосування оператору перейменування атрибутів наведений нижче.

Наступний оператор повертає неіменоване відношення, у якому атрибут  перейменовано на .

Ефект виконання оператору UNION для відношень сумісних за об'єднанням, наведений нижче.

Нехай дані двоє відношень А та В з інформацією про співробітників:

Табельний номер

Прізвище

Зарплата

1

Іванов

1000

2

Петров

2000

3

Сидорук

3000

Таблиця 1 Відношення A

Табельний номер

Прізвище

Зарплата

1

Іванов

1000

2

Пушняк

2500

4

Сидорук

3000

Таблиця 2 Відношення B

Об'єднання цих відношень матиме вигляд:

Табельний номер

Прізвище

Зарплата

1

Іванов

1000

2

Петров

2000

3

Сидорук

3000

2

Пушняк

2500

4

Сидорук

3000

Таблиця 3 Відношення A UNION B

Як видно з наведеного прикладу, потенційні ключі, що були у відношеннях  А та В, не успадковуються об'єднанням цих відношень. Тому, в об'єднанні відношень А та В атрибут"Табельний номер" може містити дублікати значень. Якби це було не так, і ключі успадковувалися б, то це суперечило б поняттю об'єднання як "об'єднання множин". Звичайно, об'єднання відношень А та В має, як і будь-яке відношення, потенційний ключ, наприклад, такий, що складається з всіх атрибутів.

Перетин (INTERSECT)

ВизначенняПеретином двох сумісних за типом відношень А та В називається відношення з тим же заголовком, що й у відношень А та В, і тілом, що складається з кортежів, що належать одночасно обом відношенням.

Синтаксис операції перетинання:

A INTERSECT B.

Із визначення очевидно, що при табличному представленні відношень оператор INTERSECT виводить лише рядки, які зустрічаються в обох таблицях. Таблиці мусять бути сумісними за об'єднанням. Наприклад, не можна застосувати оператор INTERSECT, якщо один з атрибутів має числовий тип, а другий – символьний.

Ефект застосування оператора INTERSECT наведений нижче.

Приклад. Для тих же відношень А та В, що й у попередньому прикладі, перетин має вигляд:

Табельний номер

Прізвище

Зарплата

1

Іванов

1000

Таблиця 4 Відношення A INTERSECT B

Здавалося б, що на відміну від операції об'єднання, потенційні ключі могли б успадковуватися перетином відношень. Однак це не так. Узагалі, ніякі реляційні оператори не передають результуючому відношенню ніяких даних про потенційні ключі. Як причину цього можна було б навести тривіальне міркування, що так виходить більш просто і симетрично - всі оператори улаштовані однаково. Насправді причина більш глибока, і полягає в тому, що потенційний ключ - семантичне поняття, що відбиває розрізнюваність об'єктів предметної області. Наявність потенційних ключів не виводиться зі структури відношення, а явно задається для кожного відношення, виходячи з його змісту. Реляційні ж оператори є формальними операціями над відношеннями і виконуються однаково, незалежно від змісту даних, що містяться у відносинах. Тому, реляційні оператори нічого не можуть "знати" про зміст даних. Трактування результату реляційних операцій - справа користувача.

Різниця (DIFFERENCE)

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

Синтаксис операції віднімання (оператору різниці):

A MINUS B.

            Тобто оператор DIFFERENCE виводить всі рядки першої таблиці, які відсутні у другій. Таблиці мусять бути сумісними за об'єднанням.

Ефект застосування оператора DIFFERENCE наведений нижче.

Приклад. Для тих же відношень А та В, що й у попередньому прикладі, різниця має вигляд:

Табельний номер

Прізвище

Зарплата

2

Петров

2000

3

Сидорук

3000

Таблиця 5 Відношення A MINUS B

Декартів добуток (добуток) PRODUCT

ВизначенняДекартовим добутком, чи просто добутком  двох відношень A(A1A2,…,An) та  B(B1B2,…,Bm) називається відношення, заголовок якого є зчепленням заголовків відношень А та В:

(A1A2,…,An,B1,B2,…,Bm)

а тіло складається з кортежів, що є зчепленням кортежів відношень А та В:

(a1a2,…,an,b1,b2,…,bm)

таких, що (a1a2,…,anА,  (b1b2,…,bmВ.

Синтаксис операції декартового добутку:

A TIMES B.

            Очевидно, що перемножувати можна будь-які два відношення, сумісність за типом при цьому не вимагається.

Потужність добутку A TIMES дорівнює добутку потужностей відношень А та В, тому що кожен кортеж відношення  А з'єднується з кожним кортежем відношення В.

            Якщо у відношеннях А та В  є атрибути з однаковими найменуваннями, то перед виконанням операції декартового добутку такі атрибути необхідно перейменувати.

            Таким чином, оператор добутку за табличного представлення відношень виводить всі можливі пари рядків з двох таблиць. Відповідно, якщо у одній таблиці буде 6 рядків, а у іншій – 3 рядки, то оператор PRODUCT видасть список з 6 х 3 = 18 рядків.

Ефект застосування оператора PRODUCT наведений нижче.

Приклад. Нехай задано два відношення А та В, що містять інформацію про постачальників та деталі, які вони постачають:

Номер постачальника

Найменування постачальника

1

Іванов

2

Петров

3

Сидорук

Таблиця 6 Відношення A (Постачальники)

Номер деталі

Найменування деталі

1

Болт

2

Гайка

3

Гвинт

Таблиця 7 Відношення B (Деталі)

Декартів добуток відношень А та В буде мати вигляд:

Номер постачальника

Найменування постачальника

Номер деталі

Найменування деталі

1

Іванов

1

Болт

1

Іванов

2

Гайка

1

Іванов

3

Гвинт

2

Петров

1

Болт

2

Петров

2

Гайка

2

Петров

3

Гвинт

3

Сидорук

1

Болт

3

Сидорук

2

Гайка

3

Сидорук

3

Гвинт

Таблиця 8 Відношення A TIMES B

 Сама по собі операція декартового добутку не дуже важлива, тому що вона не дає ніякої нової інформації, у порівнянні з вихідними відношеннями. Для реальних запитів ця операція майже ніколи не використовується. Однак операція декартового добутку важлива для виконання спеціальних реляційних операцій, про які мова йтиме нижче.