Ich erstelle eine Datenbank, die Replays für ein Spiel verfolgt. Jede Wiederholung hat einen anderen Spielmodus, der entweder teambasiertes Gameplay oder individuelles Gameplay ist. Abhängig vom Spielmodus möchte ich das gewinnende Team oder die gewinnende Person aufnehmen.SQL wissen, wann Tabellen zu teilen
Ich habe folgende MySQL-Tabelle, die Runden in der Wiedergabe und der damit verbundenen Sieger verfolgt:
CREATE TABLE replay_rounds (
replay_id INT UNSIGNED NOT NULL,
round SMALLINT UNSIGNED NOT NULL,
winning_player_id INT UNSIGNED,
winning_team_id TINYINT UNSIGNED,
FOREIGN KEY (replay_id) REFERENCES replays(id),
FOREIGN KEY (replay_id, winning_player_id) REFERENCES replay_players(replay_id, player_id),
FOREIGN KEY (winning_team_id) REFERENCES teams(id),
PRIMARY KEY (replay_id, round))
CHARACTER SET=utf8
COLLATE=utf8_general_ci
ENGINE=InnoDB;
Mit was ich jetzt habe, wenn das Spiel-Modus ist Team-basierte dann werde ich die winning_team_id für jeden Satz runde und setze die winning_player_id auf null
. Ebenso, wenn der Spielmodus individuell ist, setze ich die winning_team_id auf null
.
Leistungsmäßig und in Bezug auf Best Practice, ist es in Ordnung, es so zu verlassen? Gibt es einen zwingenden Grund, diese für jeden Spielmodus in eine separate Tabelle aufzuteilen (auch wenn es nur zwei Modi gibt)? Wie wäre es mit einer hypothetischen Situation, in der Spielmodi ständig hinzugefügt werden - würde dies am besten gelöst werden, indem für jeden neuen Spielmodus eine Tabelle erstellt wird?
Dies würde funktionieren, wenn die Winning_id für jeden Spielmodus den gleichen Typ hat. In meinem Beispiel ist winning_id ein TINYINT, wenn es ein Team ist, und winning_id ist ein INT, wenn es sich um ein Individuum handelt. Ich könnte einfach INT wählen, da es eine Obermenge von TINYINT ist, aber das scheint ein Zufall/Hack zu sein. – Kai
Ich denke, Ihr "Hack" wäre hier eine gute Wahl, um die Datenbank zu normalisieren. – northpole
Punkt gut gemacht :) Ich muss lernen, weniger Perfektionist zu sein und spezifische Lösungen für Probleme anzuwenden. – Kai