首页 > 解决方案 > 数据库模式 - 规范化或分组

问题描述

我有一个包含一组玩家的快速数据库模式,我的问题是如何最好地表示这一点。该数据库用于高尔夫预测网站。每场锦标赛都有一个三人组的高尔夫球手名单,这些三人组在一系列 3-4 轮比赛中发生变化。然后,用户可以预测哪些高尔夫球手将赢得三连冠。

例如,我有一个锦标赛 A,其中有 3 个回合。

第一轮有一组:

Group 1: Round 1: Golfer A, Golfer B, and Golfer C
Group 2: Round 1: Golfer D, Golfer E, Golfer F
Group 3: Round 1: Golfer G, Golfer H, Golfer I
....

然后下一轮这些会改变:


Group 1: Round 2: Golfer A, Golfer Y, and Golfer D
Group 2: Round 2: Golfer H, Golfer E, Golfer I
Group 3: Round 2: Golfer C, Golfer Z, Golfer R
...

等等。我目前存储的方式是:

round_groups
------------
id:
competition_id:
round_number:
golfer_1_id:
golfer_2_id:
golfer 3_id:

但是我是否应该将其规范化为:

round_groups
------------
id:
competition_id:
round_number:

round_group_golfers
-------------------
id:
round_group_id
golfer_id

为了完成上下文简介,用户可以预测哪些 gofler 将赢得该组,因此:

user_prediction
---------------
id:
user_id:
round_group_id:
golfer_id:

这显然适用于两种模式选择。我知道允许我扩展到 4 个(甚至 2 个)等组的优势,以及规范化方面,但它真的有必要/第一种方式真的很淘气吗?我真的看不到一个巨大的缺点(除了框架中的一些自动加入机制)这似乎更有意义 - 我的代码可以处理高尔夫球手的加入/合并等关系......

只是确保我没有在这里遗漏一些明显的东西。

非常感谢

缺口

标签: databaseschema

解决方案


在我看来,第一种方式并不调皮,但不那么优雅,更容易改变。如果我必须选择,我会选择对 RDBMS 更“友好”的第二种方式。我想您也可以从中删除idround_group_golfers因为(round_group_id, golfer_id)可以是主键。


推荐阅读