PostgreSQL:Link 人和地址(按年份)

PostreSQL: Link people and addresses by year

我正在构建我的第一个 PostgreSQL 数据库。它涵盖了人们在过去几十年(1890 年至 1930 年)生活和工作的地方。我有人员、地址和餐厅名称表。人们搬来搬去,住所和工作场所。

我如何确定 link 从一个人到某年的地址? 换句话说,可能有 1 到 ~20 年(有些人留在原地),但我想查询每年(实际上它将成为一张地图)。

我明白了,如果只有一次,那就是外键。

我还将link将餐厅名称发送到各个地址。在某些情况下,我只有所有者的姓名,所以我将有一个 link 按年份以及他们是雇员还是所有者。接下来我会解决这个问题。也许在第一个问题得到回答后,我会找到解决这个问题的方法。

感谢您的帮助。

您需要 m:n 符合日期的关系。这通常用 "join table".

来实现

例如给定:

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

create table address (
    address_id integer primary key,
    ...
);

你可以这样写 table:

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