我在为某些数据库表建模时遇到以下问题:
假设我有一些比赛(在比赛表中,每个比赛都有一个唯一的ID),并且在每场比赛中他们都会给球员一些奖品。有3个奖项(金,银,铜),每个奖项都有标题,徽标图像以及未来的其他数据。
然而,在某些比赛中(基于比赛ID)我希望能够自定义某些奖品的徽标或标题。如果奖品没有定制,他们只会有一些默认值。
另一个要求是能够在任何比赛中选出所有赢得金牌的球员(基本上忽略定制)
到目前为止我的解决方案是:
在奖品表中,除了主键外,还添加了另一个半唯一的键。虽然每个定制的金牌都有不同的主键,但它们仍然会共享相同的半独特键(让我们称之为标签)。 通过这种方式,我可以为奖品自定义任何列,但仍然可以选择所有金牌获胜者(使用公共标签)。
将prizes表分成两部分:不可变数据和可变(可自定义)数据。 这样,我可以为金牌提供一个唯一的主键,但在可变数据表中可以在多行中找到ID。在此表中,主键是奖品ID和竞赛ID的组合。
您最擅长哪种解决方案的性能以及为奖品添加其他信息的灵活性? 你有别的建议吗?
答案 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