SQL Datenbank aufbauen, Normalformen einhalten

Master1991

Lieutenant
Registriert
Okt. 2007
Beiträge
689
Folgendes:

ich baue momentan gerade aus spaß an einer kleinen Fußballliga verwaltung. Ich weiß es gibt sicher zahlreiche dies ist mehr als Übung gedacht.

Das ganze in Java über JDBC mit SQLite Datenbank. So die Datensätze umfassen nun folgendes:

GameID, TeamNameHost,TeamNameGuest,Gameday,Season,Goal(s)

Das ganze soll nun in eine Datenbank gegossen werden. Unsicher bin ich mich wie ich die Season händle bzw die Gamedays (theoretisch ein ableitbares attribut, nicht aufnehmen?)

Bei der Season bin ich mir unsicher da ja zunächst einmal jede Spielpaarung (theoretisch) in jeder Saison erneut auftauchen kann das heißt sie muss zum Spiel gehören, aber man muss auch die Teams aus einer Saison rausfiltern können. Momentan wäre meine Idee so:

Tabelle Team
(TeamID,TeamName)

Tabelle Player (Für die Spieler die das Tor geschossen haben)
(PlayerID,PlayerName)

Tabelle TeamPlayer (N:M ein team mehrere spieler, ein spieler kann bei mehreren teams gespielt haben)
(TeamID,PlayerID,FromDate)

Tabelle Goal (Wie würdet ihr hier mit einbinden ob es ein Eigentor/Elfmeter war?)
(GoalID,GameID,PlayerID,GameMinute)

Tabelle Game
(GameID,Gameday,TeamHostID,TeamGuestID,Season)


So das wärs. Die Frage ist nun erstelle ich für Season eine neue Tabelle und noch eine TeamSeason tabelle um die Season den Teams zuzuordnen? Und ist es überhaupt möglich Season dann in Game UND TeamSeason als Fremdschlüssel zu referenzieren? Oder geht das gegen irgendwelche richtlinien und hat anomalien zur folge?

Liebe Grüße
 
Für die Art der Tore würde ich noch eine Tabelle GoalType (Id, Type) erstellen und in der Tabelle Goal die GoalTypeId referenzieren. Dann könnte man noch so Sachen wie Kopfball, Freistoßtor usw. einbauen.

Was die TeamSeason Sache angeht, wüsste ich nicht warum das nicht funktionieren sollte. Habe ähnliche Szenarien mit C# + MSSQL gebaut und hatte bisher keine Probleme. Ist ja einerseits eine 1:n (Season : Game) und andererseits eine n:m (Season : Team), also eigentlich nichts ungewöhnliches.

Edit:
Man könnte anstatt der Tabellen Goal und GoalType auch die Tabellen Event und EventType erstellen und somit Tore, Karten, (verschossene) Elfmeter, Auswechslungen usw. eintragen.
 
Zuletzt bearbeitet:
Okay, das hört sich schonmal gut an, dann werde ich eine seperate Tabelle für die Season anlegen=).


Die Idee mit der Event Tabelle hört sich auch gut an, darüber hatte ich gar nicht nachgedacht da ich ursprünglich nur Tore und keine Karten aufnehmen wollt. Aber das wäre ja eine gute Lösung beides zu tun:)

Danke:)
 
Ich würde noch die Event Tabelle um eine zweite PlayerID ergänzen, also einmal ausführender Spieler und einmal passiver Spieler oder wie man es nennen möchte.

Beispiele:
Event gelbe karte, Spieler 1 foult Spieler 2
Event Tor, Spieler 1 trifft gegen Spieler 3 (der Torwart)
Event Wechsel, Spieler 4 kommt für Spieler 1

Sonst musst du das selbe Event immer aus zwei Perspektiven vermerken und hast doppelte Daten.

Mindestens die zweite SpielerID ist dann nullable für Aktionen an denen nur einer beteiligt ist.
 
Zurück
Oben