1

ローラーダービーリーグの試合を追跡するためのデータモデルを作成しています。ラップタイム、ラップごとのペナルティ、期間ごとのペナルティ、試合ごとのペナルティなどを追跡します。

問題は、場合によっては、全体的なデータしか持っていないことです。ある試合には「試合ごとのペナルティ」があり、別の試合には「期間ごとのペナルティ」があるかもしれません。したがって、最低レベルでは、一部の試合について、非常に詳細なデータ(おそらく、ペナルティ)があり、最高レベルでは、試合ごとのペナルティがあります。

一部のレコードの詳細がわからない場合に、これをモデル化/使用してレポートを作成する方法がわかりません。私はこのようなことを考えました:

PenaltiesPerMatch MatchID PenaltyCount

PenaltiesPerPeriod MatchID PeriodID PenaltyCount

PenaltiesPerLap MatchID PeriodID LapID PenaltyCount

しかし、私の懸念は、より高いレベルの情報がより低いレベルから導き出される可能性があるということです。レコードを複製しますか(たとえば、期間ごとのペナルティのレコードに、期間ごとに合計されたラップごとのペナルティのデータを入力しますか?)、または一意のレコードを保持しますか(すでにペナルティが設定されているデータの期間ごとのペナルティを入れないでください)ラップごと;期間を合計して計算します)。

4

3 に答える 3

2

私がすることはあなたが持っている情報を記録することです。一部の試合では、詳細を記録し、他の試合では詳細を記録します。

試合について報告するとき:

  • 詳細な一致の一致ごとの合計を計算します
  • 詳細度の低い一致からの一致ごとの合計を使用します

あなたが持っている最も低い詳細レベルでデータを保存します。より高い詳細レベルを計算します。

于 2009-05-20T17:44:29.343 に答える
1

情報を1つのテーブルに保存できます。NULL値は、そのレベルまでのデータがないことを示します。その上に主キーを配置することはできないため、代理キーが必要になりますが、一意の制約を使用できるはずです。

例えば:

CREATE TABLE PenaltyCounts
(
    penalty_count_id INT NOT NULL,
    match_id         INT NOT NULL,
    period           TINYINT NULL CHECK (period BETWEEN 1 AND 3),
    lap              SMALLINT NULL,
    penalty_count    SMALLINT NOT NULL,
    CONSTRAINT PK_PenaltyCounts PRIMARY KEY NONCLUSTERED (penalty_count_id),
    CONSTRAINT UI_PenaltyCounts UNIQUE CLUSTERED (match_id, period, lap),
    CONSTRAINT CK_lap_needs_period CHECK (lap IS NULL OR period IS NOT NULL)
)

まだ簡単な解決策が見当たらないこの問題の1つは、ペナルティを1つのレベルでしか入力できないようにする方法です。たとえば、彼らはまだこれを行うことができます:

INSERT INTO PenaltyCounts (penalty_count_id, match_id, period, lap, penalty_count)
VALUES (1, 1, NULL, NULL, 5)
INSERT INTO PenaltyCounts (penalty_count_id, match_id, period, lap, penalty_count)
VALUES (2, 1, 1, NULL, 3)
INSERT INTO PenaltyCounts (penalty_count_id, match_id, period, lap, penalty_count)
VALUES (3, 1, 2, NULL, 2)

この単一テーブルソリューションの利点は、1つのテーブルをクエリすることですべての統計を見つけることができ、GROUPBYがすべてをうまくロールアップすることです。

別のテーブルメソッドを使用することもできますが、それらの上にビューを配置してすべてをまとめます。これにより、複数のレベルで数値を入力しても、上記の問題が発生する可能性があります。

于 2009-05-20T18:17:18.077 に答える
0

お客様にとってどのような情報が価値があるかによると思います。彼らが期間ごとの情報を知りたい場合は、それを別の記録として含める必要があります。期間別と試合別のペナルティは分離する必要があります。

私はいつも期間情報によるペナルティがありました、そしてあなたはデータを合計するクエリをすることができました。

期間が常に固定数である場合は、期間情報を保持するために、新しいテーブルの代わりにテーブルで2つの列を実行することができます。

于 2009-05-20T17:46:00.743 に答える