2016-07-21 12 views
4

Szenario

Wir haben eine Datenbank, die die folgende Beziehung abbildet:Wie glätte ich viele-zu-viele Beziehungen in einem Redux-Zustand mit Normalizr?

  • A tag hat viele campaigns
  • A campaign hat viele tags
  • Die Beziehung zwischen campaigns und tags durch assoziatives vertreten Einheit genannt campaign_tag
  • Die.210 Unternehmen verfügt über ein priority Attribut

Frage

Wie können wir normalizr (oder eine ähnliche Bibliothek) implementieren eine abgeflachte App Zustand zu erzeugen, die für unsere assoziativen Einheiten ausmacht, wenn unsere assoziativen Einheiten haben keine eindeutigen IDs/Werte?

Notes/Misc Gedanken

Andere Beispiele, die ich hatte gesehen habe nur die Original-Objekte abgebildet und scheinen besser geeignet für eine Eins-zu-viele oder Eins-zu-eins-Beziehungen. Sie sind meist Zustand Baum wie diese hergestellt:

{ 
    entities: { 
    campaigns: { 
     '1': { id: 1, name: 'Ace', tags: [1, 2, 3] }, 
     ... 
    }, 
    tags: { 
     '1': { id: 1, name: 'Example Tag', campaigns: [1, 2, 3] }, 
     ... 
    } 
    }, 
    ... 
} 

Würden unsere assoziativen Einheiten gehen in diesem entities Gruppe? Sollten wir nur eindeutige IDs hinzufügen? Das scheint kontraproduktiv. Ist es überhaupt angemessen, solche Beziehungen zu reduzieren?

Jede Hilfe wird geschätzt, danke.

Antwort

1

Szenarien:

  1. Sie steuern die API:

    campaigns: [{ 
        id: <id>, 
        name: <name>, 
    }], 
    tags: [{ id: <id>, name: <name> }], 
    campaign_tags: [{campaign_id, tag_id, priority}] 
    

    So wird leicht sein, diese Vervielfältigung von Informationen zu verwalten und zu vermeiden: ich Objekte wie diese senden würde. Wenn Sie Ihre Komponente mithilfe von redux connect mounten, können Sie einen Selektor erstellen, mit dem Sie Ihre Kampagnen-Tags füllen können, um sie den Eigenschaften Ihrer Komponente hinzuzufügen.

  2. Sie steuern die API nicht. In diesem Fall muss ich wissen, welche Art von Antwort Sie vom Server erhalten, um etwas zu empfehlen.