【问题标题】:Database modelling of prizes table that allows customization per contest奖品表的数据库建模,允许对每个比赛进行定制
【发布时间】:2013-07-18 07:12:31
【问题描述】:

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

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

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

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

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

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

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

就性能和在奖品中添加其他信息的灵活性而言,您最喜欢哪种解决方案? 你有其他建议吗?

【问题讨论】:

    标签: mysql sql database-design


    【解决方案1】:

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

    奖牌类型

    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
    

    【讨论】:

    • 这很像我的第二个解决方案。我将继续实施这样的事情。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多