0

我在建模一些数据库表时遇到以下问题:

假设我有一些比赛(在比赛表中,每个比赛都有一个唯一的 id),并且在每场比赛中他们都会给玩家一些奖品。有 3 个奖项(金、银、铜),每个奖项都有一个标题、一个标志图像以及未来可能的其他数据。

但是,在某些比赛中(基于比赛 ID),我希望能够自定义某些奖品的徽标或标题。如果奖品不是自定义的,它们只会有一些默认值。

另一个要求是能够选择在任何比赛中获得金牌的所有玩家(基本上忽略自定义)

到目前为止,我的解决方案是:

  1. 在 Prizes 表中,除了主键之外,还添加了另一个半唯一键。虽然每个定制的金牌都有不同的主键,但它们仍然会共享相同的半唯一键(我们称之为标签)。这样,我可以为奖品自定义任何列,但保留选择所有金奖得主的能力(使用通用标签)。

  2. 将奖品表一分为二:不可变数据和可变(可定制)数据。这样,我可以为金牌获得一个唯一的主键,但在可变数据表中,可以在多行中找到该 ID。在此表中,主键将是奖品 ID 和竞赛 ID 的组合。

您最喜欢哪种解决方案在性能方面以及在将其他信息添加到奖品方面的灵活性方面?你建议另一种方式吗?

4

1 回答 1

0

我建议采用标准化表格设计。

Medal_Types

id | type 
-----------
1  | gold
2  | silver
3  | bronze

比赛

id | name      | date        | any-other-info
----------------------------------
1  | wimbeldon | 2013-07-05  | asdfsdf
1  | Devis cup | 2013-06-08  | sdfsd f

奖品

id | contest_id | medal_type_id | logo | title
------------------------------------------------
1  | 1          |1              |abc    | abc
1  | 1          |2              |def    | winner2
1  | 1          |3              |ghi    | winner3
1  | 2          |1              |abc    | winner1
1  | 2          |2              |adf    | winner2
1  | 2          |3              |aad    | winner3
于 2013-07-18T08:54:27.047 回答