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