どうでしょ正常化の一対一のや、その他の関係?
-
21-09-2019 - |
質問
私はデータの保管球統計学という三つのテーブル:選手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の関係であることを含めます。
しかし、これらのいずれかのより近くしたいよりも金属に思われます。