Frage

Ich habe 2 Datenbanktabellen:Teams und Spiele.

Bei dieser Frage geht es um Fußballmannschaften und -spiele.

In jedem Spiel gibt es genau zwei Mannschaften, im Allgemeinen eine Heimmannschaft und eine Auswärtsmannschaft, obwohl gelegentlich beide Mannschaften neutral sein können.

Meine Frage ist, ob ich diese Datenbeziehung mithilfe von 2 Fremdschlüsseln in der Games-Tabelle (home_team_id, away_team_id) darstellen sollte oder ob ich eine Viele-zu-Viele-Beziehung mit einer games_teams-Tabelle verwenden sollte, um die beiden zu verknüpfen, was in diesem Fall erforderlich wäre Außerdem zu speichern, ob es sich bei der Mannschaft um die Heim- oder Auswärtsmannschaft handelte, erscheint etwas übertrieben.

Um die Verwirrung noch zu verstärken, verwende ich die ORM-Bibliotheken in KohanaPHP und diese würden erwarten, dass ein fk team_id heißt oder eine Link-Tabelle nur 2 Spalten enthält.Wenn Sie Erfahrung mit diesem Problem in KohanaPHP haben, hinterlassen Sie bitte eine Antwort. Ansonsten sind wir auch für allgemeine Ratschläge sehr dankbar.

War es hilfreich?

Lösung

Wenn Sie einen „X-te Normalform“ Abzeichen auf dem Datenbankserver zu Pin in der Lage sein wollen, dann sollte es wohl so many-to-many behandelt werden, sonst, ich denke, Sie sollten Ihre Anfrage Gemeinkosten mit 1 reduzieren werden weniger Tisch, dass Sie gehen nur durch beitreten alle Mal, wenn Sie einige nützliche Daten möchten aus.

Andere Tipps

Verwenden Sie einfach die beiden Spalten, sonst würden Sie brauchen nur sie in dem Tischler Tisch zu qualifizieren. Es ist nicht so, wenn dies ein Schlafzeitbombe ist und einen Tag plötzlich entdecken Sie, Sie ein gut viele zu viele haben müssen.

2 Spalten sind durchaus angemessen hier meiner Meinung nach. Die Tatsache, dass es möglicherweise nur zwei Teams wird für jedes Spiel in Ihrem Datenbank-Schema, indem zwei Spalten reflektiert wird. Durch eine Verknüpfungstabelle einzuführen, stellen Ihnen die Möglichkeit, dass ein einzelnes Spiel 2 Heimmannschaften haben könnte, 2 weg Teams, und Sie würden eine zusätzliche Validierung benötigen, um sicherzustellen, dass dieses Szenario nie eintritt. Durch die Dinge isoliert auf den beiden Säulen zu halten, Ihr Schema erzwingt inhärent Datenintegrität.

Im Hinblick auf die Normalisierung: Ja. Es gibt nur ein Eins-zu-viele oder many-to-many, die nach unten in eine kaputt geht oder mehrere Eins-zu-viele-Beziehungen.

Aber realistisch betrachtet, wenn ich so etwas wie GENDER zu retten waren. Würde ich wirklich dazu angebracht brauchen einen Multi-Zustand und einen Datetime-Stempel?

Die überraschende Antwort ist JA - aber nur, wenn ich Geschlecht Änderungen aus geschäftlichen Gründen verfolgen müssen -. Für die meisten praktischen Zwecke der Antwort NEIN

Ich würde mit zwei Schlüsseln einen Tisch halten -. Es sei denn es einen geschäftlichen Grund ist es als solches zu verfolgen

Abhängig davon, wie Sie es abstrahiert haben, würde ich sagen, dass es bei einem Fußballspiel zwei Mannschaften geben MUSS. In diesem Fall ist es nicht nur praktischer, sondern auch korrekter, die Spalten in der Spieltabelle zu haben.

Ich könnte mir sogar vorstellen, dass die Team-ID ein natürlicher Teil des Primärschlüssels des Spiels ist.

Insgesamt denke, Sie sollten nicht eine separate Tabelle für diese haben. Einfachere auf dem Programmierer, einfacher auf der DB. Gut zu denken, über das, was ifs, aber klingt wie Sie bereits haben. Lassen Sie sich nicht gefangen, dass die Normalisierung Denken ist immer die Art und Weise für alles zu gehen.

Ich respektiere die Antworten des anderen zu sagen, dass die beiden Spalten mit die beste Wahl, aber erwähnen Sie, dass Sie die ORM-Bibliothek in Kohana verwenden. Durch die Verwendung von zwei Spalten in der Tabelle Spiele verlieren Sie die ORM-Funktionen für viele-zu-viele-Beziehungen. Wenn Sie eine games_teams Pivot-Tabelle einrichten, können Sie wie folgt vor:

$game = ORM::factory('game', 1); // 1 is the game id

Dann können Sie eine Schleife durch die Mannschaften in diesem Spiel:

foreach ($game->teams as $team) {
// do stuff with $team
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top