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

Database design 数据库结构-来自多个表的项,database-design,database-schema,Database Design,Database Schema,我正在创建一个用于存储摔跤比赛的数据库,并且在如何构建数据库方面遇到了难题。感谢任何人的帮助 我有以下表格: tblPeople将包含我所有的摔跤手 tblPeople - personId - personName #eg: "211", "Dean Ambrose" tblTeams将包含特定的标记团队 tblTeams - teamId - teamName #eg: "13", "Shield" tblPeopleInTeams将人员与团队联系起来 tblPeo

我正在创建一个用于存储摔跤比赛的数据库,并且在如何构建数据库方面遇到了难题。感谢任何人的帮助

我有以下表格:

tblPeople将包含我所有的摔跤手

tblPeople
  - personId
  - personName 
    #eg: "211", "Dean Ambrose"
tblTeams将包含特定的标记团队

tblTeams
- teamId
- teamName
  #eg: "13", "Shield"
tblPeopleInTeams将人员与团队联系起来

tblPeopleInTeams
- peopleInTeamsId
- teamId
- peopleId
  #eg: "1", "13", "211"
TBL比赛将包含比赛细节,并需要反映所涉及的人员或团队

我不确定如何组织TBL比赛,以便它可以引用个人或团队。例如,一场比赛可以有“迪安·安布罗斯”或“盾牌”作为竞争对手

我可以做到:

tblMatches
- matchId
- peopleId
- teamId
  #eg: "412", "211", NULL (for Dean Ambrose)
  #eg: "412", NULL, "13" (for Shield)
但要使用它,我只需要填充其中一个字段,并在应用程序中使用条件逻辑来确定条目的类型。我想有更好的方法可以做到这一点,但我想不出怎么做。有什么想法吗


谢谢,乔丹

鉴于一场比赛可能由几个人和/或几个团队组成,我会适当地制作一个“参与者”表,将比赛与人和团队关联起来。 您已经提到了如何处理匹配,但我不会将其放入匹配中,因为也会有大量基于“匹配”的数据,这些数据不需要重复的记录,例如位置、时间等

也因为这样,在参与者表或其他相关数据上标记“获胜者”会更容易

比如:

tblMatches
-matchId
-other data such as location, time, event, or what you think fit.
然后将您的TBL匹配更改为

tblParticipant
-matchId
-peopleId
-teamId
-isWinner
当然,我不是摔跤专家,所以我不知道更精细的团队组成机制,但快速搜索告诉我,你的人迪恩·安布罗斯是盾牌的成员,所以你不用在你的比赛中为他安排两排,你可以这样做

#例如:412、211、13(供迪安·安布罗斯参加盾牌时使用)
然后当他单独参与时使用空值

因此,基本上-为了使短篇故事更长,我会插入比TBL匹配更高的级别,并将匹配重命名为参与者或适合您模型的类似命名。

您可以使用。
为名为摔跤手的个人和团队提供1:0关系的基本表。
类似这样的内容:

为两名参赛者设计的比赛。

对于多个竞争对手:

谢谢艾伦。添加中间表是有意义的。如果我要添加一个团队,那么我不想包括个人,因为我会从tblPeopleInTeams中提取这个,所以它必须是一个或另一个。有没有一种方法可以将规则添加到数据库中,以便只允许其中一个规则,或者这些规则需要驻留在应用程序层中?我想在屏幕上显示“Shield(Dean Ambrose,Seth Rollins&Roman Reins)vs.Daniel Bryan”。你可以设置约束,使你能够控制这样的东西,是的。嗨,Mohsen,谢谢你的回答,但是这不就是把空值的需要降低到另一个层次吗?摔跤手的桌子是如何构造的?嗨,不会有空的。摔跤手将有一个名字和一个类型字段,该类型将显示摔跤手是个人还是团队,摔跤手桌上的pk将是团队和个人的pk,根据摔跤手的记录,摔跤手桌上的pk将记录在个人或团队桌上。啊,我现在知道了。谢谢你,莫森,我认为这会非常有效。我们将很快试一试并确认。再次感谢!