React - Datenstruktur im globalen State

Tr3x

Lieutenant
Registriert
Feb. 2007
Beiträge
640
Hallo,

ich beschäftige mich gerade intensiver mit React in Verbindung mit Zustand um alle Daten global zu speichern. Die App ist zur Übung einfach gehalten bei der ich User und Trainings anlegen kann. Als dritte "Liste" führe ich welche User welches Training besucht hat. Weiter unten wie ich meinen Store (Zustand) aktuell aufgebaut habe und unten ein paar Screenshots wie die App aktuell aussieht.

Wenn ich an eine SQL Datenbank denke, wäre die Struktur Redundant und würde in den "records" nur die IDs referenzieren. Das bedeutet aber in meiner App, wenn ich eine Übersicht der Records zeigen möchte, das ich mir für die IDs eine Funktion getTrainings und Records ziehen müsste. Wie ist den Eure Meinung bzw. was ist so die gängige best practice?

Mein akteuller Store.js ist in etwa vereinfacht folgend aufgebaut:

JSON:
{
    "trainings": [{
            "id": 2491507048,
            "name": "Marketing"
        }, {
            "id": 1755793330,
            "name": "Public Relation"
        }
    ],
    
    "member": [{
            "id": 4123767104,
            "name": "Bob"
        }, {
            "id": 1828461878,
            "name": "Laura"
        }
    ],
        
    "records": [{
            "member": "Bob",
            "training": "Public Relation",
            "completedOn": "2025-01-08T21:45:01.388Z",
            "createdOn": "2025-01-02T21:45:08.126Z",
            "id": 1
        }, {
            "member": "Laura",
            "training": "Marketing",
            "completedOn": "2025-01-08T21:45:01.388Z",
            "createdOn": "2025-01-02T21:45:13.753Z",
            "id": 2
        }, {
            "member": "Laura",
            "training": "Public Relation",
            "completedOn": "2025-02-06T21:45:01.388Z",
            "createdOn": "2025-01-02T21:45:19.202Z",
            "id": 3
        }
    ],
    
    /*
        get and setter functions um trainings, records und user zu löschen, erstellen oder bearbeiten
    */
}

Anzeige User
1735854467812.png


Anzeige Trainings
1735854477932.png


Anzeige besuchte Trainings und User (entspricht die Liste records aus dem Store)
1735854489187.png
 
Die Antwort hier bringt es gut auf den Punkt: https://stackoverflow.com/questions/4126811/how-do-you-track-record-relations-in-nosql

Passend dazu hab ich auch gelernt: Data that should be read together, should be stored together.

Aber es kommt darauf an was dir wichtiger ist. Wenn es beispielsweise oft vorkommt, dass ein Training umbenannt wird und dieser Umstand in allen records reflektiert werden soll aust du es besser relational auf. Wenn nicht dann speicher den Namen des Trainings zum record.
 
Vielen Dank. Das habe ich mir fast so gedacht. Aber für die kleinere Spielerei sollte das so gut passen. Größere und komplexere würde ich dan nauch in einer DB schreiben
 
Zurück
Oben