2016-05-03 3 views
-1

Gibt es etwas grundsätzlich falsch mit meiner Tabelle Datenbankrelationen?

Wäre dies das richtige Layout für ein Diagramm als solches? Einige dieser Tabellen haben denselben Primärschlüssel, aber ich bin mir nicht sicher, ob dies die beste Praxis/richtige Beziehung ist, die ich festlegen sollte.

Es ist für eine lokale Ebene, wobei die Spieler die Teams nicht wechseln und die Spielerpositionen als endgültig betrachten. Ziel ist es, Statistiken zu sammeln, die später zur Analyse angezeigt werden.

+0

Was passiert, wenn ein Spieler mehrere Positionen spielen kann? – VikingBlooded

+0

@NathanHughes Eigentlich erlaubt "Squad" nur eine Zeile pro Team – Lamak

+1

Die große Frage ist, was sind Ihre Bedürfnisse. Fußballstatistiken können sehr detailliert sein und nur Spielstände enthalten. Ihr Diagramm scheint nicht mit Spielern zu funktionieren, die Teams oder Positionen wechseln, oder Spieler, die eine andere Position spielen als die, an die sie gewöhnt sind, usw. '. Ich habe in der Vergangenheit an einer Fußballstatistik-Anwendung gearbeitet, meine Datenbank war weit, viel aufwendiger als diese. –

Antwort

1

Die Tabelle Squad sollte eine Verknüpfungstabelle sein, die eine Beziehung zwischen Players und Team erstellt. Da jede Kombination Player/Team nur einmal vorkommen kann, sollten beide Spalten Team_ID und Player_ID Teil des Primärschlüssels sein.

Squad sollte auf der n-Seite von zwei Beziehungen sein. Sein Name sollte wahrscheinlich etwas wie Membership sein.


Warum brauchen Sie einen separaten PlayerStatistics Tisch? Anscheinend speichert es Statistiken für die gleichen Player_ID/Team_ID-Kombinationen wie Squad. Die Felder dieser Tabelle sollten in die Tabelle Squad gehen.


Sollte nicht die Positions per Mitgliedschaft sein? Eine Position pro Mitgliedschaft, d.h. ein Spieler hat eine definierte Position in jeder Mannschaft, in welchem ​​Fall Position_ID eine Spalte in Squad sein sollte.


sollten zwei Beziehungen werden zwischen Team und MatchStatistics. Eine auf Home_team_ID und eine auf Away_team_ID.


enter image description here


Alternativ könnten Sie die PlayerStatistics-Player und Match und damit speichern assoziieren, was jeder Spieler in jedem einzelnen Spiel getan hat. Sie würden dann die Gesamtstatistik des Spielers oder die Spieler-pro-Team-Statistiken durch entsprechende Abfragen abrufen.

+0

Ich sehe nicht, wie die 'Squad'-Tabelle eine Viele-zu-viele-Beziehung erzeugt, ihr Primärschlüssel ist' Team_Id', daher kann sie mit der 'Team'-Tabelle zusammengeführt werden – Lamak

+1

Das aktuelle Design des OP ist falsch. Wie ich in meiner Antwort sage, sollte der PK (Player_ID, Team_ID) sein. Der Zweck ist es zu sagen, welcher Spieler in welcher Mannschaft ist und jeder Spieler kann in mehreren Mannschaften sein und jede Mannschaft kann mehrere Spieler haben. Aus diesem Grund ** sollte ** eine Viele-zu-Viele-Beziehung schaffen. –

+0

Okay, ich habe mein Layout so geändert, dass es zu deinem passt, aber ich habe auch eine 'LeagueTable' eingetragen, die eine Team_ID hat, die als Fremdschlüssel mit der Team_ID des Teams verbunden ist. Inside-Mitgliedschaft, welchen Wert verwende ich für is-identity? Außerdem habe ich eine Button-Einfügemethode, die einen Teamnamen für Team eingibt, aber ich möchte, dass ein Datensatz (mit derselben Team_ID) in meiner 'LeagueTable' erstellt wird (der Rest der Werte kann null sein mit Ausnahme des Primärschlüssels League_ID) –

0

Verschwunden in meinem Kopf, wenn Sie einige seltsame Anforderungen haben.

Mit diesem Design ist ein Kader auf einen einzelnen Spieler beschränkt.

Team_ID ist mit Statistiken (nicht Player) verknüpft. Wenn Sie möchten, dass ein Spieler mit einem einzelnen Team verbunden ist, dann tun Sie das in Players. Und dann sollten Sie eigentlich Statistiken mit Spielern zusammenführen.

Ein Link auf PK zu PK zwischen zwei Tabellen ist selten ein richtiger Entwurf.

Wenn Sie möchten, dass ein Spieler in mehreren Teams spielen kann, dann haben Sie PlayerID, TeamID einen zusammengesetzten Schlüssel in Statistics.

Sie müssen die Anforderungen für eine ordnungsgemäße Überprüfung offen legen. Squad ist eindeutig vermasselt, aber Sie haben nicht den Zweck des Squads angegeben.

Verwandte Themen