ОПЕРАЦІЇ ПОРІВНЯННЯ

Припустимо, що розглядаються два звичайних прикладу змінних Е і з з оголошеними типами, відповідно, ELLIPSE і CIRCLE, і змінної Е присвоюється поточне значення змінної З таким чином

Е: = С

У такому випадку, безумовно, очевидно, що тепер при виконанні показаної нижче операції порівняння на рівність має бути отриманий результат TRUE, І ЦЕ дійсно так і відбувається

Е = С

Загальне правило полягає в наступному Припустимо, що х і Y – довільні вирази У такому випадку операція порівняння х = Y є допустимою, якщо оголошені типи DT (X) і DT (Y) мають загальний супертіп (це вимога, безумовно задовольняється, якщо один з цих типів є супертіп іншого) В іншому випадку таке порівняння є неприпустимим (відповідна перевірка проводиться на етапі компіляції) А якщо ця операція порівняння є допустимою, вона повертає TRUE, якщо значення v (x) дорівнює значенню v (Y), і FALSE – в іншому випадку До речі, слід зазначити, що X і Y навряд чи можуть Розглядатися як рівні, якщо їх найбільш конкретні типи є різними, оскільки якщо v (X) дорівнює v (Y), то MST (X) має дорівнювати MST (Y)

Застосування операцій порівняння в реляційної алгебри

Як було описано в розділі 7, операції порівняння на рівність предусмотрени9 явно або неявно у багатьох операціях реляційної алгебри А якщо мова про супертіпа і підтипах, то виявляється, що деякі з цих операцій виявляють таку поведінку, яка може (по Принаймні, на перший погляд) здатися не зовсім зрозумілим Розглянемо відносини RX і RY, показані на рис 202 Відзначимо, що єдиний атрибут А щодо RX належить до оголошеного типу ELLIPSE, а його аналог А щодо RY належить до оголошеного типу CIRCLE Приймемо таку угоду, що значення у формі Ei на даному малюнку являють собою еліпси, які не є колами, а значення у формі Ci – це окружності Найбільш конкретні типи позначені малими літерами

Тепер розглянемо підключення відносин RX і RY, скажімо, RJ (рис 203) Очевидно, що кожне значення А в зєднанні RJ ПОВИННО обовязково належати до типу CIRCLE (оскільки будь-яке значення А щодо RX, найбільш конкретним типом якого є просто ELLIPSE, не може розглядатися як рівне будь-якому значенню А в RY) Тому можна вважати, що оголошеним типом атрибута А в зєднанні RJ

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

повинен бути CIRCLE, а не ELLIPSE Але необхідно враховувати також наведені нижче міркування

Рис 202 Відносини RX і RY

Рис 203 Зєднання RJ відносин RX і RY

Оскільки кожне з відносин, RX і RY, включає А в якості свого єдиного атрибута, то вираз RX JOIN RY зводиться до RX INTERSECT RY Тому в даному випадку правило, що стосується оголошеного типу атрибута результату для операції зєднання JOIN, повинно, очевидно, зводитися до аналогічного правилом ДЛЯ INTERSECT

У свою чергу, вираз RX INTERSECT RY логічно еквівалентно висловом RX MINUS (RX MINUS RY) Припустимо, що при цьому результатом виконання вираження, яке є другим операндом (йдеться про висловлення RX MINUS RY), є ставлення RZ Тоді має бути очевидно наступне:

а) у загальному ставлення RZ має включати деякі значення А найбільш кон кретного типу ELLIPSE і тому оголошеним типом атрибута А в отноше нді RZ повинен бути ELLIPSE

б) таким чином, первісне вираження зводиться до RX MINUS RZ, де обєк явленим типом атрибута А і в RX, і в RZ є ELLIPSE, І тому приво дит до отримання остаточного результату, в якому оголошеним типом атрибута А знову, безумовно, повинен бути ELLIPSE

▪ З цього випливає, що оголошеним типом атрибута результату для вираження RX INTERSECT RY, і тому також для вираження RX JOIN RY, повинен бути ELLIPSE, а не CIRCLE, навіть незважаючи на те (ще раз нагадуємо), що кожне значення цього атрибута повинно фактично належати до типу CIRCLE

Тепер перейдемо до опису реляційної операції, яка позначається оператором MINUS Спочатку розглянемо вираз RX MINUS RY Повинно бути очевидно, що деякі значення А в результатах цієї операції повинні належати до типу ELLIPSE, а не CIRCLE, і тому оголошений тип атрибута А в цих результатах також повинен являти собою тип ELLIPSE А що щодо вираження RY MINUS RX Очевидно, що кожне значення А в результатах цієї останньої операції повинен належати до типу CIRCLE, і тому знову можна припустити, що оголошеним типом атрибута А в цих результатах повинен бути CIRCLE, а не ELLIPSE Але слід зазначити, що вираз RX INTERSECT RY логічно еквівалентно не тільки висловом

RX MINUS (RX MINUS RY), як уже було відзначено вище, але також і вираженню RY MINUS (RY MINUS RX), з урахуванням того факту, що оголошення типу А в результатах вираження RY MINUS RX як CIRCLE призводить до протиріччя З цього випливає, що оголошеним типом атрибута результату для вираження RY MINUS RX також повинен бути ELLIPSE, а не CIRCLE, навіть незважаючи на те, що кожне значення цього атрибута повинно фактично належати до типу CIRCLE

Нарешті, розглянемо вираз RX UNION RY У даному випадку має бути очевидно, що в загальному результати будуть включати деякі значення А найбільш конкретного типу ELLIPSE, і тому оголошеним типом атрибута А в цих результатах повинен обовязково бути ELLIPSE Таким чином, оголошеним типом атрибута результату для оператора UNION також повинен бути ELLIPSE (АЛЕ В даному конкретному випадку, на відміну від випадків з використанням операторів JOIN, INTERSECT І MINUS, таке рішення вже навряд чи можна назвати таким, що суперечить здоровому глузду)

Тому може бути сформульовано загальне правило, наведене нижче

■ Припустимо, що rх і Rу відносини із загальним атрибутом А, а оголошеними типами А у відносинах rх і Rу є, відповідно, DT (АХ) І DT (Ay) Розглянемо підключення відносин rх і Rу (обовязково по атрибуту А, вживаному, принаймні, як один з атрибутів зєднання) Типи DT (Ах) і DT (Ay) повинні мати загальний супертіп т, оскільки в іншому випадку таке зєднання буде неприпустимим (Перевірка цієї умови здійснюється на етапі компіляції) Якщо подібне зєднання є допустимим, оголошеним типом А в результаті стає найбільш конкретний з усіх таких загальних супертіпа т

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

Перевірка типу

У розділі 203 наведено фрагмент коду, в якому використовуються оператори у формі IS_SQUARE, IS_CIRCLE і тд для перевірки того, чи належить задане значення до деякого зазначеного типу У даному підрозділі такі оператори розглядаються більш докладно Насамперед передбачається, що визначення деякого типу т викликає автоматичне визначення оператора з істінностним значенням в наступній формі

IS_T  (  X  )

Це вираз приймає значення TRUE, якщо вираз X належить до типу т, а в іншому випадку приймає значення FALSE Наприклад, якщо с – змінна з оголошеним типом CIRCLE, то обидва наведені нижче вирази приймають значення TRUE

IS_CIRCLE (С

) IS_ELLIPSE (

С)

Якщо ж Е – змінна з оголошеним типом ELLIPSE, а поточним найбільш конкретним типом є деякий підтип CIRCLE, то наступний вираз також приймає значення TRUE

IS_CIRCLE   (  E  )

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

R WHERE THE_R ( A ) &gt LENGTH (20)

Але обробка цього виразу закінчиться невдачею через помилку при перевірці типу на етапі компіляції, оскільки для оператора THE_R потрібно фактичний параметр типу CIRCLE, а оголошеним типом атрибута А є ELLIPSE, а не CIRCLE (Безумовно, якби ця перевірка на етапі компіляції не було виконане, то замість цього була б виявлена ​​помилка при перевірці типу на етапі прогону, як тільки зустрівся б кортеж, в якому значення А було б еліпсом, а не колом) Очевидно, що для успішного вирішення цього завдання необхідно виключити з розгляду ті кортежі, в яких значення А являє собою еліпс, ще до того, як буде зроблена сама спроба перевірити радіус А саме, така операція здійснюється, якщо використовується наведена нижче формулювання

R: IS_CIRCLE (А) WHERE THE_R (A)> LENGTH (20)

Це вираз визначено (висловлюючись неформально) як засіб отримання таких кортежів, в яких значенням А є кола з радіусом більше двох Точніше, даний вираз повертає ставлення з такими властивостями:

а) воно має такий же заголовок, як і ставлення R, за винятком того, що обєк явленим типом атрибута А в цих результатах є CIRCLE, а не ELLIPSE

б) тіло цього відношення складається тільки з таких кортежів R, в яких значення А належить до типу CIRCLE, а радіус розглянутої окружності більше двох

Іншими словами, автор пропонує використовувати новий реляційний оператор,

має наступну форму

R: IS_T (А)

Тут R-реляційне вираз, а А-атрибут відповідного ставлення (скажімо, r), позначеного цим виразом Значення всього даного виразу визначено як відношення, що має такими властивостями:

а) воно має такий же заголовок, як і ставлення r, за винятком того, що обєк явленим типом атрибута А в цих результатах є т

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

Примітка В [33] визначені узагальнені форми обох операторів, введених в даному підрозділі, наприклад, узагальнена форма оператора IS_T, який перевіряє, чи належить один операнд до такого ж типу, як і інший, а не просто перевіряє, чи належить він до деякого явно зазначеного типу

Джерело: Дейт К Дж, Введення в системи баз даних, 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>

*

*