2013-09-22 9 views
6

Ho un client JSON JSON angolare che si interfaccia con uno stack JAVA/MySQL. Poiché MySQL è un RDBMS, tutti i miei dati sono normalizzati (le prime tre forme ovviamente).Normalizzazione vs DeNormalization quando si utilizza un client JSON con uno stack JAVA/RDBMS

La mia domanda può essere illustrata con il seguente esempio.

Ho un oggetto Example e un oggetto User restituito dal server.

Example - [{ 
userId:1, 
... 
... 
.. 
}, 
{ 
userId:2, 
...}, 
{ 
userId:3, 
...}]; 

User - [ 
{ 
userId - 1, 
firstName - "John", 
lastName - "Doe", 
.. 
}, 
{ 
userId - 2, 
firstName - "Jane", 
lastName - "Doe", 
.. 
}, {...}... 
] 

Quando guardo attraverso la raccolta Esempio utilizzando "example_entry nell'esempio" angolare e visualizzare gli elementi di raccolta Esempio, ho solo l'userId prontamente disponibili. Ma se voglio visualizzare firstName e lastName, non posso farlo perché è in una diversa collezione "User". Devo scrivere un metodo di controllo/servizio angolare helper per ottenere il firstName, lastName dalla collezione User e legarlo con gli oggetti della collezione Example.

Per evitare questo problema, ho potuto De-normalizzare l'Ojbects Java e mando pronto per l'uso JSON come questo ..

Example - [{ 
userId:1, 
firstName - "John", 
lastName - "Doe", 
... 
... 
.. 
}, 
{ 
userId - 2, 
firstName - "Jane", 
lastName - "Doe", 
...}, 
{ 
userId:3, 
...}]; 

Ma è terribile buono/cattivo /? Perché ora i miei oggetti dominio Java hanno firstName, LastName duplicati nell'oggetto di esempio e anche l'oggetto utente. Qualche consiglio su quale percorso è migliore?

De-Normalize and have ready to use JSON 
Keep Data Normalized to avoid duplication and write converter methods on the Client as needed 

risposta

2

Ecco la mia opinione su questo. Quando si tratta di visualizzare \ listing data non sono preoccupato per il modello del dominio \ classes. Per me i dati restituiti devono corrispondere il più possibile ai requisiti di visualizzazione dell'interfaccia utente. Qui l'intento è quello di mostrare i dati all'utente e non si fa molto per prendere decisioni su tali schermi.

Tuttavia, se i dati devono essere modificati \ aggiornati, è necessario prestare maggiore attenzione a ciò che viene inviato, quali entità prendono parte all'aggiornamento. Mantenere i dati coerenti diventa prioritario e la de-normalizzazione potrebbe non essere adeguata in questi casi.

+0

Significa che dovrei lasciare le classi Java di backend come-è e scrivere metodi di supporto per convertire il JSON lato server in un JSON de-normalizzato? Grazie. – user6123723

+0

Se si tratta di un elenco di dati, creare una vista con i campi obbligatori nel DB e interrogare semplicemente tramite il codice dell'app, senza alcuna trasformazione richiesta. Per un aggiornamento dell'entità \ scenari di aggiornamento dei dati inviare l'entità dati corretta invece di fare qualsiasi denormalizzazione su bakend – Chandermani

+0

Ma non renderebbe lo storage db inefficiente con Denormalization? Ora se fName o lName cambiano, deve essere aggiornato in più di una posizione. Anche lo spazio di archiviazione utilizzato ora è più. Sono questi non-problemi? – user6123723

4

È necessario denormalizzare i dati quando lo si invia al livello dell'interfaccia utente.

Se i dati si trovano in un database, è un ottimo posto per i dati normalizzati. Utilizzare una vista che sottrae la normalizzazione e la query alla vista. La vista ti consente di unire le tabelle per ottenere dati denormalizzati dal tuo database.

Nel livello dell'interfaccia utente, si desidera avere una visualizzazione chiara e semplice, ovvero quando l'angolare brilla meglio. A meno che non si visualizzino grandi quantità di dati sullo schermo o si inviano enormi quantità in rete, si andrà molto meglio inviando semplicemente una registrazione denormalizzata direttamente dal db. Il DB è ottimo per realizzare join e altre funzioni di interrogazione dei dati: è progettato per questo. Javascript can farlo, ma non è il miglior uso di esso.

Problemi correlati