研究所有者和用户的关系



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

USERS
PK id
FK team_id -> TEAMS.id
username
TEAMS
PK id
name

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

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<gt;fiddle
索引只包括满足WHERE子句的行,因此所有行都将标志is_owner设置为true。在该行的子集内,team_id必须是唯一的,这意味着不可能有任何两行具有相同的team_idis_owner设置为true

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

不过,在该模式中可能存在没有所有者的团队。但正如我理解你的问题,那没关系。

最新更新