如何创建表与多个其他表关联的连接

时间:2015-07-16 17:19:54

标签: sql database-design

我正在尝试创建一个用户可以创建并参与挑战的应用。这个想法是一个用户可以创建许多挑战,但每个挑战只能由一个用户创建。许多用户可以输入一个挑战,每个条目只能是一个挑战的一部分。用户可以多次输入挑战

我的困惑在于尝试构建表关系。问题1)用户:挑战应该是一对多,但是我真的需要一个单独的Entry表(对于Challenge:Entry,这将是1:很多。如果是这样,那么我是否需要关联Entry和User?我实际上是能够摆脱更简单的许多:许多用户:挑战,以便用户可以创建并成为挑战的一部分,任何特定挑战都可以拥有许多用户。如果是这样,那么这需要用户和挑战之间的联接表吗?

问题2:如果我确实需要一个单独的条目表,因为用户可以多次输入一个挑战,那么我可以将其作为一个挑战:许多条目。在这种情况下,我将

许多用户:许多挑战1:许多进入

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

3 个答案:

答案 0 :(得分:4)

我会看到架构看起来像这样:

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)。 UserChallengeEntry都有关。

我认为这与您所描述的内容非常接近(其中一个选项)。

答案 1 :(得分:1)

我同意@Kritner的答案而我的是另外一个。要跟踪哪个条目属于哪个用户,您可以编写如下内容:

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

答案 2 :(得分:1)

如果我理解得很清楚你的问题就可以解决:

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)

因此,您可以在挑战表上为用户表定义外来肯。 在挑战和用户表的条目表上相同。

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