如何在PostgreSQL中建立这种关系?

时间:2011-03-07 23:20:14

标签: sql model database entity-relationship

A many-to-many toal participation relation (both ways)

您好。

如ER模型所示,我想创建“Busses”和“Chauffeurs”之间的关系,其中“Chauffeurs”中的每个实体必须在“Certified”中至少有一个关系,并且“Busses”中的每个实体必须在“认证”中至少有一个关系。

虽然设计ER模型非常容易,但我似乎无法找到在PostgreSQL中建立这种关系的方法。有人有想法吗?

由于

2 个答案:

答案 0 :(得分:0)

解决方案应该与数据库无关。如果我理解正确,您可能希望您的认证表格如下:

CERTIFIED
id
bus_id
chauffer_id
...
...

答案 1 :(得分:0)

我能够找到的唯一解决方案是在父表中使用一个必填字段的概念来表示“至少一个”,然后将2个或更多关系存储在相交表中。

司机

chauffeur_id
chauffer_name
certified_bus_id (not null)

认证

chauffer_id
bus_id

公共汽车

bus_id
bus_name
certified_chauffer_id (not null)

获取获得司机资格认证的所有公共汽车的列表将成为

select c.chauffer_name, b.bus_name
from chauffeurs c
inner join busses b on (b.bus_id = c.certified_bus_id)
UNION
select c.chauffer_name, b.bus_name
from chauffeurs c
inner join certified ct on (c.chauffeur_id = ct.chauffer_id)
inner join busses b on (ct.bus_id = b.bus_id)

UNION(相对于UNION ALL)负责使用certified中的值进行重复数据删除。