0

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

我有以下表格

[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]  

我不能 100% 确定将类型表与特定运动相关联;我有时认为它有效,但我不确定。

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

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

你怎么看?

4

1 回答 1

0

您当然不希望每项运动都有单独的表格。为什么?

  1. 您的应用程序将非常糟糕地扩展和扩展。你对多少运动一窍不通?随着每一个新的添加,您将创建一个新表?谁来管理这个过程?我不知道该过程是否在您的构建中,但我的 DBA 肯定不会将 DDL 权限授予我的应用程序以从我的应用程序中创建数据库对象。

  2. 报告将是一件苦差事。您将不得不遍历n表来获取有关n运动的任何信息,而不是使用单个 select 语句和 where 子句来按运动类型进行过滤。一点都不好。您将永远无法知道您支持多少 sports_types,而无需询问某人或在某处张贴您创建了多少 sports_types 表的便利贴。

如果游戏特定字段非常重要,您可以模板化(我希望这是一个词)JSON 或 XML 中的游戏特定数据(我投票支持 XML 是因为它的多功能性和现成的 DB 支持XPath)。您的模板可以是

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

     sport_templates(
     sport_type_id FOREIGN KEY REFERENCES...
     sport_template_specs VARCHAR2(300)
      )
    
  2. 每个 sport_game 的模板(篮球、足球等特定游戏)。所以你会有

     sport_game_instance(
     sport_game_instance_id
     sport_game_id
     sport_game_template_specs
     start_time
     end_time)
    
  3. 两者的组合,其中sport_game_templatespec 是对包含预定义模板的父表的 FK 引用。

或者,您可以拥有某种映射sport_type_attr到的 EAV 表,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 参考sport_type

于 2012-10-07T01:08:21.693 回答