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")

このデータベースを設計する方法の 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 をお勧めする場合、適切な量の関連情報を保存しているのに、リレーショナル データベースを使用する必要がないのはなぜですか? ありがとう!!

4

1 に答える 1

0

データベースの理想的なデータ モデルは、非常に主観的なものです。データベース設計に慣れていない場合は、アプリケーションを作成して長期間にわたってテストするまで理想的なスキーマを見つけることができないでしょう。データをさまざまな方法で参照できる、高度に正規化されたスキーマの恩恵を受ける可能性があるため、いくつかの設計の基本、特にDatabase Normalizationを読むことをお勧めします。高度に正規化されたデータベースは、非常に大規模な場合 (これはそうではないようです)、パフォーマンス部門で問題が発生する可能性がありますが、マテリアライズド ビューまたはその他のキャッシュ方法を使用して、いつでもデータを非正規化できます。

于 2013-03-29T16:46:34.707 に答える