如何解决所有者和用户的Postgres关系
我正在练习以学习数据库设计。这是某种幻想足球队。我有这个初始表users
和teams
。一个团队可以有很多用户,一个用户可以加入并属于一个团队。
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_id
和is_owner
设置为true
。
要确保用户必须是团队成员,请将team_id
设置为NOT NULL
。
在该模式中,可能会有一些没有所有者的团队。但是据我了解您的问题,没关系。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。