Mysql 奖品表的数据库建模,允许定制每场比赛

Mysql 奖品表的数据库建模,允许定制每场比赛,mysql,sql,database-design,Mysql,Sql,Database Design,我在对一些数据库表建模时遇到以下问题: 假设我有一些比赛(在一个比赛表中,每个比赛都有一个唯一的id),在每个比赛中,他们都会给运动员一些奖品。共有3个奖项(金、银、铜),每个奖项都有一个标题、一个徽标图像以及未来可能的其他数据 但是,在一些比赛中(基于比赛id),我希望能够定制一些奖品的徽标或标题。如果奖品不是定制的,它们只会有一些默认值 另一个要求是能够选择在任何比赛中获得金牌的所有球员(基本上忽略定制) 到目前为止,我的解决办法是: 在奖品表中,除了主键之外,添加另一个半唯一的键。尽管每个

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

假设我有一些比赛(在一个比赛表中,每个比赛都有一个唯一的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
    

    这与我的第二个解决方案非常相似。我将继续执行类似的操作。谢谢