0

有2个关系:

预测(cname,etype)

措施(etype,提供者)

cname - 预测未来灾难的城市名称。

etype - 事件类型。地震、海啸……

提供者 - 警察,救护车......

我需要使用域关系演算编写一个查询,它应该找到一个为米兰的所有预测事件提供服务的提供商。

到目前为止我有这个:

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

我不确定。可以吗?还是有什么问题?

4

1 回答 1

1

您没有提及您的 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

为米兰的所有预测事件提供服务的提供商。

这是“all”/“every”的经典模棱两可的用法。如果在米兰没有发生任何事件类型,您想要所有提供者还是没有提供者?(这是通过关系除法变体计算的查询中的常见问题。)

也许您希望提供者 p where 用于所有类型 e,如果 Milano 遭受 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,其中有一种 Milano 遭受的类型,并且对于所有类型 e,如果 Milano 遭受 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))
     ))
}
于 2018-12-04T03:38:23.850 回答