PostgreSQL 为另一个 Table 的所有行创建外键

PostgreSQL creating foreign key to all rows of another Table

我正在创建 PostgreSQL 数据库。
我有 2 tables - 用户和项目

在这种情况下,我如何(如果可以)实现一对多关系?

因此,如果我进行 JOIN 查询以向我显示具有某些 IDUser 和他所有链接的 Projects?

或者在 Project table 中创建一个 User_ID 外键会更容易用户 table ID?

看起来真的是many-to-many关系,每个用户可能参与多个项目,每个项目可能涉及多个用户。如果是这样,那么您的设计中需要第三个 table 来表示该关系 - 这称为桥 table 或连接点 table.

示例 DDL:

create table users (
    id int primary key,
    username text
);

create table projects (
    id int primary key,
    name text,
    status text,
    deadline date
);

create table user_projects (
    id int primary key,
    user_id int references users(id),
    project_id int references projects(id),
    unique (user_id, project_id)
);

现在假设您要列出所有用户以及他们参与的所有项目:

select u.*, p.*
from users u
inner join user_projects up on up.user_id = u.id
inner join projects p on p.id = up.project_id
order by u.id, p.id

如果您的用户只是项目成员,一个项目可能包含多个用户,一个用户可能是多个项目的成员。在这种情况下,@GMB 提供了正确的答案。

但正确的答案还取决于您的业务:如果每个项目只有一名经理,您可以在项目中定义一个 manager_id,这样每个项目都链接到 1 名经理和一名经理(=用户)可以是多个项目的经理。

user_project中您还可以指定用户在项目中的角色(假设用户在项目中只有一个角色)。