我在建模某些数据库表时遇到以下问题:
假设我参加了一些比赛(在比赛表中,每个比赛都有唯一的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/