Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Управление данными (пособие).pdf
Скачиваний:
280
Добавлен:
21.05.2015
Размер:
5.42 Mб
Скачать

67

кортежей отношения ДИСЦИПЛИНЫ, а переменная MX на множестве кортежей отношения УСПЕВАЕМОСТЬ.

Выражения реляционного исчисления будем записывать в виде t WHERE Ψ(t),

где t – это кортеж или кортежи, которые требуется получить, а Ψ(t) – это логическая формула (так называемая правильно построенная формула – ППФ), описывающая условия, которым должны удовлетворят кортежи t искомого отношения.

Правильно построенную формулу Ψ(x) можно определить следующим образом

Ψ(x)::= предикат

| NOT Ψ(x)

| Ψ(x) AND Ψ(x) | Ψ(x) OR Ψ(x) | Ψ(x) → Ψ(x)

| EXISTS x (Ψ(x)) | FORALL x (Ψ(x))

Здесь вертикальная черта разделяет возможные варианты представления правильно построенных формул.

Кортежные переменные в правильно построенных формулах выражения реляционного исчисления могут находиться в свободном или связанном состояниях.

Переменная называется связанной, если сразу же за ней следует квантор EXISTS или FORALL (в этом случае она называется кванторной переменной) или она находится в пределах квантора и имеет такое же имя, что и применяемая кванторная переменная. В противном случае переменная называется свободной.

Примеры правильно построенных формул

F1 = (SX.ГОРОД = ‘Воронеж’)

F2 = (MX.ОЦЕНКА = 3 OR MX.ОЦЕНКА = 4)

F3 = NOT(DX.ИМЯ = ‘Физика’)

Используемые в этих формулах переменные SX, MX и DX являются свободными.

F4 = EXISTS SX (SX.ИМЯ = ‘Иванов’)

68

Эта формула читается как: «Существует по крайней мере одно значение кортежной переменной SX, определенной на кортежах отношения СТУДЕНТЫ, для которой значение атрибута ИМЯ равно ‘Иванов’».

F5 = FORALL MX (MX.ОЦЕНКА >=2)

Эта формула читается как: «Для всех значений кортежной переменной MX значение атрибута ОЦЕНКА больше или равно 2».

В последних двух формулах F4 и F5 переменные SX и MX находятся в связанном (кванторами) состоянии.

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

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

СТУДЕНТЫ

 

 

 

 

ДИСЦИПЛИНЫ

НАИМЕНОВАНИЕ

КОД_СТУД

ИМЯ

ГОРОД

 

 

КОД_ДИСЦИПЛ

С2

Иванов

Орел

 

 

Д2

Информатика

С5

Петрова

Курск

 

 

Д6

Физика

С4

Сидоров

Москва

 

 

Д1

Математика

С7

Кузнецов

Брянск

 

 

Д5

История

С8

Зайцева

Липецк

 

 

Д7

Английский

С3

Павлов

Воронеж

 

 

Д4

Физкультура

С10

Котов

Орел

 

 

 

 

С15

Лукин

Воронеж

 

 

 

 

С23

Белкин

Воронеж

 

 

 

 

УСПЕВАЕМОСТЬ

 

 

 

 

 

 

КОД_СТУД

КОД_ДИСЦИПЛ

ОЦЕНКА

 

 

 

С2

Д2

 

5

 

 

 

 

С4

Д2

 

4

 

 

 

 

С8

Д2

 

5

 

 

 

 

С7

Д6

 

3

 

 

 

 

С7

Д1

 

4

 

 

 

 

С3

Д4

 

5

 

 

 

 

Пример 1

Получить имена студентов проживающих в Воронеже.

RANGE OF SX IS СТУДЕНТЫ

SX.ИМЯ WHERE SX.ГОРОД = ‘Воронеж’

69

Пример 2

Получить имена студентов, сдававших дисциплину Д2.

RANGE OF SX IS СТУДЕНТЫ

RANGE OF MX IS УСПЕВАЕМОСТЬ

SX.ИМЯ WHERE EXISTS MX (MX.КОД_СТУД = SX.КОД_СТУД

AND MX.КОД_ДИСЦИПЛ = ‘Д2’)

Пример 3

Получить имена студентов, сдававших физику.

RANGE OF SX IS СТУДЕНТЫ

RANGE OF DX IS ДИСЦИПЛИНЫ

RANGE OF MX IS УСПЕВАЕМОСТЬ

SX.ИМЯ WHERE EXISTS MX (MX.КОД_СТУД = SX.КОД_СТУД

AND EXISTS DX(DX.КОД_ДИСЦИПЛ = MX.КОД_ДИСЦИПЛ AND DX.НАИМЕНОВАНИЕ = ‘Физика’)

или другая форма того же запроса

SX.ИМЯ WHERE EXISTS MX (EXISTS DX (SX.КОД_СТУД = MX.КОД_СТУД AND MX.КОД_ДИСЦИПЛ = DX.КОД_ДИСЦИПЛ

AND DX.НАИМЕНОВАНИЕ = ‘Физика’))

Пример 4

Получить имена студентов, которые не сдавали дисциплину Д2.

RANGE OF SX IS СТУДЕНТЫ

RANGE OF MX IS УСПЕВАЕМОСТЬ

SX.ИМЯ WHERE NOT EXISTS MX (MX.КОД_СТУД = SX.КОД_СТУД AND MX.КОД_ДИСЦИПЛ= ‘Д2’)

Интересно сравнить этот запрос с запросом из примера 2.

Пример 5

Получить имена студентов, которые сдавали все дисциплины.

RANGE OF SX IS СТУДЕНТЫ

RANGE OF DX IS ДИСЦИПЛИНЫ

RANGE OF MX IS УСПЕВАЕМОСТЬ

SX.ИМЯ WHERE FORALL DX (EXISTS MX (MX.КОД_СТУД = SX.КОД_СТУД AND MX.КОД_ДИСЦИПЛ = DX.КОД_ДИСЦИПЛ))

70

7.3.Операции над данными – реляционная алгебра и реляционное исчисление

Вдвух предыдущих разделах были проиллюстрированы две возможности реализации математического аппарата для осуществления операций над данными – реляционная алгебра и реляционное исчисление (в варианте исчисления кортежей).

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

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

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

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