数据库结构 - 来自多个表的项目

时间:2013-12-19 06:23:19

标签: database-design database-schema

我正在创建一个用于存储摔跤事件的数据库,并且已经找到了如何构建数据库的问题。感谢任何人的帮助。

我有以下表格:

tblPeople 将包含我的所有摔跤手。

tblPeople
  - personId
  - personName 
    #eg: "211", "Dean Ambrose"

tblTeams ,其中包含特定标记小组

tblTeams
- teamId
- teamName
  #eg: "13", "Shield"

tblPeopleInTeams 会将人与团队联系起来

tblPeopleInTeams
- peopleInTeamsId
- teamId
- peopleId
  #eg: "1", "13", "211"

tblMatches 将包含匹配详情,需要反映相关人员或团队

我不确定如何构建tblMatches以便它可以引用个人或团队。一个例子是比赛可能有“Dean Ambrose”或“Shield”作为竞争对手。

我能做到:

tblMatches
- matchId
- peopleId
- teamId
  #eg: "412", "211", NULL (for Dean Ambrose)
  #eg: "412", NULL, "13" (for Shield)

但是为了使用它,我必须只填充其中一个字段并在我的应用程序中使用条件逻辑来确定条目的类型。我想有更好的方法来做到这一点,但我想不出怎么做。有什么想法吗?

谢谢,乔丹。

2 个答案:

答案 0 :(得分:2)

您可以使用generalization pattern in database design 拥有一个人和团队的基础表,称为摔跤手,关系为1:0 这样的事情:

对于两个竞争对手之间的比赛。 enter image description here

对于多个竞争者:
enter image description here

答案 1 :(得分:0)

看作一场比赛可以由几个人和/或几个团队组成,我可以正确地组建一个"参与者"用于将匹配与人员和团队相关联的表格。 像你这样的东西已经提到过使用Matches,但是我不会把它放到Matches中,因为会有很多"匹配"基于数据,不需要重复的记录,如位置,时间等。

同时因为它会更容易标记" Winner"在参与者表格或其他相关数据上。

类似于:

tblMatches
-matchId
-other data such as location, time, event, or what you think fit.

然后将您的tblMatches更改为

tblParticipant
-matchId
-peopleId
-teamId
-isWinner

现在,我没有摔跤专家,所以我不知道团队化妆的更好的机制,但快速搜索告诉我你的家伙Dean Ambrose是Shield的成员,所以相反在你的例子中有两行给他 - 你可以做到

#eg: 412, 211, 13 (for Dean Ambrose when participating with Shield) 然后在他参与独奏时使用NULL。

所以基本上 - 为了让一个简短的故事更长,我会在你的tblMatches之上插入一个级别,并将匹配重命名为适合你模型的参与者或类似命名。