PostreSQL:按年份链接人员和地址

时间:2015-09-21 04:38:42

标签: postgresql foreign-keys key

我构建了我的第一个PostgreSQL数据库。它涵盖了几十年(1890年至1930年)人们生活和工作的地方。我有人,地址和餐馆名称表。人们四处走动,包括他们的住所和工作地点。

如何建立从某个人到地址说某些年份的链接?换句话说可能有1到20年(有些人留下来),但我我想查询每年(实际上它将成为一张地图)。

据我所知,如果只有一次,那就是外键。

我也将把餐馆名称与各种地址联系起来。在某些情况下,我只有业主的名字,所以我会按年份建立一个链接,无论他们是员工还是业主。接下来我会解决这个问题。也许在回答第一个问题后,我会看到我的方式。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您需要按日期限定的m:n关系。这通常是使用"加入表"。

实现的

e.g。给出:

create table person (
    person_id integer primary key,
    ...
);

create table address (
    address_id integer primary key,
    ...
);
你可以写一个像这样的表:

create table residence_period (
    person_id integer references person(person_id),
    address_id integer references address(address_id),
    moved_in date not null,
    moved_out date,
    constraint moved_in_before_moved_out
      check (moved_out is null or moved_in < moved_out)
);

如果您愿意,可以使用daterange类型而不是两个字段。

如果您想断言某人没有多个重叠的住所,您可以使用exclusion constraint