Modellazione dei dati della carta di ricerca in JSON

-1

Ho bisogno di progettare un'interfaccia utente per modificare un documento di ricerca, non ho abbastanza conoscenza del dominio di ricerca, ma ho comunque cercato di fare del mio meglio e ho pensato di progettare uno schema normalizzato. Sto descrivendo il requisito di seguito.

Formato carta campione:

Sotto la carta che mostra 4 autori affiliati a 3 diverse organizzazioni.

Decoupling Sensor Networks from Rasterization in Congestion Control

Alice Abaraham1 Bill Byron2 Christie Chang1, 2 David Doel3

1 University of Utopia

2 Neverland Institute of Technology

3 University of Argleton

La pagina dovrebbe consentire all'utente di:

  1. Inserisci il titolo
  2. Aggiungi l'autore
  3. Aggiungi l'affiliazione
  4. Associa autore con la corrispondente affiliazione
  5. Riordina autori
  6. Elimina autore
  7. Salva le informazioni correnti

Il documento può o non può avere autore, ogni autore può o non può avere affiliazione.

Ora la parte confusa:

Le affiliazioni devono essere numerate automaticamente, a partire da 1 per il primo autore e così via. Il riordino dell'autore dovrebbe anche rinumerare le affiliazioni. Ogni affiliazione deve avere un autore associato.

L'operazione di salvataggio deve persistere nel JSON.

I miei dati normalizzati:

  entities: {
    authors: {
      byId: {
        1: {id: 1, name: "Alice Abaraham"},
        2: {id: 2, name: "Bill Byron"},
        3: {id: 3, name: "Christie Chang"},
        4: {id: 4, name: "David Doel"}
      },
      allIds: [1, 2, 3, 4]
    },
    organizations: {
      byId: {
        1: {id: 1, name: "University of Utopia"},
        2: {id: 2, name: "Neverland Institute of Technology"},
        3: {id: 3, name: "University of Argleton"}
      },
      allIds: [1, 2, 3]
    },
    authorOrganization: {
      byId: {
        1: {id: 1, authorId: 1, organizationId: 1}
        2: {id: 2, authorId: 2, organizationId: 2}
        3: {id: 3, authorId: 3, organizationId: 1}
        4: {id: 4, authorId: 3, organizationId: 2}
        5: {id: 5, authorId: 4, organizationId: 3}
      },
      allIds: [1, 2, 3, 4, 5]
    },
    papers: {
      byId: {
        1: {
          id: 1,
          title: 'Paper title',
          authors: [1, 2, 3, 4],
          affiliations: {
            byId: {
              1: {id: 1, authorId: 1, organizationIds: [1]},
              2: {id: 2, authorId: 2, organizationIds: [2]},
              3: {id: 3, authorId: 3, organizationIds: [1, 2]},
              4: {id: 4, authorId: 4, organizationIds: [3]}
            },
            allIds: [1, 2, 3, 4]
          }
        }
      },
      allIds: [1]
    }
  }

Aggiornamento 1:

La forma dello stato di normalizzazione è ispirata da qui

Aggiornamento 2:

Trovo che molte persone siano confuse, dalla comprensione di author e organization sono correlate tramite la relazione m2m e l'affiliazione è qualcosa di specifico per un articolo.

Domande:

  1. La rappresentazione è corretta per l'affermazione del problema sopra?
  2. La rappresentazione fornita scalerebbe per milioni di migliaia di autori?
  3. Il riordino dell'autore dovrebbe anche rinumerare le affiliazioni, come?
posta CodeYogi 16.04.2017 - 19:49
fonte

1 risposta

1

Per gli articoli con qualche ordinamento, si usa un array. Non un dizionario con le chiavi da 1 a n.

Non si memorizzano dati ridondanti. allIDs: [1, 2, 3, 4] è ridondante. È facilmente deducibile dai dati disponibili, nel qual caso non ha senso, o è errato, nel qual caso vale la pena di essere inutile. Nessun dato ridondante nel tuo JSON. Quindi quella parte dovrebbe essere:

authors: [
    {id: 1, name: "Alice Abaraham"},
    {id: 2, name: "Bill Byron"},
    {id: 3, name: "Christie Chang"},
    {id: 4, name: "David Doel"}
  ],

"authorOrganization" e "affiliations" sembrano essere gli stessi. Quindi uno di loro dovrebbe andare. In realtà, conserverei solo gli ID dell'organizzazione con gli autori. Quindi

authors: [
    {id: 1, name: "Alice Abaraham", organisations: [1] },
    {id: 2, name: "Bill Byron", organisations: [2] },
    {id: 3, name: "Christie Chang", organisations: [1, 2] },
    {id: 4, name: "David Doel", organisations: [3] }
  ],

Quindi le organizzazioni:

organizations: [
    {id: 1, name: "University of Utopia"},
    {id: 2, name: "Neverland Institute of Technology"},
    {id: 3, name: "University of Argleton"}
],

authorOrganization non è affatto necessario e la carta diventa

papers: [
    {
      id: 1,
      title: 'Paper title',
      authors: [1, 2, 3, 4]
    }
]

Ricorda che JSON è un formato per lo scambio di informazioni, non un database. Il che significa che tutte le informazioni devono essere caricate in memoria. "Milioni di autori"? Su un computer desktop decente, sì. Su un dispositivo mobile, no. Dal momento che non è un database, può esserci un solo utente alla volta. Un utente che gestisce "milioni di autori"? No, non scala.

E assicurati di sapere qual è il ruolo di un "id". Gli articoli hanno id, che vengono assegnati una volta e che quindi non cambiano mai, mai. Ad esempio, "Bill Byron" manterrà quell'ID, anche dopo aver aggiustato l'ortografia a "Bill Brian", quindi a "William Brian jr.", Quindi a "Dr. William Brian jr.", Quindi dopo essersi sposato "Dr. William Brian-Jones". L'ID sarà sempre "2".

    
risposta data 17.04.2017 - 13:47
fonte