奖品表的数据库建模,允许每个比赛进行自定义

时间:2013-07-18 07:12:32

标签: mysql sql database-design

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

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

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

另一个要求是能够在任何比赛中选出所有赢得金牌的球员(基本上忽略定制)

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

  1. 在奖品表中,除了主键外,还添加了另一个半唯一的键。虽然每个定制的金牌都有不同的主键,但它们仍然会共享相同的半独特键(让我们称之为标签)。 通过这种方式,我可以为奖品自定义任何列,但仍然可以选择所有金牌获胜者(使用公共标签)。

  2. 将prizes表分成两部分:不可变数据和可变(可自定义)数据。 这样,我可以为金牌提供一个唯一的主键,但在可变数据表中可以在多行中找到ID。在此表中,主键是奖品ID和竞赛ID的组合。

  3. 您最擅长哪种解决方案的性能以及为奖品添加其他信息的灵活性? 你有别的建议吗?

1 个答案:

答案 0 :(得分: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