Pergunta

Estou armazenando dados sobre estatísticas de beisebol e gostaria de fazê -lo com três mesas: jogadores, batalhas e pitchingstats. Para os fins da questão, cada jogador terá estatísticas de rebatidas ou estatísticas de arremesso, mas não ambas.

Como eu normalizaria esse relacionamento em 3NF?

Foi útil?

Solução

PlayerID seria uma chave estrangeira nas mesas de batttats e pitchingstats

e lembre -se de colocar alguma dimensão de tempo (estação, ano, et al) nas tabelas de estatísticas

E, a propósito, isso é uma má suposição: até onde eu sei, os arremessadores também podem bater!

Outras dicas

Você é realmente necessário para não usar mais de 3 tabelas. Normalização Normalmente implica quebrar um modelo não normalizado em muitas relações normalizadas.

Se você pode ter mais de 3 tabelas, convém considerar o seguinte (em 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, ...)

Atributos em [] definir a chave primária, mas um Chave substituta pode ser usado se preferir. o player_id atributo em batedores e campos deve ter um restrição única, e também deve ser um Chave estrangeira para a relação dos jogadores. Batting_stats e Pitching_stats também devem ter uma chave estrangeira para batedores e arremessos, respectivamente.

Observe, no entanto, que o acima não aplica que um jogador possa ser apenas uma massa ou apenas um arremessador.


ATUALIZAR:

Um método que estou ciente de aplicar que um jogador é apenas um batedor ou apenas um jarro é através deste modelo:

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, ...)

o role_type deve definir um jarro ou uma massa. Batting_stats e pitching_stats devem ter uma chave estrangeira composta para funções usando (role_id, role_type). Uma restrição única em player_id Nos papéis, garantiria que um jogador possa ter apenas um e apenas um, o papel. Finalmente adicione Verifique as restrições de modo a Batting_Stats.role_type = 'Batter' e Pitching_Stats.role_type = 'Pitcher'. Isso verifica a restrição de restrição que o Batting_stats está sempre descrevendo uma massa e observe um jarro. O mesmo se aplica ao pitching_stats.

Sei como implementaria isso de uma perspectiva prática (criaria uma visão sindicalizada sobre as tabelas disjuntos e colocaria um índice único no ID do jogador - portanto, eles só podem aparecer em uma tabela).

Ou na tabela de jogadores, registre que tipo de estatística eles têm e, em seguida, inclua isso no relacionamento FK nas tabelas de estatísticas.

Mas qualquer um deles provavelmente está mais próximo do metal do que você deseja.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top