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

假设我参加了一些比赛(在比赛表中,每个比赛都有唯一的ID),并且在每次比赛中,他们都会给玩家一些奖励。共有3个奖项(金,银,铜奖),每个奖项都有标题,徽标图像以及将来的其他数据。

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

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

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


在奖品表中,除了主键外,还要添加另一个半唯一的键。尽管每个定制的金牌都有不同的主键,但它们仍将共享相同的半唯一键(我们称之为标签)。
这样,我可以自定义奖品的任何列,但可以选择所有金牌得主(使用通用标签)。
将奖品表一分为二:不可变数据和可变(可自定义)数据。
这样,我可以为金牌拥有一个唯一的主键,但是在可变数据表中,可以在几行中找到ID。在此表中,主键是奖赏ID和竞赛ID的组合。


就性能以及在向奖品添加其他信息方面的灵活性而言,您最喜欢哪种解决方案?
您是否建议其他方式?

最佳答案

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

奖牌类型

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

关于mysql - 奖品表的数据库建模,允许按竞赛进行自定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17716890/

10-12 06:55