如何在 table 与多个其他 table 相关联的情况下创建连接

How to create join where a table is associated with more than one other table

我正在尝试创建一个应用程序,用户可以在其中创建和参与挑战。这个想法是一个用户可以创建许多挑战,但每个挑战只能由一个用户创建。许多用户可以参加一项挑战,每次参赛只能是一项挑战的一部分。用户可以多次输入挑战

我的困惑在于试图构建 table 关系。问题 1) User:Challenge 应该是一对多的,但我真的需要一个单独的条目 table(对于 Challenge:Entry 来说是 1:many)。如果是这样,那么我是否需要关联的条目和用户?事实上,我是否能够通过更简单的 many:many User:Challenge 来摆脱困境,以便用户可以创建并参与挑战,并且任何特定的挑战都可以有很多用户。如果是这样,那么这是否需要在用户和挑战之间加入 table?

问题 2:如果我怀疑我确实需要一个单独的条目 table 因为用户可以多次输入挑战,那么我可以将其保留为 1 challenge:many 个条目。在这种情况下,我将有

用户Many:Many挑战1:Many参赛

但是我该如何跟踪哪个条目属于哪个用户?

我会看到架构如下所示:

User
----
userId PK

Challenge
----
ChallengeId PK
creatingUserId FK to user.UserId

Entry
----
EntryId PK
ChallengeId FK to challenge.challengeId
UserId FK to user.UserId

这将只允许一个挑战的作者,但多个参与者 (Entry) 可以参与挑战。 User 将与 ChallengeEntry 相关。

我认为这与您所描述的(选项之一)非常接近。

我同意@Kritner 的回答,我的是补充。要跟踪哪个条目属于哪个用户,您可以这样写:

select u.userName, e.EntryId from T_Users u
inner join T_Entries e on e.userId = u.userId

如果我理解得很好,你的问题就可以这样解决:

create table user (id int, name varchar(255))
create table challenge (id int, name varchar(255), created_by_user_id int)
create table entry (id int, name varchar(255), challenge_id int, user_id int)

因此您可以在 table 挑战赛中为用户 table 定义一个外国语。 挑战条目 table 和用户 tables.

相同

此设置将满足您的所有需求。当然,您必须编写用户界面:-)