【问题标题】:Database Design NBA数据库设计 NBA
【发布时间】:2013-03-29 16:29:05
【问题描述】:

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

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,为什么我要存储大量相关信息但不需要使用关系数据库?谢谢!!

【问题讨论】:

  • 为什么我的问题被否决了?
  • 如果您仍然有兴趣讨论这个问题,这是我正在进行的一个项目,我确实提出了一个设计,但比您最初指出的更规范

标签: python database relational


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2011-09-30
    • 2011-01-12
    • 2010-11-29
    相关资源
    最近更新 更多