数据库设计NBA

时间:2013-03-29 16:29:06

标签: python database relational

我是数据库设计的新手,很抱歉,如果这是一个明显的初学者问题。我使用python和sqlalchemy虽然我不认为这是相关的(下面的示例代码是伪代码),但可能是错误的。我已经查看过一些先前的问题,并没有看到这个问题。无论如何,关于这个问题。这里的目标是开发一个NBA信息数据库,该数据库将包含所有比赛的信息以及每个每个球员的每个比赛的得分。可以通过几种方式设计此DB。

Game(game_id, date, home_name, away_name, score)
Box_Score(game_id, player_name, date, points, rebounds)

在这种情况下,如果我想获得洛杉矶湖人队所有的比赛,我可以做到

query(Game).filter(home_name=="lakers" or away_name=="lakers").all()
query(Box_Score).filter(player_name="kobe bryant")

以下是如何设计此数据库的第二个选项:

Game(game_id, date, home_name=(foreignkey=Team.team_name), away_name, score)
Box_Score(game_id, player_name=foreignkey=Player.player_name), date, points, rebounds)
Team(team_name, home_games=relationship("Game"))
Player(player_name, box_scores=relationship("Box_Score"))

然后我可以做

query(Team).filter(name=="lakers").first().games
query(Player).filter(name=="kobe bryant").first().box_scores

一方面,似乎使用关系数据库的重点是像情况#2那样设置它。另一方面,我不确定它给了我什么额外的功能。所以我想我的问题是,你推荐哪种设计?这两种设计都有一些好处或缺点,这些优点在我看不到的情况下会变得明显吗?如果你推荐不使用表关系的简单设计#1,为什么我存储了大量相关信息但不需要使用关系数据库?谢谢!

1 个答案:

答案 0 :(得分:0)

任何数据库的理想数据模型都是非常主观的。如果您不熟悉数据库设计,那么在之后创建应用程序并对其进行长时间测试之前,您可能找不到理想的模式。我建议您阅读一些设计基础知识,特别是Database Normalization,因为您可能会受益于高度规范化的架构,其中数据可以通过多种不同的方式引用。高度规范化的数据库可能会在性能部门受到影响(如果它看起来不那么大),但您可以通过使用Materialized Views或其他缓存方法来对数据进行反规范化。