正确标准化玩家匹配

时间:2015-01-22 12:41:31

标签: sql database-design relational-database normalization

每场比赛有14名球员。

我目前拥有它,所以我在匹配表中输入了14个条目,如下所示:

matchID    bookingID    playerID
1          1            1
1          1            2
1          1            3
1          1            4

这是否可以,或者更喜欢这样做:

matchID    bookingID    playerID1    playerID2    playerID3    playerID4
1          1            1            2            3            4

1 个答案:

答案 0 :(得分:0)

否,此上下文中的“规范化”意味着您需要创建多个表格,MatchMatchPlayerBookingPlayer彼此相关在他们的主键上。例如:

Match表:

MatchID    BookingID
---------------------

PlayerMatch表:

MatchID    PlayerID
-------------------

Booking表:

BookingID
----------

Player表:

PlayerID
--------

现在MatchIDMatch表中的主键,它是MatchPlayer表中的外键,PlayerIDPlayer中的主键。 {1}}表,它是MatchPlayer表中的外键。这在比赛和球员之间创造了“多对多”的关系,因为可以有多个比赛,玩家可以参加,并且在给定的比赛中显然有多个球员。

此外,BookingIDBooking表中的主键,它是Match表中的外键,在这种情况下,有一个“一对多”预订和比赛之间的关系,因为每次预订可以有多个比赛。

例如,这种方法允许您为每个玩家提供一个记录,这样您就可以获得有关玩家的其他信息,而无需在Match表格中不必要地重复该信息,例如名字,姓氏,年龄,性别等。同样,它允许您拥有一个记录,其中包含有关预订的信息,如日期,地点名称等。

鉴于您当前的示例,由于您没有关于播放器和预订的任何其他信息,因此似乎没有必要进行规范化,但似乎您的架构可以快速扩展以涉及更多信息。