Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка языка запросов в бинарной модели знаний и транслятора этого языка в язык SQL (бакалаврская работа).doc
Скачиваний:
13
Добавлен:
28.06.2014
Размер:
1.31 Mб
Скачать

2.2.9. Логические предложения.

В БМЗ имеются логические предложения многих типов. Приведем примеры логических предложений, являющихся простыми ограничениями.

Примеры 2.11. 1) Каждый профессор или доцент кафедры прикладной математики руководит хотя бы одним студентом.

EACH Препод(Должность = профессор OR доцент;

THAT Работает Кафедра(Назв='прикладная математика'));

Руководит SOME Студент.

(X Руководит Y) IF Y.Руководитель = Х.

2) Зарплата профессора больше 10000 рублей

IF Х IN Препод(Должность=профессор) THEN

X.Зарплата > 10000.

В БМЗ имеют предложения, относящиеся к интервальной логике Аллена, [Allen, 1983]. Декларация события С выполняется предложением EVENT C. Базовые отношения между событиями C и D выражаются следующими предложениями:

С BEFORE D (раньше),

C MEETS D (встречает),

C OVERLAPS D (перекрывает),

C FINISHES D (заканчивает),

С STARTS D (начинает),

С DURING D (в течение),

C EQUAL D (равно).

Обратные отношения обозначаются с помощью приставки i . Например,

предложение C i-BEFORE D эквивалентно предложению D BEFORE C.

Дизъюнкция предложений с одинаковыми парами событий обозначается как конечное множество связок Аллена. Например, дизъюнкция трех предложений

С BEFORE D C i-MEETS D C EQUAL D

обозначается как

С {BEFORE, i-MEETS, EQUAL} D.

Глава 3 язык запросов для бинарной модели данных

Здесь рассматривается язык запросов для структурных схем, записанных в языке ЯОД. Такие запросы обращаются к базам данных (фактов), структурированным по эти схемам. Будет построена система синтаксической корректности этих запросов и система трансляции конъюнктивных запросов в язык SQL.

3.1. Примеры запросов

Запрос 1. Найти студентов, родившихся в 1991 году.

?Х.ФИО – X IN Студент(ГодРожд = 1991) (3.1)

Заметим, что в этом запросе (неявно) предполагается, что нужно найти фамилии студентов. Если мы напишем

?Х – X IN Студент(ГодРожд = 1991),

то ответом на этот запрос будет множество суррогатов студентов, родившихся в 1991 году. Однако пользователю суррогату не нужны, они нужны только интерпретатору запросов. Вместо (3.1) можно записать короче

? - Студент(ГодРожд = 1991).ФИО

Этот запрос можно также записать без использования атрибутных условий:

?Х.ФИО – X IN Студент; Х.ГодРожд = 1991

Запрос 2.Какую фамилию имеет староста группы А13-09?

?Х.Группа.Староста.ФИО – Х IN Студент(Группа.Номер =

'А13-09')

Без атрибутного условия этот запрос записывается так:

?Х.Группа.Староста.ФИО – Х IN Студент; Х.Группа.Номер =

'А13-09'

Можно также исключить двукратное применение операции «точка»:

?Х.Группа.Староста.ФИО – Х IN Студент; Х.Группа = Y; Y.Номер ='А13-09'

Запрос 3.Найти всех студентов группы А13-01, родившихся ранее старосты этой группы.

?Х.ФИО – X IN Студент(Группа.Номер = А13-09;

ГодРожд < Группа.Староста.ГодРожд)

Запрос 4.Какие студенты группы А13-08 сдали экзамен по дискретной математике на отлично?

?Х.ФИО – X IN Студент;Х.Группа.Номер = А13-09;

(Х СдалЭкзамен Z Y);

Y.Назв='дискретная математика';Z.Оценка= 5

Здесь переменная X обозначает пример (экземпляр) классаСтудент, а переменная Y обозначает пример классаПредмет. Это следует из того, что выражение (Х СдалЭкзамен Z Y) должно быть согласовано с формой(Студент СдалЭкзамен Предмет). То, что переменная Z стоит заЭкзЭкз, означает, чтоZ есть пример бинарной связиСдалЭкзамен.

Запрос5. Каков средний бал на экзвмене по дискретной математике у студентов группы А13-08?

?AVG(Z.Оценка) – Z IN СдалЭкзамен(Предмет.Назв =

‘дискретная матем.’; Студент.Группа.Номер = А13-08)

Запрос6. Какие студенты сдали все экзамены на отлично в январе 2012 года?

?Х.ФИО – (Х СдалЭкзамен Z Y);Z.Оценка = 5; Z.Дата >= 01/01/2012; Z.Дата =< 31/01/2012

Запрос 7. Найти всех профессоров кафедры Прикладной математики.

Х.ФИО – Работает_на(Х).Назв = 'Прикладная математика'

Х.Должность = 'Профессор'

В этом запросе использована функциональная бинарная связь Работает_на. Если бы мы не использовали свойство функциональности этой связи, то этот запрос можно было бы представить так:

Х.ФИО –(Х Работает_на Y); Y.Назв = 'Прикладная математика';

Х.Должность = профессор

Запрос 8. Какие студенты и по каким предметам сдади экзамены на отлично? У каких препододавателей и по каким предметам студент Иванов сдал экзамены на отлично?

?X.Студент.ФИО,Х.Предмет.Назв – Х IN СдалЭкзамен( Х.Оценка=5)

Этот запрос можно также короче:

?X.ФИО,Y.Назв – (Х СдалЭкзамен Z Y); Z.Оценка=5.

Запрос 9. У каких препододавателей и по каким предметам студент Иванов сдал экзамены на отлично?

?Z.Кому.ФИО,Y.Назв – ('Иванов А.П.' СдалЭкзамен Z Y);

Z.Оценка=5

Соседние файлы в предмете Государственный экзамен