Python 数据库设计

Python 数据库设计,python,database,relational,Python,Database,Relational,我是数据库设计新手,如果这是一个明显的初学者问题,我很抱歉。我使用python和sqlalchemy,虽然我认为这不相关(下面的示例代码是psuedo代码),但可能是错误的。我已经浏览了以前的一些问题,但没有看到这个问题得到解决。不管怎么说,我来回答这个问题。这里的目标是开发一个NBA信息数据库,其中包含所有比赛的信息,以及每名球员每场比赛的方块分数。有几种方法可以设计这个数据库 Game(game_id, date, home_name, away_name, score) Box_Score

我是数据库设计新手,如果这是一个明显的初学者问题,我很抱歉。我使用python和sqlalchemy,虽然我认为这不相关(下面的示例代码是psuedo代码),但可能是错误的。我已经浏览了以前的一些问题,但没有看到这个问题得到解决。不管怎么说,我来回答这个问题。这里的目标是开发一个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,为什么我存储了大量相关信息,但不需要使用关系数据库?谢谢

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

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