数据库建模

时间:2012-10-05 10:30:47

标签: database database-design

我正在尝试在数据库中模拟体育比赛..

我有以下表格

[sport_game]
sport_game_id
sport_game_type_id
name
description

[sport_game_instance]
sport_game_instance_id
sport_game_id
start_time
end_time

[sport_game] 1 - M [sport_game_instance]

[sport_game_type]
sport_game_type_id
type  -- professional, semi-pro, college..etc

[sport_game] M - 1 [sport_game_type]

[basketball]
basketball_id
sport_game_typeid
basketball_info

[basketball] 1 - 1 [sport_game_type]    

[baseball]
baseball_id
sport_game_type_id
baseball_info

[baseball] 1 - 1 [sport_game_type]  

我不是百分百肯定将类型表链接到特定的运动;我有时认为它有效,但我不确定。

我希望它能够拥有一组具有通用信息的核心类,例如[sport_game],[sport_game_instance]。

使用[运动游戏类型]我可以修改并添加更多运动;它是我不确定的单独表格。我想将它们分开意味着任何与运动相关的东西,然后我可以加入这些表格,如果我需要的话。

您怎么看?

1 个答案:

答案 0 :(得分:0)

你肯定不希望每项运动都有单独的牌桌。为什么呢?

  1. 您的应用程序将扩展并扩展得非常差。您知道多少运动在头顶?每增加一个新的,你都会创建一个新表?谁将会管理这个过程?我不知道这个过程是在您的构建中,但我的DBA肯定不会将我的应用程序的DDL权限交给我在我的应用程序中创建数据库对象。

  2. 报告将是一件苦差事。您需要遍历n表,而不是单个select语句和按运动类型过滤的where子句。获取有关n运动的任何信息。一点都不好。您将从不能够知道您支持多少sports_types,而无需询问某人或在您创建了多少个sports_types表格的帖子。

  3. 如果游戏特定领域非常重要,你可以用JSON或XML来模板化(我希望这是一个词)特定于游戏的数据(我投票支持XML,因为它具有多功能性,并通过{{1 }})。您的模板可以是

    1. 每种特定运动类型的模板。所以你会有

      XPath
    2. 每个sport_game的模板(篮球,足球等特定游戏)。所以你会有

       sport_templates(
       sport_type_id FOREIGN KEY REFERENCES...
       sport_template_specs VARCHAR2(300)
        )
      
    3. 两者的组合 sport_game_instance( sport_game_instance_id sport_game_id sport_game_template_specs start_time end_time) spec是对包含预定义模板的父表的FK引用。

    4. 或者,您可以使用某种EAV表格将sport_game_template映射到sport_type_attr,如

      sport_type_attr_value

      显然 sport_type_id sport_type_attr sport_type_attr_value 1 bathroom_breaks 2 1 cheerleaders_permitted 350 是定义sport_type_id的父表的FK引用