русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Использование предикатов для формирования запросов


Дата добавления: 2015-07-09; просмотров: 594; Нарушение авторских прав


Структура лабораторной работы

1. Общие сведения об операторах реляционной алгебры.

1.1. Использование предикатов для формирования запросов.

2. Задание к лабораторной работе.

2.1. Реализация запросов на естественном языке.

2.2. Реализация запросов по выражениям реляционного исчисления.

3. Оформление отчета.

4. Контрольные вопросы.

Общие сведенья о выражениях реляционного исчисления

Использование предикатов для формирования запросов

 

Реляционное исчисление кортежей строит правильные отношения путем описания условий, которым должны удовлетворять составляющие их кортежи. Условия описываются с помощью формул, которые имеют вид:

{t½P(t)}

Здесь t – переменная, обозначающая некоторый кортеж, а P(t) – предикат от этой переменной. Формула исчисления кортежей описывает множество всех таких кортежей t, для которых предикат P(t) принимает значение истина.

Элементарными образующими элементами предиката P(t) являются атомы, которые могут быть следующих видов:

1. R(t), где r – переменная-кортеж, R – отношение. Данный атом имеет значение истина, если кортеж r принадлежит отношению R. При этом если отношение R имеет схему H(R), то и кортеж r имеет такую же схему. Например, СОТРУДНИК(t), означает, что r является кортежем отношения СОТРУДНИК, и имеет схему {ИМЯ, ФАМИЛИЯ, ОТЧЕСТВО, ВОЗРАСТ} (если отношение СОТРУДНИК имеет данную схему).

2. S[A] Q r[B], где r и s – некоторые кортежи, A и B – имена атрибутов, причем A Î H(s) и B Î H(r), и Q – арифметический оператор сравнения (=,<,>,¹,³,£). Этот атом принимает значение истина, тогда и только тогда, когда атрибут A кортежа s находится в отношении Q с атрибутом B кортежа r. Например, если r,СОТРУДНИК(s), то r[ВОЗРАСТ] < s[ВОЗРАСТ] имеет значение “истина”, если возраст сотрудника r меньше возраста сотрудника s.



3. S[A] Q v, где s – некоторый кортеж, A – имя атрибута (A Î H(s)), а v – константа из домена атрибута A. Этот атом принимает значение “истина”, если значение атрибута A кортежа s находится в отношении Q с константой v. Например, r[ВОЗРАСТ] < 40, принимает значение “истина”, если возраст сотрудника r меньше 40.

Предикат p(t) строится из атомов с использованием логических связок, кванторов и скобок. Синтаксически правильные предикаты имеют следующее рекурсивное определение:

1. Каждый атом – это правильный предикат.

2. Если P1 и P2 – правильные предикаты, то P1 Ù P2, P1 Ú P2, и ØP1 – также правильные предикаты, утверждающие соответственно, что “ P1 и P2 оба являются истинными”, “ P1 или P2, либо оба являются истинными”, и “ P1 не является истинным”.

3. Если P – правильный предикат, то ($s)(P) – также является правильным предикатом, который утверждает, что существует такое значение переменной-кортежа s, при подстановке которого в предикат P на место всех вхождений переменной s, предикат P принимает значение “истина”. Например, предикат ($s)(СОТРУДНИК(s) Ù s[ВОЗРАСТ]< 40) утверждает, что в отношении СОТРУДНИК существует кортеж s для сотрудника с возрастом меньше 40.

4. Если P – правильный предикат, то ("s)(P) – также является правильным предикатом, который утверждает, что для всех значений переменной-кортежа s, при подстановке на место всех вхождений переменной s в предикат P, P принимает значение “истина”. Например, предикат ("s)(Ø(СОТРУДНИК(s)) Ú s[ВОЗРАСТ] ³ 20) утверждает, что для всех сотрудников возраст не может быть меньше 20 лет.

5. Если P – правильный предикат, то (P) – также правильный предикат. Скобка могут расставляться всегда, когда возникает неоднозначность при интерпретации старшинства операторов. Обычно предполагается следующий порядок: арифметические сравнения (=,<,>,¹,³,£, здесь порядок любой), $, ", Ø, Ù, Ú.

6. Ничто иное не является правильным предикатом.

Использование кванторов " и $ приводит к тому, что значение следующего за ними предиката перестает зависеть от конкретных значений соответствующих переменных или от любых дополнительных ограничений, которые могут присутствовать все данного предиката. В этом случае говорят, что переменные связываются кванторами. Понятие связанной переменной в определенном смысле аналогично понятию локальной переменной в подпрограмме. Окружающая среда не может повлиять на значение такой переменной, и, следовательно, выполнение подпрограммы не зависит от того, какое значение имела данные переменная в окружении (собственно вне подпрограммы ее и не существует).

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

Правильная формула реляционного исчисления кортежей предполагает, что предикат p(t) должен содержать единственную свободную переменную t. Все остальные переменные должны быть связаны.

Используя БД, рассматриваемую в лабораторной работе № 1, сформулируем примеры запросов с использованием формул реляционного исчисления с переменными кортежами.

 

Получить список авторов (publisher) проживающих в городе Харькове (adres).

{t(1)½($u) (publishers(u) Ù ($v) spr_publisher(v) Ù t[1] = u[publisher] Ù

u[publisher] Ù v[publisher] Ù v[adres] = ‘Харьков’)}

Запрос на SQL для этого выражения можно записать в виде:

SELECTpublisher frompublishers AS a where exists

(select* fromspr_publisher AS b wherea.publisher=b.publisher

andaddress='Харьков')

Получить список адресов авторов (adres), которые опубликовали, по крайней мере, одну книгу в 2000 году (yearpub).

{t(1)½($u) (spr_publisher(u) Ù t[1] = u[adres] Ù ($v) (publishers(v) Ù u[publisher] =

v[publisher] Ù ($w) (tiles(w) Ù v[pub_id] = v[pub_id] Ù w[yearpub] = 2000)))}

Запрос на SQL для этого выражения можно записать в виде:

SELECTaddress fromspr_publisher AS a where exists

(select* frompublishers ASb wherea.publisher=b.publisher

and exists(select* fromtitles ASc whereb.pub_id=c.pub_id

andc.yearpub=2000))

Получить список авторов (publisher), которые не проживают в городе Харьков (adres).

{t(1)½($u) (publishers(u) Ù t[1] = u[publisher] Ù (Ø$v) (spr_publisher(v) Ù

u[publisher] = v[publisher] Ù v[adres] = ‘Харьков’)))}

Запрос на SQL для этого выражения можно записать в виде:

SELECT publisher frompublishers AS a where not exists

(select* fromspr_publisher AS bwhere

a.publisher=b.publisher andb.address = 'Харьков')

 



<== предыдущая лекция | следующая лекция ==>
Реализовать запросы на SQL, по заданным операциям реляционной алгебры (все имена атрибутов переименовать в естественно-языковую форму). | Реализовать запросы на SQL, по заданным формулам реляционного исчисления.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.008 сек.