我如何在 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)
);
我希望创建 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)
);