19
Резниченко Валерий Анатольевич Лекция 2. Дедуктивные БД и рекурсивный SQL Институт программных систем НАНУ 1

Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

Резниченко Валерий Анатольевич

Лекция 2. Дедуктивные БД и

рекурсивный SQL

Институт программных систем НАНУ 1

Page 2: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Дедуктивные БД

Рекурсивный SQL

СОДЕРЖАНИЕ

2

Page 3: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Экстенсиональные и интенсиональные понятия

3

Отец (ребенок, родитель) – экстенсиональное понятие

Интенсиональные понятия:

Сын – ребенок родителя

Брат – сын моего отца, но не я

Дед – отец моего отца

Внук – сын моего сына

Дядя – брат моего отца

Кузин – сын моего дяди (двоюродн. брат, троюродн. брат, …)

Племяник - брат моего брата

Page 4: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Термы – константы и переменные (функции НЕ допускаются)

Sum(x,0,x)

Sum(x,next(y),next(z)) :- Sum(x,y,z)

Атомарные формулы (атомарный предикат) – p(t1,…,tn) –

интерпретируются явно заданными (экстенсиональными) отношен.

p(x,y,z), p(5,y,z), p(x,y,x)

Встроенные предикаты (=, , , …)

Литералы – атомарные формулы и их отрицания

Правила – q :– p1 & ... & pn (p1 & ... & pn q)

(голова правила, тело правила, подцели)

Пример:

брат (X,Y) :- отец(X,Z) & отец(Y,Z) & XY;

Язык Datalog (Database logic)

4

Page 5: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Граф зависимостей

5

Логическая программа:

брат (X,Y) :- отец(X,Z) & отец(Y,Z) & X Y

кузин(X,Y) :- отец (X,Xp) & отец (Y,Yp) & брат(Xp,Yp)

кузин(X,Y) :- отец (X,Xp) & отец (Y,Yp) & кузин(Xp,Yp)

родич(X,Y) :- брат (X,Y)

родич(X,Y) :- родич(X, Z) & отец(Y, Z)

родич(X,Y) :- родич (Z,Y) & отец(X, Z)

Циклы (петли), рекурсивный предикат, рекурсивная логическая

программа, экстенсиональные и интенсиональные предикаты.

Page 6: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

6

Безопасные правила

Надо, чтобы любое правило интерпретировалось конечным

отношением (без обращения к домену)

Правило називается безопасным, если все его переменные

ограничены.

Переменная ограничена:

- если она входит в экстенсиональный предикат

p(x,y,z)

- если она приравнивается к другой ограниченной

переменной

p(x,y,z) & u=z

- если она приравнивается к константе (u=5)

Пример безопасного правила:

q(X,Y) :- p(X,Z) & W=a & Y=W

Page 7: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Простые

Рекурсивные

С отрицаниями

Утверждение – простые правила выразимы через

реляционную алгебру

Пример: q(X,Y) :- p(a,X) & r(X,Z,X) & s(Y,Z)

Три вида правил

7

))((σ)(12

PXT ass

Page 8: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Рекурсивные правила

8

Рекурсия – предикат определяется через самого

себя

родич(X,Y) :- родич(X, Z) & отец(Y, Z)

Неподвижная точка

Минимальная неподвижная точка (модель)

Монотонные операции

Все операции РА за исключением разности являются

монотонными

Утверждение – Для вычисления рекурсивных правил

необходимо реляционные выражения заключать в циклы

Page 9: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Правила с отрицаниями

9

одинокий мужчина(X) :- мужчина(X) & ~женатый(X,Y)

Все Мужчины Женатые Неженатые Неженате мужчины Одиноке мужчины

Иван

Петр

Ира

Иван

Петр

Петр, Ира Иван, Иван

Иван, Петр

Иван, Ира

Петр, Иван

Петр, Петр

Ира, Иван

Ира, Петр,

Ира, Ира

Иван, Иван

Иван, Петр

Иван, Ира

Петр, Иван

Петр, Петр

Иван

Петр

Следует запретить использование переменных в отрицаемых

подцелях, если эти переменные не используются в подцелях без

отрицания

женатый мужчина(X) :- женатый(X,Y)

одинокий мужчина(X):- мужчина(X) & ~женатый мужчина(X)

Page 10: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

p(X) :- r(X) & ~q(X)

q(x) :- r(X) & ~p(X)

Пусть P, Q, R являются отношениями для ИБД-предикатов p,

q и ЭБД-предиката r. Пусть ЭБД-отношение R состоит из еди

нственного кортежа, например, R = {1}. Тогда имеется два ре

шения приведенной выше дедуктивной программы:

S1 = {P = , Q = {1}};

S2 = {P = {1}, Q = }.

S1 и S2 являются решениями уравнений:

P = R – Q і Q = R – P

Привила с отрицаниями – множество миним. точек

10

Page 11: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Правило, голова которого содержит предикат p, а тело —

отрицаемую подцель q, является страцифицируемым, если

в графе зависимостей отсутствует путь от p к q.

Страфицируемые отрицания

11

Наличие стратифицируемого отрицания дает возможность

выбора среди многих минимальных точек такую, которая бу

дет интерпретироваться как содержание (смысл) логической

программы со стратифицируемым отрицанием

Page 12: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Стратификация правил

12

Существует алгоритм проверки стратифицируемости логической

программы, и если она стратифицируема, то и производит страти

фикацию правил, то есть группирует предикаты в страты, котор

ые представляют собой такие максимальные множества предикат

ов, что:

1) если предикат p является головой правила с телом, содержа

щим отрицаемый предикат q, то q располагается в страте бо

лее низкого уровня;

2) если предикат p является головой правила с телом, содержа

щим неотрицаемый предикат q, то страта для p имеет по кра

йней мере тот же уровень, что и страта для q.

Этот алгоритм строит так называемую предпочтительную ми

нимальную точку (среди множества всех возможных))

Page 13: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

В стандарте SQL–99 было расширено определение запроса.

Его синтаксис принял следующий вид:

[фраза_WITH] запрос

фраза WITH, которая может располагаться в начале запроса,

используется для достижения следующих целей:

описать подзапросы, которые многократно используются

в самом запросе, с тем, чтобы к ним (подзапросам) можн

о было обращаться в запросе по имени;

описать рекурсивное выполнение запроса.

Рекурсивный SQL

13

Page 14: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Рекурсивное выполнение запросов

14

Давайте рассмотрим следующий фрагмент запроса:

WITH B AS

(SELECT ... FROM A ...

UNION ALL

SELECT ... FROM A,V ...)

SELECT ....

Это не рекурсивный запрос. Если теперь мы в нем заменим

«V» на «B» то он по форме преобразуется в рекурсивный:

WITH RECURSIVE B AS

(SELECT ... FROM A ...

UNION ALL

SELECT ... FROM A,B ...)

SELECT....

Page 15: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

CREATE TABLE FLIGHTS

(FromCity varchar(15),

ToCity varchar(15),

Cost numeric(4));

Рекурсивные запросы: рейсовые полеты

15

50

40

10

80

8070

40

100

30

Москва

Симферополь

Ростов

Кишинев

Минск

Киев

Page 16: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Найти самый дешевый перелет из Москвы в Симферополь

Рекурсия с накоплением

16

WITH RECURSIVE REACHABLE(FromCity, Destination, Total_Cost) AS

(SELECT FromCity, ToCity, Cost

FROM FLIGHTS

WHERE FromCity = ’Москва’

UNION

SELECT inn.FromCity, out.ToCity, inn.Total_Cost + out.Cost

FROM REACHABLE inn, FLIGHTS out

WHERE inn.Destination = out.FromCity

)

SELECT FromCity, Destination, MIN(Total_Cost)

FROM REACHABLE

WHERE Destination = ’Симферополь’

GROUP BY FromCity, Destination;

Page 17: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Отрицание в рекурсии разрешимо, если оно применяется к таблицам,

которые являются полностью известным (то есть уже вычислены).

Запрос. Города, достижимые из других городов кроме Москвы.

with RECURSIVE Reachable_From (FromCity, ToCity) AS

(SELECT FromCity, ToCity

FROM Flights

UNION

SELECT inn.FromCity, out.ToCity

FROM Reachable_From inn, Flights out

WHERE inn.ToCity = out.FromCity

)

SELECT * FROM Reachable_From

EXCEPT

SELECT * FROM Reachable_From WHERE FromCity = ’Москва’;

Отрицание в рекурсии

17

Page 18: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Фиксация наличия циклов

Направление поиска (в глубину, в ширину)

Вкладывание рекурсивных запросов в друга

Прямая (рекурсия отношения через самого себя) и взаимная рекурсия

(рекурсия R через S и S через R)

Линейная и нелинейная рекурсия (Рекурсивный запрос является лине

йным, если таблица, определяемая рекурсивно, соединяется в запросе т

олько один раз (то есть она перечисляется во фразе FROM только один

раз). Кроме того, линейная рекурсия предполагает, что рекурсивно опре

деляемая таблица не может одновременно использоваться во фразах FR

OM как самого рекурсивного запроса, так и во всех его подзапросах.

Рекурсия – другие возможности

18

Page 19: Лекция 2. Дедуктивные БД и рекурсивный SQL · Лекция 2. Дедуктивные БД и рекурсивный sql Правила с отрицаниями

ИПС НАНУ

Лекция 2. Дедуктивные БД и рекурсивный SQL

Пасічник В.В., Резніченко В.А. Організація баз

даних та знань. – К.: Видавнича група BHV, 2006. –

384 с.

Ф. Андон, В. Резниченко - Язык запросов SQL. Учеб

ный курс. - СПб.: Питер, Киев: BHV, 2006. — 416 с.

В.А. Резниченко. Рекурсивный SQL. - Інженерія

програмного забезпечення. - № 4 2010 – с. – 63-81

Литература

19