1

如果这是一个明显的初学者问题,我是数据库设计的新手,很抱歉。我使用 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,为什么我要存储大量相关信息但不需要使用关系数据库?谢谢!!

4

1 回答 1

0

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

于 2013-03-29T16:46:34.707 回答