Mysql 如何实现2对n关系表

Mysql 如何实现2对n关系表,mysql,database,sqlite,database-design,Mysql,Database,Sqlite,Database Design,我正在实现一个应用程序,它计算锦标赛期间球员的积分,在数据库中,我有一个球员表和一个比赛表,每场比赛有“2”名球员,一名球员可以打“n”场比赛,我应该在表匹配中添加两列“player1”和“player2”,还是创建另一个表匹配\u玩家,并引用match和players?考虑到这个设计问题,您做的是正确的。第一范式(1NF)的规则是,没有重复字段,这通常是一个好规则,但并不总是一个好规则 如果存在重复字段,但重复的数量肯定是固定的,则1NF的这一方面是过度杀伤力 例如,你可以有一个包含playe

我正在实现一个应用程序,它计算锦标赛期间球员的积分,在数据库中,我有一个球员表和一个比赛表,每场比赛有“2”名球员,一名球员可以打“n”场比赛,我应该在表匹配中添加两列“player1”和“player2”,还是创建另一个表匹配\u玩家,并引用match和players?

考虑到这个设计问题,您做的是正确的。第一范式(1NF)的规则是,没有重复字段,这通常是一个好规则,但并不总是一个好规则

如果存在重复字段,但重复的数量肯定是固定的,则1NF的这一方面是过度杀伤力

例如,你可以有一个包含player1、player2、score1和score2的比赛表,这样就可以了

你也可以有一个比赛表,一个每个球员每场比赛都有一条记录的球员比赛表,以及球员ID和分数的字段。在这种方法中,你需要一些额外的逻辑来确保每场比赛只有2名球员,假设这很重要


虽然我尊重1NF作为设计原则,但工程设计主要是判断。如果你认为不太可能改变两名球员,或者如果发生这种情况,可以很容易地适应,并且更容易确保正确性(每场比赛2名球员,每场比赛仅2名球员),请务必这样做

match表是否包含除玩家之外的其他内容?不,它只有一个id,玩家idi完全同意最后一条语句,设计也可以根据RDMS对SQL标准的支持而定。。如果一个RDMS例如支持<代码>检查(带有子查询)/从ISO SQL -92创建断言< /代码>,那么您可以考虑使用“<代码> 1NF< /代码>”(标准化),因为您可以限制每个数据库中的本地匹配的玩家。或者,大多数RDM都支持相同的触发器。。