[Datenbank] Array in einer Spalte ablegen oder wie vorgehen?

Die Anzahl der Einträge für Spieler in der DB ist so groß wie die reale Anzahl verschiedener Spieler. Simpler geht es nicht -.-
 
Piktogramm schrieb:
Dann schau es dir nochmal an, dass lässt sich mit meinem Konstrukt recht gut abbilden.

Die lieben anderen Menschen hier haben ansonsten vollkommen recht. Du solltest die Grundlagen zur Normalisierung pauken! Denn selbst die Ansätze / Lösungen die dir gegeben werden scheinst du nicht zu verstehen.
Deinen Ansatz verstehe ich aber nicht in Bezug auf mein Problem. Wie definiert sich denn der Team Name aus deinem Beispiel?
 
Ja beim ersten mal kommt einem das sehr komisch vor. Man normalisiert und soll es dadurch vereinfachen, aber dein Gefühl sagt dir irgendwie es ist komplizierter geworden. Wenn du aber später zu den Abfragen kommst siehst du doch ein, dass es so viel einfacher ist. Dem System ist es egal, dass du bei einem mini Turnier mit 20 Spielern tausende Einträge in die DB schreibst. Das rennt durch wie Öl.
 
Hades85 schrieb:
Deinen Ansatz verstehe ich aber nicht in Bezug auf mein Problem. Wie definiert sich denn der Team Name aus deinem Beispiel?

Du brauchst anscheinend 2 Teams. Also wirfst du in die Team Tabelle 2 Teams hinein und bist an der Stelle fertig. Dann einen Eintrag für jeden Spieler in der entsprechenden Tabelle. Analog ein Datum (oder datetime wenn du die Zeit dazu brauchst) für die Spieltage.

Die Tabelle Spiel füllst du dann für Spieltag.ID=0 wie folgt
Code:
ID_Spieltag | ID_Team | ID_Spieler
0 | 0 | 1
0 | 0 | 666
0 | 1 | 42
0 | 1 | 4711

Die Aussage ist da, dass zum Zeitpunkt mit der ID 0 Spieler 1 und 666 in Team mit ID=0 waren und gegen das Team mit ID=1 spielten worin sich Spieler 42 und 4711 befanden.
Wenn das Datum bzw. die Zeit kein ausreichendes Selektionsmerkmal für eigene Spiele ist kannst du beliebig andere Merkmale stattdessen oder zusätzlich einführen.

Ansonsten: Das was Sparta8 sagt, Datenbanknormalisierung sollte zwingend beherrschen und nahezu fanatisch anwenden.
 
Zuletzt bearbeitet:
Also ich muss entweder richtig auf dem Schlauch stehen oder ihr versteht mich nicht vollständig. Woher leite ich denn ab welche Spieler unter welchen Team spielt? Aus deinem Beispiel, Spieler 1 und 666 spielen am 10. Spieltag nochmal zusammen, nach welchen Kriterien gebe ich den Beiden die TeamID die 0 ist? Das ginge nur wenn man eine Tabelle erstellt die zuvor definiert welche Teams unter welcher id bestehen.
 
Naja in der Realität ist das mit den Spielen ja schon passiert bzw. Wurde festgelegt. Deswegen wird das vorgegeben als Eingabe durch den Nutzer
 
Die Teams werden mittels meines Programms zufällig generiert. Nach welchem Schema ermittle ich dann ob Spieler 1 und 666 dem Team 0 zugehörig sind?
 
Dir das zu erklären würde bedeuten, dass ich dir jetzt komplett die Datenbanknormalisierung erklären muss. Ich sehe es nicht ein weiter Aufwand zu investieren, während du keinerlei Anzeichen zeigst dich mit diesem essentiellem Sachverhalt auseinanderzusetzen.
 
Dein Beispiel macht aber in meinen Augen keinen Sinn. Ein Team besteht aus Spielern, es heißt die Relation müsste entweder Spalten besitzen die auf die Teammitglieder eingeht, wie etwas Spieler_ID1, Spieler_ID2, Spieler_ID3 und Spieler_ID4. Oder aber, da die Teams nicht immer genau 4 Mann groß sind, daher müsste man eine Relation Spieler erstellen die alle Spieler beinhaltet, diese IDS sind dann zeitgleich die FK von der Tabelle Team.


In deinem Beispiel mit der Relation Team möchtest du mir nicht beanwtorten welchen Namen du für das Team einträgst welches die id 0 in deinem Beispiel hat. Ich kann jedenfalls nicht nachvollziehen nach welchen Kritikern du das Team benennen möchtest.
 
Also Long Story Short ich kenne keine Möglichkeit ein Array abzuspeichern

Du kannst natürlich mit z.b. Pipes getrennt die Werte abspeichern oder zb 11 Spalten festlegen aber arrays im eigentlichen Sinne gibts wohl nicht
 
Piktogramm schrieb:
Dir das zu erklären würde bedeuten, dass ich dir jetzt komplett die Datenbanknormalisierung erklären muss. Ich sehe es nicht ein weiter Aufwand zu investieren, während du keinerlei Anzeichen zeigst dich mit diesem essentiellem Sachverhalt auseinanderzusetzen.

Den Link hatte ich schon eine Seite vorher gepostet, scheint nicht zu interessieren.
 
Den Wiki Eintrag kenne ich, und Normalisierung ist mir auch vertraut. Aber anscheinend versteht ihr nicht das Problem in Gänze. Ich hatte auch nie vor ein Array in einer Spalte abzulegen sondern das Ergebnis einer Serialisierung.

Aber anscheinend will auch keiner von euch meine einfache Frage beantworten die sich auf das Beispiel von Piktogram bezieht, nämlich nach welchen Kriterien er den Namen eines Teams in der Relation Team erstellt.


Edit: ich frage deswegen, weil ich wissen muss wann welche Teams die erfolgreichsten waren, bzw. welche Spieler diesen Teams zugehörig waren.
 
Zuletzt bearbeitet:
Du kannst den Teamnamen doch wählen wie Du willst? Entweder generierst Du einen Namen bei der Eingabe des Teams oder bestimmst automatisch einen Namen aus den Namen derer, die in diesem Team spielen. z.B. Team Müller - Meyer - Schulz.

Um zu bestimmen, welches Team das erfolgreichste war, brauchst Du natürlich noch eine Ergebnistabelle. Wie die aussehen sollte, kann ich mangels Angaben nicht sagen. Spielen Teams gegeneinander, oder erreichen eine Punktzahl oder was auch immer ... ?
 
Das Einzige, was hier keinen Sinn ergibt, sind deine Fragen. Auf der letzten Seite hat Piktogramm doch ein hübsches Diagramm als SVG gepostet - wo ist da noch das Problem? In der Team-Tabelle steht auch der von dir ständig angefügte Teamname.
Du kannst Teams mit Namen definieren und über die Relationstabelle bekommst du heraus, welche Spieler in dem Team zu welchem Zeitpunkt spielen. Diese Relation ist mit dem Spieltag verknüpft, da du gesagt hast, dass sich die Teamzusammensetzung ändert - sonst hätte man das natürlich separat definieren können.
Es sollte auch klar sein, dass eine SQL Datenbank nicht sämtliche Logik enthält. Das hat deine Anwendung zu erledigen. Zur Auswertung hast du aber alle Daten zur Verfügung.
 
Dann speichere ich Müller Meyer Schulz so als Teamnamen ab unter der ID 1. 100 Spieltage später spielen die wieder zusammen, woher soll der Anwender erkennen welche ID dieses Team besitzt? Das Programm legt also die drei Spieler wieder in die Datenbank unter Spieltag 100, die bekommen wieder ne komplett andere TeamId, zwar mit dem selben Namen. Weil mir kann keiner sagen wie ich einen Teamnamen so generiere der einen Wiedererkennungswert hat, zB. Einen Hash.

Wie soll ich jetzt die Datenbank nach diesen Team durchforsten wenn dieses Team unter einer zufällig generierten ID abgelegt wurde mit nicht eindeutigen Teamnamen. Hinzu kommt dass es zB. zwei Spieler mit den Namen Müller existieren und wie wird dann differenziert?
 
Zuletzt bearbeitet:
Ich bin dafür dem TE keine weitere Hilfestellung zu leisten, solange seine Frage nicht klar und in einem Guß formuliert ist. Soviel Aufwand ist ihm zuzumuten, dafür dass ihm hier geholfen wird, aber bei so einer unklaren Fragestellung mit Widersprüchen ist es unmöglich zu helfen. Noch dazu scheint er entweder unfähig oder unwillig zu sein, die Ratschläge zu folgen und wird zu allem Überfluss noch patzig.

Wenn ich schon sowas lesen:

"ch hatte auch nie vor ein Array in einer Spalte abzulegen sondern das Ergebnis einer Serialisierung.

Aber anscheinend will auch keiner von euch meine einfache Frage beantworten die sich auf das Beispiel von Piktogram bezieht, nämlich nach welchen Kriterien er den Namen eines Teams in der Relation Team erstellt."

und man nur den Betreff und den ersten Eintrag liest :rolleyes:
 
Ich hab eher das Gefühl, dass er keine großartigen Abfragen machen möchte.
Ich versteh auch nicht wirklich die Problemstellung bzw. wo das in der echten Welt Anwendung findet.
Nur irgendwas mit random Teams jeden Spieltag.

Das Programm legt also die drei Spieler wieder in die Datenbank unter Spieltag 100, die bekommen wieder ne komplett andere TeamId, zwar mit dem selben Namen.

Also sind die random Teams doch nicht so random?
 
Hades85 schrieb:
Also der PrimaryKey macht aber keinen Sinn, denn die die Teams verändern sich pro Spieltag jedes Mal. Und TeamID wird auch permanent nach oben gezählt, denn es gibt keine gleichen Teams.

--UND--

Dann speichere ich Müller Meyer Schulz so als Teamnamen ab unter der ID 1. 100 Spieltage später spielen die wieder zusammen, woher soll der Anwender erkennen welche ID dieses Team besitzt? Das Programm legt also die drei Spieler wieder in die Datenbank unter Spieltag 100, die bekommen wieder ne komplett andere TeamId, zwar mit dem selben Namen. Weil mir kann keiner sagen wie ich einen Teamnamen so generiere der einen Wiedererkennungswert hat, zB. Einen Hash.
Du widersprichst dir.

Sturm91 schrieb:
Also sind die random Teams doch nicht so random?
So sieht es aus.


Aber mal so am Rande, ein Team lässt sich auch durch die PlayerID-Kombinationen prüfen, welche dann auch eindeutig wären.

*edit* Sprich: Erst prüfen ob es ein Team mit der Kobination aus diesen SpielerIDs schon gibt und falls nicht, dann kann ja ein neues generiert werden.
 
Zuletzt bearbeitet: (Beitrag wiederhergestellt)
Dein Problem ist nicht die Datenbank, sondern deine Anwendung. Mach dir mal einen Plan, wie das alles ablaufen soll, dann kannst du vielleicht auch eine vernünftige Fragestellung formulieren.
 
Zurück
Oben