0

競馬の時間を保存するように設計されたデータベースがあります。現在、私はRaceテーブルとテーブルを持っていRaceTimesます。それぞれに 5 つの分数時間と 5 つの分割時間があります。RaceTimeテーブルにはRace外部キーも含まれます。

例えば:

RaceTimeテーブル:

    RaceTime_id (primary key)
    Race_id  (foreign key)
    TimeValue  (time stored in 100th of seconds)
    PointOfTime (i.e. 1/4 mile, 1/2 mile, etc.)
    Which (where which is an integer between 1 and 5)

各レースに 5 回と 5 つのスプリットがあるとすると、このアプローチは各レースに 10RaceTimeのレコードを生成します。あるいは、Fraction1、Fraction2....Fraction5 および Split1、Split2...Split5 を含むデータベース構造を作成することもできます。このアプローチでは、Raceレコードとレコードの間に 1 対 1 の一致がRaceTimeあり、RaceTimeテーブルの行数がはるかに少なくなります。

私の読書と調査により、最初のアプローチが望ましいと信じるようになりました。このデータはより正規化されていると思います。テーブルのサイズの違いで少し間があいていると思いますが、おそらく長いテーブルと広いテーブルの間のトレードオフです。

そうは言っても、私はこれらの問題に精通している人々からの意見を得たいと思っていました. ご意見ありがとうございます。

4

2 に答える 2

1

テーブルで実行しているクエリの種類に大きく依存します。コード サンプルが示すようにテーブルを正規化するJOINと、特定のレースのデータを取得するために追加の処理が必要になります。データベースのインデックスが適切に作成されている場合、これはそれほど遅くはありませんが、少し余分な作業が必要です。

ただし、特定のレースに 5 つの多かれ少なかれスプリット/フラクションがあると確信している場合は、それを非正規化するとSplit1...Split5パフォーマンスがわずかに向上しますが、そうする必要がある場合は非常に苦痛になります。 (たとえば) 6 番目の分割を追加します。

あなたの電話; あなたのアプリに何が最適かを知ることができるのはあなただけです。

于 2015-09-12T09:27:09.367 に答える