微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

所有者和用户的Postgres关系

如何解决所有者和用户的Postgres关系

我正在练习以学习数据库设计。这是某种幻想足球队。我有这个初始表usersteams一个团队可以有很多用户一个用户可以加入并属于一个团队。

   USERS
PK id
FK team_id -> TEAMS.id
   username

   TEAMS
PK id
   name

但是我也想允许用户创建自己的团队,如果他们不想加入另一个团队。如果我在owner_id表中添加teams,怎么办?

   TEAMS
PK id
FK owner_id -> USERS.id
   name

我觉得这不是正确的方法。最好的方法是什么?

解决方法

您可能在users中有一个标志,该标志指示用户是否拥有他们所属的团队,并有部分唯一索引来限制该标志仅对团队设置一次。

CREATE TABLE teams
             (id serial,owner_id integer,PRIMARY KEY (id));

CREATE TABLE users
             (id serial,team_id integer
                      NOT NULL,is_owner boolean
                       NOT NULL
                       DEFAULT FALSE,PRIMARY KEY (id),FOREIGN KEY (team_id)
                           REFERENCES teams
                                      (id));

CREATE UNIQUE INDEX users_team_id_is_owner
                    ON users
                       (team_id)
                    WHERE is_owner;

db<>fiddle
索引仅包含满足WHERE子句的行,因此所有索引都将标志is_owner设置为true。在该行的子集内,team_id必须是唯一的,这意味着不能有任何两行将相同的team_idis_owner设置为true

要确保用户必须是团队成员,请将team_id设置为NOT NULL

在该模式中,可能会有一些没有所有者的团队。但是据我了解您的问题,没关系。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。