Devo utilizzare database relazionali o noSQL per questo problema

3

Sto lavorando a un progetto in cui una parte è per salvare i dati di persone diverse. Una persona tipica potrebbe avere la seguente struttura:

Email: Multiple values possible
City: Multiple values possible
Contact no.: Multiple values possible
...

Come puoi vedere, il punto qui è la possibilità di più valori per campi diversi. Se lo memorizzo in un database relazionale (diciamo, MySQL), penso che le query diventeranno un disastro perché dovrò mantenere troppe tabelle con chiavi esterne o memorizzare valori delimitati (che trovo estremamente brutto e scomodo).

Un database NoSQL, come MongoDB, sarà una soluzione migliore qui? Questo perché penso che i dati possano essere archiviati in oggetti e più valori possono essere gestiti facilmente come array all'interno di array, ecc.

Sarà una buona decisione o vedrai qualche problema nel lungo periodo? Il volume delle transazioni non sarà eccessivo (ad esempio, alcune centinaia al giorno al massimo).

Grazie in anticipo!

    
posta dotslash 25.11.2014 - 07:39
fonte

2 risposte

7

In realtà, non cambierei l'intero tipo di sistema di database perché c'è un problema minore con la modellazione di un artefatto. Supponendo che ti atterrai a un sistema di DB relazionale, hai le seguenti opzioni:

  • vivere con più tabelle per ogni tipo di informazione sulle persone. Sì, alcune domande potrebbero diventare un po 'più complicate, ma per la mia esperienza, ciò non significa che "diventano un disastro", è un'esagerazione. Se hai bisogno dello stesso tipo di JOIN complicato più e più volte, aggiungi alcune viste al modello fornendo i dati JOINed e consentendo query semplici per omre.

  • vivi con valori delimitati (in genere, solo per alcuni dei tuoi campi di informazione). Ciò è accettabile se non si intende utilizzare tali dati in una condizione WHERE e non si intende modificare parti di tali dati da SQL.

  • memorizza le informazioni complesse come un elenco di indirizzi di posta elettronica in stringhe XML o JSON. Alcuni sistemi di DB relazionali supportano direttamente questo tipo di attributi (la maggior parte dei DB relazionali moderni ha una sorta di supporto XML, alcuni supportano anche JSON). Ciò ti consentirà anche di memorizzare informazioni più complesse come un intero indirizzo in un attributo, con varianti di struttura diverse per ogni persona

  • crea un modello relazionale più generico con tabelle InformationField (rapporto n: 1 a Person ) e InformationFieldType (1: n relazione a InformationField ). Ciò consentirà di aggiungere un numero arbitrario di campi di informazioni alle persone in fase di esecuzione senza modificare successivamente lo schema DB (in qualche modo simile a un DB NoSQL). Lo svantaggio è che alcune query diventano davvero persino più complicate.

risposta data 25.11.2014 - 09:35
fonte
1

Ciò di cui hai veramente bisogno è una colonna aggiuntiva di "tipo di indirizzo" contenente valori come "casa", "lavoro", "casa estiva", "casa d'inverno" ecc. e avere più righe "indirizzo" per persona.

Avrai bisogno di qualcosa di simile per decidere quale indirizzo è più utile per un determinato caso d'uso.

    
risposta data 25.11.2014 - 08:40
fonte

Leggi altre domande sui tag