2013-05-06 15 views
7

Ok, forse questo è troppo ampio per StackOverflow, ma esiste un buon modo generalizzato per assemblare i dati nelle tabelle relazionali in JSON gerarchico?Modo generalizzato per estrarre JSON da un database relazionale?

Ad esempio, diciamo che abbiamo una tabella "clienti" e una tabella "ordini". Voglio l'uscita a guardare come questo:

{ 
    "customers": [ 
     { 
      "customerId": 123, 
      "name": "Bob", 
      "orders": [ 
       { 
        "orderId": 456, 
        "product": "chair", 
        "price": 100 
       }, 
       { 
        "orderId": 789, 
        "product": "desk", 
        "price": 200 
       } 
      ] 
     }, 
     { 
      "customerId": 999, 
      "name": "Fred", 
      "orders": [] 
     } 
    ] 
}  

Preferirei non dover scrivere un sacco di codice procedurale per scorrere la tabella principale a prendere gli ordini un po 'alla volta e collegarli. Sarà dolorosamente lento.

Il database che sto utilizzando è MS SQL Server, ma presto avrò bisogno di fare la stessa cosa con MySQL. Sto usando Java e JDBC per l'accesso. Se uno di questi database avesse un qualche modo magico di assemblare questi record sul lato server sarebbe l'ideale.

In che modo le persone migrano dai database relazionali ai database JSON come MongoDB?

+0

Haha. Hah. Haaahaha .. bravo: D SQL Server può fare tali query * per l'output XML * (come una funzione del fornitore), ma non esiste * nessuna disposizione standard per questa attività in SQL *. L'utilizzo di un ORM/mapper appropriato può rendere più semplici le trasformazioni * client * (forse in un servizio Web?). (Trovo che il processo sia "relativamente indolore" in C#/LINQ, ma ci sono probabilmente strumenti progettati specificamente per questa mappatura.) – user2246674

+0

intendi una raccolta di documenti, 1 documento per cliente con array per i loro ordini, giusto? – Drew

+1

scaricare semplicemente un csv o json e utilizzare mongoimport – Drew

risposta

-1

Non esiste un modo generalizzato perché SQL Server non supporta JSON come tipo di dati. Dovrai creare il tuo "modo generalizzato" per questo.

Dai un'occhiata a questo articolo. Ci sono buoni esempi su come manipolare i dati del server SQL in formato JSON.

https://www.simple-talk.com/blogs/2013/03/26/sql-server-json-to-table-and-table-to-json/

+0

Ecco un buon modo per gestire i dati JSON (e XML e relazionali) in SQL Server in modo generalizzato: https://www.simple-talk.com/sql/ t-sql-programming/consuming-json-string-in-sql-server/ – rainabba

0

Penso che una soluzione 'generalizzata' sarà il seguente: -

  1. Creare una query 'selezionare' che si unirà tutte le tabelle necessarie per recuperare i risultati in una matrice tridimensionale 2 (come CSV tavolo/temporanea, ecc)
  2. Se ogni riga di questo join è univoca e lo schema MongoDB e le colonne hanno un mapping uno a uno, è tutto relativo all'importazione di questo CSV/tabella utilizzando il comando MongoImport con i parametri richiesti.
  3. Tuttavia, un caso come sopra, in cui un dato ID cliente può avere una serie di "ordini", necessita di alcuni calcoli prima di mongoImport.
    Dovrai scrivere un programma che può 'unire verticalmente' gli ordini per un dato ID cliente. Per un piccolo insieme di dati, un semplice programma java funzionerà. Ma per set più grandi, la programmazione parallela con la scintilla può fare questo lavoro.
Problemi correlati