私はデータベース設計に慣れていないので、これが明らかな初心者の質問である場合は申し訳ありません. 私は 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")
このデータベースを設計する方法の 2 番目のオプションは次のとおりです。
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 をお勧めする場合、適切な量の関連情報を保存しているのに、リレーショナル データベースを使用する必要がないのはなぜですか? ありがとう!!