我构建了我的第一个PostgreSQL数据库。它涵盖了几十年(1890年至1930年)人们生活和工作的地方。我有人,地址和餐馆名称表。人们四处走动,包括他们的住所和工作地点。
如何建立从某个人到地址说某些年份的链接?换句话说可能有1到20年(有些人留下来),但我我想查询每年(实际上它将成为一张地图)。
据我所知,如果只有一次,那就是外键。
我也将把餐馆名称与各种地址联系起来。在某些情况下,我只有业主的名字,所以我会按年份建立一个链接,无论他们是员工还是业主。接下来我会解决这个问题。也许在回答第一个问题后,我会看到我的方式。
感谢您的帮助。
答案 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。