ПРИКЛАДИ використання реляційного числення кортежів для формулювання запитів

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

831 Визначити номери постачальників з Парижа зі статусом, великим 20

{ SXS#, SXSTATUS }

WHERE SXCITY = Paris AND SXSTATUS &gt 20

832 Знайти всі пари номерів таких постачальників, які знаходяться в одному місті (повторення прикладу 755)

{ SXS# AS SA, SYS# AS SB }

WHERE SXCITY = SYCITY AND SXS# &lt SYS#

Зверніть увагу, що конструкції AS в кортежі-прототипі використовуються для присвоювання імен атрибутам результату Отже, ці імена недоступні для використання в конструкції WHERE, і тому друга операція порівняння в конструкції WHERE записана як sxs # < SY.S #, а не у вигляді SA < SB.

Глава 8 Реляційне числення301

833Получіть повну інформацію про постачальників деталі з номером Р2 (модифікована версія прикладу 751)

SX WHERE EXISTS SPX ( SPXS# = SXS# AND SPXP# = P# (P2) )

Зверніть увагу на використання імені змінної області значень у кортежі-прототипі Цей приклад є скороченою записом наступного виразу

{ SXS#, SXSNAME, SXSTATUS, SXCITY }

WHERE EXISTS SPX ( SPXS# = SXS# AND SPXP# = P# (P2) )

834 Визначити імена постачальників принаймні однієї деталі червоного кольору

(Повторення прикладу 752)

SXSNAME

WHERE EXISTS SPX ( SXS# = SPXS# AND

EXISTS PX ( PXP# = SPXP# AND

PXCOLOR = COLOR (Red) ) )

Еквівалентна формула (але записана в попереджання нормальній формі, в якій всі квантори поміщаються в початок правильно побудованої формули) має наступний вигляд

SXSNAME

WHERE EXISTS SPX ( EXISTS PX ( SXS# = SPXS# AND SPXP#   =   PXP#   AND PXCOLOR = COLOR (Red)

) )

Попереджання (Або пренексная) нормальна форма за своєю суттю не є більш (або менш) правильної порівняно з іншими формами, але після її засвоєння можна переконатися, що в більшості випадків вона являє собою найбільш природний метод формування запитів Крім того, вона дозволяє зменшити кількість використовуваних дужок, як показано нижче Наприклад, розглянемо наступну правильно побудовану формулу

Q1   V1    (   Q2   V2    (   wff   )    )

Тут кожен з кванторів Q1 і Q2 являє собою або квантор EXISTS, або квантор FORALL При необхідності цю формулу завжди можна однозначно привести до наступного вигляду

Q1   V1   Q2   V2    (   wff   )

Таким чином, наведене вираз реляційного числення можна переписати таким чином

SXSNAME

WHERE EXISTS SPX EXISTS PX ( SXS# = SPXS# AND SPXP#  =  PXP#  AND PXCOLOR    =    COLOR (Red) )

Однак для ясності у всіх інших прикладах будемо як і раніше показувати все дужки

835 Знайти імена постачальників принаймні однієї деталі, що поставляється постачальником з номером S2

SXSNAME

WHERE EXISTS SPX ( EXISTS SPY ( SXS# = SPXS# AND SPXP# = SPYP# AND SPYS# = S# (S2) )

)

836 Отримати імена постачальників всіх типів деталей

(Повторення прикладу 753)

SXSNAME WHERE FORALL РХ (EXISTS SPX (SPXS # = SXS # AND SPXP # = PXP #))

Еквівалентна вираз можна записати без використання KBaHTopaFORALL

SXSNAME WHERE NOT EXISTS PX ( NOT EXISTS SPX

( SPXS# = SXS# AND SPXP# = PXP# ) )

837 Визначити імена постачальників, які не поставляють деталь з номером Р2 (повторення прикладу 756)

SXSNAME WHERE NOT EXISTS SPX

( SPXS# = SXS# AND SPXP# = P# (P2) )

Зверніть увагу, як просто це рішення можна отримати з рішення прикладу 833

838 Визначити номери постачальників, принаймні, тих деталей, які постачає постачальник з номером S2 (повторення прикладу 754)

SXS# WHERE FORALL SPX ( SPXS# S# (S2) OR EXISTS SPY ( SPYS# = SXS#

AND SPYP# = SPXP# ) )

Переформулюємо цей запит у відповідності з наступним виразом: Отримати номери таких постачальників sx, що для всіх поставок деталі SPX, незалежно то того, чи виконана ця поставка постачальником S2 чи ні, існує поставка SPY деталі SPX постачальником sx . Щоб спростити формулювання таких складних запитів, як цей, введемо інше синтаксичне угоду, зване явною синтаксичної формою для оператора логічної імплікації Якщо р і q-правильно побудовані формули, то вираз логічної імплікації виду

IF  p  THEN  q  END  IF

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

(   NOT p   )   OR  q

Таким чином, наведене вище вираз може бути переписано таким чином

SXS# WHERE FORALL SPX ( IF SPXS# = S# (S2) THEN EXISTS SPY ( SPYS# = SXS# AND

SPYP# = SPXP#

) END IF )

Дамо словесну формулювання цього запиту: Отримати номери таких постачальників SX, що для всіх поставок SPX, якщо існує поставка SPX постачальником з номером S2, то існує поставка SPY всіх типів деталей, що входять в поставку SPX, постачальником sx .

839Получіть номера деталей, які важать більше 16 фунтів, поставляються постачальником з номером S2 або відповідають обом умовам

RANGEVAR PU RANGES OVER

(РХР # WHERE PXWEIGHT> WEIGHT (160)), (SPXP # WHERE SPXS # = S # (S2))

; PUP#

У еквівалентному вираженні реляційної алгебри тут могло б використовуватися явне обєднання

Заради інтересу покажемо альтернативну формулювання цього запиту Однак ця друга формулювання (на відміну від першого) спирається на той факт, що кожен номер деталі з змінної відносини SP зявляється також у змінній відносини Р

РХР # WHERE PXWEIGHT> WEIGHT (160) OR EXISTS SPX (SPXP # = PXP # AND SPXS # = S # (S2))

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

*

*