我如何在 Postgres 中处理许多可为 NULL 的外键?

How do I handle many NULL-able foreign keys in Postgres?

我希望创建 table 条路线,指向 table 条航班。

但是,每条航线最多可以有 25 个航班,我希望每个航班都是外键。

这样弄一个table好像很浪费:

CREATE TABLE routes (
id SERIAL PRIMARY KEY,                                                                              
flight1 INT references "flights" (id),
flight2 INT references "flights" (id),
...
flight24 INT references "flights" (id),
flight25 INT references "flights" (id),
rating INT NOT NULL
);

因为,平均航班数应该在 8 左右。我将用 NULL 填充空航班。所以平均路由将包含 17 个 NULL。

这是正确的方法吗?我查看了任意长度的外键数组,但 psql (9.3.10) 似乎不支持这些外键

这不是正确的方法。您需要一个额外的 table。所以,像这样:

CREATE TABLE routes (
    RouteId SERIAL PRIMARY KEY,
    Rating int not null
);

CREATE TABLE RouteFlights (
    RouteFlightId serial primary key,
    RouteId int not null references Routes(RouteId),
    Flight int not null references Flights(FlightId)
);