Уявлення

Як зазначалося в розділі 3, уявлення в реляційної моделі, по суті, є іменованих виразом реляційної алгебри (або конструкцією, еквівалентної висловом реляційної алгебри) Нижче наведено приклад на мові Tutorial D

VAR GOOD_SUPPLIER VIEW

( S WHERE STATUS &gt 15 ) { S#, STATUS, CITY }

При виконанні даного оператора вираз реляційної алгебри (яке називається виразом, визначальним подання) не обчислюється, а просто запамятовується системою за допомогою його записи в каталог бази даних під вказаним імям, GOOD_SUPPLIER Проте, з боку користувача це виглядає так, як ніби в базі даних існує реальна змінна відносини GOOD_SUPPLIER Із власними кортежами і атрибутами, показаними в незатененние частині рис 101 (мається на увазі, звичайно, постійно використовується в цій книзі приклад значень даних) Іншими словами, імя GOOD_SUPPLIERS позначає похідну (і віртуальну) змінну відносини Її значенням в будь-який момент є ставлення, яке було б отримано в якості результату, якби вираз, що визначає уявлення, було дійсно обчислено в даний момент

Рис 101 Подання GOOD_SUPPLIER як заданий фрагмент базової змінної відносини S (незатененние частині таблиці)

У розділі 3 було також показано, що будь-яке уявлення, таке як GOOD_SUPPLIER, в деякому сенсі можна вважати просто вікном для перегляду даних Будь-які зміни, що вносяться у вихідну базову таблицю, будуть автоматично і миттєво відображатися в поданні (як у вікні), звичайно, якщо вони потраплять в область, охоплену даними поданням І навпаки, всі зміни, що вносяться до подання, будуть автоматично переноситися в дані вихідної базової таблиці, в результаті чого стануть відімимі1 і в самому поданні

У реальній ситуації багато користувачів можуть навіть не припускати, що GOOD_SUPPLIER – це подання Одні користувачі можуть знати про це, а також про те, що існує реальна змінна відносини S, тоді як інші будуть щиро вірити, що GOOD_SUPPLIERS – справжня змінна відносини Але, в будь-якому випадку, найважливіше те, що з поданням можна працювати так, як ніби воно дійсно є справжньої змінної відносини Наведемо приклад запиту до подання

GOOD_SUPPLIER

GOOD_SUPPLIER WHERE  CITY  ≠   London    

Нижче показаний результат виконання цього запиту при використанні даних, наведених на рис 101

Цей запит, безумовно, подібний до звичайного запиту до звичайної реальної змінної відносини Як зазначалося в розділі 3, система обробляє запити такого типу шляхом їх перетворення в запити до базової змінної відносини (або до декількох базових змінним відносини) Подібне перетворення здійснюється за допомогою заміни у визначенні запиту всіх входжень імені подання тим виразом, який його визначає У нашому прикладі після виконання процедури підстановки буде отриманий наступний запит

( ( S WHERE STATUS &gt 15 ) { &quotS#, STATUS, CITY } ) WHERE CITY Ф London

1 Фактично можуть виникати ситуації, при яких ці зміни виявляться невидимими в SQL

Ця тема розглядається при обговоренні конструкції WITH CHECK OPTION в розділі 106

Цілком очевидно, що даний вираз можна легко перетворити в більш просту форму

( S WHERE STATUS &gt 15 AND CITY London )

{ S#, STATUS, CITY }

Результат обчислення останнього виразу збігається з наведеним вище результатом запиту до вистави

У цьому звязку необхідно зазначити, що процес підстановки (тобто процес заміни імені уявлення визначальним його виразом) виконується коректно внаслідок реляційного властивості замкнутості Властивість замкнутості (крім усього іншого) означає, що в будь-якому місці вираження, де дозволено використовувати імя змінної відносини R, замість нього можна застосовувати деякий реляционное вираз довільної складності (за тієї умови, що в результаті обчислення цього виразу буде отримано ставлення, має такий же тип, як і R) Іншими словами, можливість використовувати уявлення зявляється саме завдяки тому, що в реляційної алгебри безліч всіх відносин є замкнутим, і це ще один приклад,

підтверджуючий фундаментальне значення реляційного властивості замкнутості

Операції поновлення на уявленнях виконуються аналогічним чином

Наприклад, розглянемо наступну операцію

UPDATE GOOD_SUPPLIER WHERE CITY = Paris { STATUS := STATUS + 10

}

При обробці вона буде приведена до наступного вигляду

UPDATE S WHERE STATUS &gt 15 AND CITY = Paris { STATUS := STATUS +10 }

;

При використанні операцій INSERT і DELETE застосовується той же підхід .

Додаткові приклади

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

1&nbsp&nbsp&nbsp   VAR  REDPART VIEW

(Р WHERE COLOR = COLOR (Red)) {ALL BUT COLOR} RENAME WEIGHT AS WT

Подання REDPART – це проекція скорочення (в якій передбачено також перейменування атрибутів), що застосовується до змінної відносини з даними про деталі У ньому присутні атрибути Р #, PNAME, WT і CITY, і поміщаються тільки ті кортежі, які описують деталі червоного кольору

2&nbsp&nbsp&nbsp VAR  PQ  VIEW

SUMMARIZE SP PER P { P# } ADD SUM ( QTY ) AS TOTQTY

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

узагальнення даних вихідної змінної відносини

3&nbsp&nbsp&nbsp VAR  CITY_PAIR VIEW

( ( S RENAME CITY AS SCITY ) JOIN SP JOIN

( P RENAME CITY AS PCITY ) ) { SCITY, PCITY }

У поданні CITY_PAIR виконується зєднання таблиць з даними про постачальників, деталях і постачаннях за номерами постачальників і номерам деталей, а потім проекція результатів по стовпцях SNAME і PNAME Говорячи неформально, в поданні CITY_PAIR пара імен міст (х, у) зявляється в результаті тоді і тільки тоді, коли постачальник, що знаходиться в місті х, поставляє деталі, які зберігаються в місті у Наприклад, припустимо, що постачальник si поставляє деталі Р1 постачальник S1 знаходиться в Лондоні і деталі Р1 зберігаються в Лондоні в цьому випадку в поданні зявляється пара (London, London)

4&nbsp&nbsp&nbsp&nbsp&nbsp VAR HEAVY_REDPART VIEW

REDPART WHERE WT &gt WEIGHT ( 120 )

У цьому прикладі показано, як одне подання визначається через інше

Визначення та видалення уявлень

Синтаксис оператора визначення подання на мові Tutorial D виглядає наступним чином

VAR &ltrelvar name&gt VIEW &ltrelation exp&gt &ltcandidate key def list&gt

У наведеному виразі параметр із зазначенням списку потенційних ключів

&ltcandidate key def list&gt може бути порожнім (це рівнозначно тому, що може бути опущена відповідна специфікація), оскільки система повинна володіти

здатністю визначити потенційні ключі уявлення самостійно [33]

Наприклад, у разі подання GOOD_SUPPLIER системі має бути відомо, що єдиним потенційним ключем, про який може йти мова, є ключ {S #}, успадкований від вихідної базової змінної відносини S

Як вже зазначалося (використовуючи термінологію ANSI / SPARC, що обговорювалася в розділі 2), визначення уявлень обєднують в собі функції зовнішньої схеми і функції відображення рівня зовнішній-концептуальний, оскільки вони описують і сам зовнішній обєкт (тобто подання), і спосіб його відображення на концептуальний рівень (тобто на одну або кілька вихідних базових змінних відносини)

Примітка Деякі визначення уявлень ставлять не відображення рівня зовнішній-концептуальний, а відображення рівня Зовнішній-зовнішній.Подання HEAVY_REDPART з попереднього розділу відноситься саме до такої категорії уявлень

Синтаксис оператора видалення подання має наступний вигляд

DROP VAR &ltrelvar name&gt   

Тут параметр name&gt визначає імя видаляється подання У главі 6 було висунуто припущення, що спроба видалити базову змінну відносини повинна завершитися невдачею, якщо існує хоча б одне визначення подання, посилається на удаляемую змінну відносини Аналогічно, слід вважати, що видалення уявлення, на який є посилання у визначенні якого іншого подання, також призведе до невдалого завершення Інший варіант полягає в тому, що можна доповнити синтаксис оператора визначення подання (за аналогією зі посилальними обмеженнями), включивши в нього, крім неявної опції RESTRICT, і опцію CASCADE Опція RESTRICT, застосовувана за замовчуванням, означає,

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

Примітка У стандартній версії мови SQL така опція підтримується, але її визначення повинне існувати в оператор видалення DROP, а не в оператор визначення уявлення Крім того, в операторі DROP не передбачено використання того чи іншого значення опції за умовчанням в ньому необхідно явно вказувати одне із значень опції (див розділ 106)

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


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

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*