質問

私はデータの保管球統計学という三つのテーブル:選手battingStats、pitchingStats.の目的のために、各プレイヤードバッティングやピッチングstatsなります。

そこまで正常な関係3NF?

役に立ちましたか?

解決

PlayerId BattingStatsとPitchingStatsテーブルの両方の外部キーになります。

[および統計情報の表にいくつかの時間次元(季節、年、ら)を置くことを忘れないでください]

と方法によって、これが悪い前提です:!私の知る限りでは、投手があまりにも、バットに許可されています。

他のヒント

ま本当に必要な利用を超3を参照。 正規化 通常はこの打破、一人の非正規化したモデルで多くの正規化されます。

まで以上の3つのテーブル、もたらすために、以下の( 3NF):

Players:        ([player_id], name, date_of_birth, ...)
Batters:        ([batter_id], player_id)
Pitchers:       ([pitcher_id], player_id)
Batting_Stats:  ([batter_id, time_dimension], stat_1, stat_2, ...)
Pitching_Stats: ([pitcher_id, time_dimension], stat_1, stat_2, ...)

属性 [] を定義する主キーが サロゲートキー ある場合に使用されることが好ましい。の player_id 属性を打者およびピッチが必要 独自の制約, しておりますが、これも 外部キー し、プレーヤーの関係といえます。Batting_StatsとPitching_Statsまた、外部キーを打者やピッチング。

ただし、上記は実施するプレイヤーでなければ見ることができ、衣のみを投.


更新:

一つの方法知っているしを実施するプレイヤーは生地、または、ピッチャーは、このモデル

Players:        ([player_id], name, date_of_birth, ...)
Roles:          ([role_id, role_type], player_id)
Batting_Stats:  ([role_id, role_type, time_dimension], stat_1, stat_2, ...)
Pitching_Stats: ([role_id, role_type, time_dimension], stat_1, stat_2, ...)

role_type 定すべきであるピッチャーやお菓.Batting_StatsとPitching_Statsて複合外部キーに役割を (role_id, role_type).独自の制約 player_id 役割を分担うることを確保するためのプレイヤーをすることはでき、一人。最後に追加 チェックの制約 その Batting_Stats.role_type = 'Batter'Pitching_Stats.role_type = 'Pitcher'.これらのチェックの制約を保証するBatting_Statsも記述番注意して投.についても同様Pitching_Stats.

私は実用的な観点からこれを実装する方法を知っている(私は互いに素テーブルの上にUNION句のビューを作成して、プレイヤーIDに一意のインデックスを入れたい - そのため、彼らは唯一のテーブルに表示することができます)。

またはプレーヤーのテーブルで、レコードの後、彼らが持っている統計情報の種類、および統計テーブルからFKの関係であることを含めます。

しかし、これらのいずれかのより近くしたいよりも金属に思われます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top