Übersichtliche Zuweisung von Daten in Tabellen

Darokh

Mitglied
Hi,
ich hoffe, ich bin hier im richtigen Forum gelandet...

Ich möchte Daten, die ich in einem Spiel erhalte, in einer Datenbank speichern, um sie später auswerten zu können.

Es gibt Spiele und so genannte "Subspiele". Ein Beispiel:

Spiel A soll die Reaktionsfähigkeit von Patienten verbessern. Dazu wird zunächst ein SubSpiel a gestartet. Nach einer gewissen Zeit wird aber ein weiteres Subspiel b parallel dazu geschaltet, um den Schwierigkeitsgrad zu erhöhen. Der Patient absolviert also mehrere Aufgaben parallel.

Spiel B könnte nun seinerseits auch aus SubSpiel a bestehen, aber noch SubSpiel c, d und e beinhalten.

Ein Spiel könnte auch als eine Zusammenstellung von SubSpielen verstanden werden, die "nach belieben" zusammengewürfelt werden können.

Also hätten wir schoneinmal soetwas:
Spiel A
SubSpiel a​
SubSpiel b​
Spiel B
SubSpiel a​
SubSpiel c​
SubSpiel d​
SubSpiel e​

Jedes SubSpiel hat ein selbstständig laufendes Level / Schwierigkeitsgrad, welches sich mit der Zeit ebenfalls verändert.
Pro Level in einem SubSpiel sollen Durchschnittswerte gespeichert werden, wie beispielsweise Reaktionszeit, Geschwindigkeit, Anzahl korrekter Antworten. Das ist wiederum pro SubSpiel unterschiedlich.

Ab diesem Punkt fängt mein Kopf an zu schmerzen, wie ich diese Daten in MYSQL am besten tabellarisch auffange.

Nochmals zusammengefasst

- eine Session, zu einem bestimmten Zeitpunkt, Dauer
- einen Patienten / Spieler
- Spiele, welche aus verschiedenen SubSpielen bestehen

Konkrektes Beispiel:
- Spiel A, bestehend aus SubSpiel a + b
- Spiel B, bestehnd aus SubSpiel a, c, d, e
- SubSpiel a erfasst PRO LEVEL (Level 1-10): Reaktionszeit
- SubSpiel b erfasst PRO LEVEL (Level 1-6): Anzahl korrekter Antworten, Anzahl falscher Antworten
- SubSpiel c, d, e erfassen PRO LEVEL ( Level 1-9): Reaktionszeit, Geschwindigkeit


Als erstes wollte ich für jedes SubSpiel eine eigene Tabelle anlegen. Dann pro Spiel wiederum auch eine Tabelle, und dort die SubSpieldaten wieder zusammenfügen. Dann wiederum pro Session zusammenführen.
Mir erscheint das zwar übersichtlich in Sachen Tabellenkonstruktion, aber glaube, dass es dann sehr viele unnötige Verweise gibt.
Das ganze sollte eben möglichst gut damit klarkommen, wenn ich noch mehrere Spiele / SubSpiele hinzufüge.
Bei den ganzen Querverweisen habe ich dann aber irgendwie Angst, dass ich da nicht ordentlich mit umgehen kann.

Viele Grüße,
darokh
 
N

nillehammer

Gast
Nach dem Überfliegen Deiner Beschreibung sieht es für mich so aus, dass alle Spiele (egal ob Root-Spiel oder Sub-Sub-Subspiele) jeweils die gleichen Daten abspeichern. Das heißt für mich, es gibt genau eine Tabelle. Die Referenz auf das Parent machst du mit einer Fremdschlüsselspalte "parent", die auf den Primary key der selben Tabelle referenziert.

Der SQL-Code könnte ungefähr so aussehen (aus dem Gedächtnis getippt, also nich ungeding 100% korrekt):
SQL:
CREATE TABLE Spiel
(
   id INTEGER UNSIGNED NOT NULL PRIMARY KEY,
   parent_id INTEGER UNSIGNED,
   description VARCHAR(40),
   FOREIGN KEY(parent_id) REFERENCES Spiel(id)
      ON DELETE CASCADE ON UPDATE CASCADE
);
 
Zuletzt bearbeitet von einem Moderator:

bERt0r

Top Contributor
@nillehammer: Das kann so nicht funktionieren, weil du eine m:n Beziehung zwischen Spielen und Subspielen hast: Ein spiel kann mehrere subspiele haben, ein subspiel kann in mehrerern parent spielen sein.

Im allgemeinen sollte man für sowas ein ER-Diagramm machen, besonders dann wenns zu kompliziert wird.
Nachtrag:
Eine m:n Beziehung löst man über eine seperate Tabelle (z.B Spiel_Hierarchie) auf, die dann aus 2 Fremdschlüssel von Spiel besteht und quasi die sub-super Mappings beinhält.
In wie weit es sinnvoll ist, die Ergebnisse wie Reaktionszeit, etc. auch noch extra als Tabell/Attribut zu erfassen hängt dann vom Anwendungsfall ab.
 
Zuletzt bearbeitet:

JanHH

Top Contributor
Hm das ist doch eigentlich simpel. Ich würde daraus eine java-Klassenhierarchie bauen, daraus ergibt sich per JPA dann ja automatisch das Datenbankschema.

Eine Klasse Spiel und eine Klasse SubSpiel und eine Klasse Level.

in Spiel gibt es eine Liste

@OneToMany
private List<SubSpiel> subSpiele;

und in SubSpiel wiederum

@OneToMany
private List<Level> levels;

und ein int, welches den Typ des SubSpiels angibt (1=a, 2=b usw).

und in der Klasse levels gibts halt die member-Variablen/Properties Reaktionszeit usw, die Du da aufführst.

Wenn Du willst kann ich da gerne auch noch mal etwas mehr Code zu schreiben.
 

Darokh

Mitglied
Frohes neues Jahr erstmal!

Puh, das ist ja ne ganz schöne Menge nachzulesen :D Zusätzlich zu meinem derzeitigen Java-Pensum.
Hm, über etwas mehr Code wäre ich sehr dankbar, dann check ist das sicherlich etwas schneller...
 
N

nillehammer

Gast
bERt0r hat gesagt.:
@nillehammer: Das kann so nicht funktionieren, weil du eine m:n Beziehung zwischen Spielen und Subspielen hast: Ein spiel kann mehrere subspiele haben, ein subspiel kann in mehrerern parent spielen sein.
@bERt0r: Ich glaube, hier irrst Du. Wenn ich mich nicht völlig verlesen habe, hat jedes (Sub-)Spiel entweder keinen Parent oder genau einen Parent und damit ist es eine klassische Parent-Child-Beziehung, also 1:n.
 

Darokh

Mitglied
Jup, genau, n:m Beziehung.

Und jedes SubSpiel erhebt unterschiedliche Daten. Pro Level werden diese Daten dann gemittelt oder als Summe gespeichert --> also pro Lvl ein Wert pro Variable (also bspw. Reaktionszeit, Geschwindigkeit).
 

bERt0r

Top Contributor
Wenn dieser wert immer Numerisch ist isses ja ganz einfach:
Tabelle Ergebnis, Fremdschlüssel für Spiel und Level, fertig.
 

Darokh

Mitglied
Also meinst du soetwas wie:
Ergebnisse SubSpiel 1:

ErgebnisIDSubSpiel_1---Level---Reaktionszeit---Geschwindigkeit---korrekte Antworten


Ergebnisse SubSpiel 2:

ErgebnisIDSubSpiel_2---Level---Korrekte Antworten---nocheinenWertDenIchErhebe


Spiel 1 besteht aus SubSpiel 1+2:

Spiel_1_ID---Fremschlüssel:ErgebnisIDSubSpiel_1---Fremschlüssel:ErgebnisIDSubSpiel_1


MasterTabelle
SessionID---User---FremdSchlüssel:Spiel_x_ID

Haut das hin?
 

bERt0r

Top Contributor
Ich hab ein bisschen in einem Programm gespielt :) :

Anhang anzeigen 3905

3 m:n Beziehungen:
Zwischen Spiel und Spiel (Drückt eine Hierarchie aus mit Sub und Super-Spielen)
Zwischen Spiel und Ergebnistyp (Jedes Spiel hat eine Auswahl an Messgrößen, die es ermittelt)
Zwischen Ergebnis und Ergebnistyp (Hier stehen die erzielten Werte eines Spiels dann drinn)

Ich glaube das sollte so hinhaun.
 

JanHH

Top Contributor
Was habt ihr denn da mit n:m immer? Das stimmt doch gar nicht.

Klar können mehrere Spiele SubSpiel A haben, aber das ist doch nicht das gleiche Exemplar von SubSpiel A, sondern ein anderes SubSpiel, aber halt ebenfalls vom Typ A. Das ist eine 1:n Beziehung, ganz eindeutig.

Ein Spiel hat eine 1:n-Beziehung zu den SubSpielen, wobei natürlich mehrere SubSpiele vom Typ "SubSpiel A" existieren können! Jedem Spieler sein eigenes, logischerweise.

Ein SubSpiel wiederum hat eine 1:n-Beziehung zu den Levels, aus denen es besteht.
 

bERt0r

Top Contributor
Du willst das ganze also in einem ODBMS speichern? Nun das ist dann wieder eine andere Geschichte. Ich weis nicht wie du dir das in einer relationalen DB vorstellst. Wie unterscheidest du die verschiedenen SubSpiel A Objekte in der Datenbank? Wie findest du das richtige für dein Spiel und Ergebnis? Wenn z.B der Highscore in Spiel A Subspiel A von Spiel B Subspiel A überboten wird, merkst du das nicht.
 
Zuletzt bearbeitet:

Darokh

Mitglied
Hm, vielleicht habe ich das noch schwer verständlich ausgedrückt oder etwas missverstanden.

Spiel 1 besteht aus SubSpiel 1, 2 und 3
Spiel 2 besteht aus SubSpiel 2, 3 und 4

Spiel 1 und 2 stehen für sich komplett isoliert - auch deren SubSpiele sind nicht untereinander vergleichbar.
Also
Spiel 1 - SubSpiel 2
Spiel 2 - SubSpiel 2

sind zwar praktisch gesehen genau die gleichen Spiele, aber können trotzdem nicht miteinander verglichen werden, da die Spiele unterschiedliche SubSpiele (oder sogar Aufgabenstellungen, bei gleichen Spielen) haben und somit der Schwierigkeitsgrad auch ein anderer ist.

Also in Spiel 1 ist SubSpiel 2 einfacher, weil die anderen SubSpiele einfacher sind.

Hilft das weiter?
 

JanHH

Top Contributor
Hier mal der rudimentäre Java-Code für JPA-Entity-Klassen / Datenmodell. Getter/Setter wg. Übersichtlichkeit weggelassen.

Java:
@Entity
class Level
{
	@Id
	@Column
	@GeneratedValue(strategy=GenerationType.AUTO)
	private long id;

	private int reaktionszeit, anzRichtig, anzFalsch, geschwind;
}

@Entity
public class SubSpiel
{
	public static final int SUBSPIEL_TYP_A=1;
	public static final int SUBSPIEL_TYP_B=2;
	public static final int SUBSPIEL_TYP_C=3;
	public static final int SUBSPIEL_TYP_D=4;
	public static final int SUBSPIEL_TYP_E=5;

	@Id
	@Column
	@GeneratedValue(strategy=GenerationType.AUTO)
	private long id;

	private int type;

	@OneToMany
	private List<Level> levels;
}

@Entity
public class Spiel
{
	@Id
	@Column
	@GeneratedValue(strategy=GenerationType.AUTO)
	private long id;

	@OneToMany
	private List<SubSpiel> subSpiele;
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P SQL Doppelte Zuweisung von Personalnummern Datenbankprogrammierung 6
G ID zuweisung eines TerminKalenders (mehrere Kalender) Datenbankprogrammierung 8
D DB-Anbindung Zuweisung fehlgeschlagen Datenbankprogrammierung 37
D Alte Daten ins neue Modell quetschen Datenbankprogrammierung 6
R Mongodb Daten werden immer überschrieben Datenbankprogrammierung 7
R Mongodb Daten in einem bestimmten Document speichern Datenbankprogrammierung 1
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
B Daten HSQL-DB Datenbankprogrammierung 2
V H2 ManyToMany wie speichere ich die Daten? Datenbankprogrammierung 10
thobren Projekt SQlite! Wie kann ich auf auf SQlite Daten zugreifen? Datenbankprogrammierung 4
OnDemand Daten verschlüsseln Datenbankprogrammierung 42
L Oracle Daten in Häppchen selektieren Datenbankprogrammierung 5
L Oracle Daten von Oracle zu MSSQL übertragen Datenbankprogrammierung 4
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Z Ausgabe nur bestimmter Daten Datenbankprogrammierung 6
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
Kirby.exe Vorschläge zur Verschlüsselung von Daten in der DB Datenbankprogrammierung 2
T Java Spiel Daten speichern Datenbankprogrammierung 1
LimDul H2 Embedded DB und Gigabytes an Daten Datenbankprogrammierung 0
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
R Wie mit zu viele Daten umgehen? Datenbankprogrammierung 2
F MySQL Wie speichere ich Daten zeitlich abhängig? Datenbankprogrammierung 4
T Oracle Normalisierung und Daten splitten Datenbankprogrammierung 1
JG12111989 DB-Daten werden falsch dargestellt Datenbankprogrammierung 7
K H2 Daten in die H2 console DB eintragen Datenbankprogrammierung 2
L SQLite Ändern der Daten in einem UNIQUE Feld Datenbankprogrammierung 1
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
L Oracle Daten von einem Server zum andere kopieren Datenbankprogrammierung 24
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
L MySQL Vergleichen von Array-Inhalt, Ausgabe gleicher Daten Datenbankprogrammierung 3
W Daten in Java intern abfragen Datenbankprogrammierung 1
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
I MySQL Datenbankstruktur angleichen - Daten behalten Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
P LDAP: Daten eintragen funktioniert nicht Datenbankprogrammierung 7
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
O mit Multi-Thread Daten aus Datenbank lesen und schreiben Datenbankprogrammierung 22
F Daten verdichten Datenbankprogrammierung 0
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
B Daten aus DB in Word Dokument Datenbankprogrammierung 2
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
D Daten posten auf RestApi (Mongodb/NoSQL) Datenbankprogrammierung 0
I Fehler bei Ausgabe der Daten aus der DB Datenbankprogrammierung 3
OnDemand MySQL Daten aktualisieren Datenbankprogrammierung 6
D Daten von einem Server in eigenem Java-Programm benutzen Datenbankprogrammierung 6
M Vergleich von Daten in verschiedenen Tabellen Datenbankprogrammierung 1
S Daten aus Form in Datenbank nur einmal eintragen Datenbankprogrammierung 2
6 JBDC Daten verschlüsseln? Datenbankprogrammierung 2
F MySQL Daten ändern über Java Datenbankprogrammierung 3
G SQLite Daten aus SQLite DB in andere SQLite DB importieren Datenbankprogrammierung 4
H Grosse Menge an Daten in eine Datenbank Datenbankprogrammierung 32
M Daten nachträglich hinzufügen Datenbankprogrammierung 6
2 MySQL Daten aus einer Array auslesen und MySQL Statment erstellen. Datenbankprogrammierung 5
E Daten einer SQL-Datenbank aus Combobox in labels schreiben Datenbankprogrammierung 6
N HSQLDB Daten Auslesen Datenbankprogrammierung 3
O Viele Verbindungen-Exception bei insert Daten zur MySQL-Datenbank Datenbankprogrammierung 2
P MySql daten in leeren jtable übertragen Datenbankprogrammierung 5
SexyPenny90 SQL Daten sortieren und top 5 ausgeben Datenbankprogrammierung 7
L Hibernat will Daten nicht einfügen??? Datenbankprogrammierung 2
B MySQL DB Daten aktualisieren Datenbankprogrammierung 9
D MySQL Daten werden aus Datenbank gelesen, obwohl sie dort gar nicht angekommen sind Datenbankprogrammierung 8
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
L SQLite Daten werden nicht in die Tabelle eingefügt Datenbankprogrammierung 7
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
J Daten synchronisieren in Multi-Client-Anwendungen (Hibernate) Datenbankprogrammierung 6
S JPA: DB Schema ändern und Daten nicht verlieren - wie? Datenbankprogrammierung 5
T MySQL Select: Zusammenfassen von Daten und bilden von Durchschnitt? Datenbankprogrammierung 4
F Daten in die DB hinzufügen Datenbankprogrammierung 7
H Klasse welche Mysql Daten zurück gibt Datenbankprogrammierung 18
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
H Daten in/aus Datenbank schreiben Datenbankprogrammierung 2
M DropDownBoxen mit MySQL Daten füllen Datenbankprogrammierung 3
E MySQL Daten in die Datenbank eingeben via Java Programm Datenbankprogrammierung 3
F ORA 17410 Keine weiteren Daten aus Socket zu lesen Datenbankprogrammierung 2
B Daten aus Datenbank holen Datenbankprogrammierung 6
T Problem beim schreiben von daten Datenbankprogrammierung 4
N Daten aus Datenbank abfragen und anzeigen in der Praxis?? Datenbankprogrammierung 2
G MySQL Bekomme keine Daten. Datenbankprogrammierung 7
L CLOB-Daten werden beim Einfügen in die Datenbank geändert? Datenbankprogrammierung 5
G Daten aggregieren Datenbankprogrammierung 11
Gossi Oracle 2 Daten (Datum) vergleichen Datenbankprogrammierung 6
W MySQL Daten aus bestimmter Spalte lesen Datenbankprogrammierung 2
E MySQL Befüllen einer MySQL DB mit großen Daten Datenbankprogrammierung 6
J Doppelte Daten in Spalte, nur die erste abrufen wie? Datenbankprogrammierung 15
P Daten aus MySql Datenbank lesen??? Datenbankprogrammierung 6
J Daten vergleichen Datenbankprogrammierung 10
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
X Daten einer DatenbankTabelle in JTable darstellen Datenbankprogrammierung 13
T Designfrage: DB-Daten direkt oder verzögert speichern Datenbankprogrammierung 2
Dragonfire Daten aus jsp Datei in datenbank speichern Datenbankprogrammierung 15
A Daten von Webshop einlesen Datenbankprogrammierung 5
S Daten aus jTextfiled in DB schreiben - SQL Befehl Datenbankprogrammierung 2
T Daten aus DB in variable Zahl an Variablen speichern Datenbankprogrammierung 18
A Datenbankanbindung an mySQL und Ein-/Auslesen der Daten Datenbankprogrammierung 4
D Vector mit Daten aus der Datenbank füllen Datenbankprogrammierung 7
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13

Ähnliche Java Themen

Neue Themen


Oben