о запросе в доменном реляционном исчислении - PullRequest
0 голосов
/ 04 декабря 2018

Существует 2 отношения:

Прогноз (cname, etype)

Показатели (etype, поставщик)

cname - название города прогнозируемой будущей катастрофы.

etype - тип события.землетрясение, цунами ...

провайдер - полиция, скорая помощь ...

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

Пока у меня есть это:

{<P> | ∃et <et,P> ∈ Measures ^ ∀ ev (<'Milano', ev> ∈ Prediction 
⟹  ∃pr(ev,pr) ^ pr=P)}

Я не уверен в этом.Это нормально?или что-то не так?

1 Ответ

0 голосов
/ 04 декабря 2018

Вы не даете ссылку на вашу версию RA (реляционная алгебра) или DRC (доменное реляционное исчисление).Я угадаю синтаксис из вашей попытки.

-- <cname, etype> rows where city cname suffers event type etype
-- { <cname, etype> | city cname can suffer event type etype }
Provider

-- <etype, provider> rows where event type etype service is provided by provider
-- { <etype, provider> | event type etype is service is provided by provider}
Measures

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

Это классическое неоднозначное использование «всех» / «каждого».Если в Милане не происходит никаких типов событий, хотите ли вы всех провайдеров или нет провайдеров?(Это распространенная проблема в запросах, рассчитываемых с помощью вариантов реляционного деления.)

Возможно, вам нужны поставщики p, где для всех типов e, если Милан страдает e, тогда p услуг e:

-- <p> rows where
    (for all e (
       if city 'Milano' suffers event type e then event e service is provided by p))

{ <p> | (forall e (if <'Milano', e> ∈ Prediction then <e, p> ∈ Measures)) }

Но из вашего запроса может показаться, что вам нужны поставщики p, где есть тип, которым страдает Милан, и для всех типов e, если Милан страдает e, тогда p услуг e:

-- <p> rows where
    (for some e ('Milano' suffers event type e))
&   (for all e (
       if city 'Milano' suffers event type e then event e service is provided by p))

{ <p> |
    (exists e (<'Milano', e> ∈ Prediction))
&   (forall e (if <'Milano', e> ∈ Prediction then <e, p> ∈ Measures))
}

Ваш запрос, кажется,пытаясь быть похожим на следующее осложнение этого:

{ <p> |
    (exists e (<'Milano', e> ∈ Prediction))
&   (forall e (
        if <'Milano', e> ∈ Prediction
        then (exists pr (<e, pr> ∈ Measures & pr = p))
     ))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...