Compilazione di dati da più fonti API, più lingue, in un unico database (MySQL o Mongo)

1

Sto pensando a uno schema di database, e sarei davvero grato se qualcuno di voi potesse vedere dove sto lavorando e offrire qualche consiglio ..

La missione: dobbiamo scrivere un programma che recuperi i dati da circa 50 API diverse dai governi locali fornendo informazioni sugli eventi. Queste API non sono standardizzate, quindi lo schema varierà tra ciascuna. Vogliamo compilare tali dati in un unico database per il quale le altre nostre app possono attingere.

Un paio di cose che dobbiamo considerare:

  • Ci saranno campi comuni nel JSON / XML delle API come l'evento nome / titolo, descrizione, posizione (lat / lng), indirizzo, ecc. Tuttavia, ogni API può emettere i propri campi aggiuntivi che altre API non hanno, come come mobile, fax, meteo_fattori (ad esempio se piove, evento annullato). Idealmente vogliamo ancora raccogliere informazioni aggiuntive, se sembra utile, anche se non tutte le API lo segnalano.
  • Alcune API possono offrire traduzioni di informazioni sugli eventi. Queste sono API giapponesi, quindi possiamo essere certi che ognuno fornirà giapponese come standard. Tuttavia, se offrono anche lingue alternative (inglese, cinese ecc.) per memorizzare anche questo. Tuttavia, non tutte le API lo faranno.

Quindi, se MySQL, sto pensando a qualcosa del tipo:

eventi

Saranno campi che non si basano su linguaggi (ad esempio posizione lat / lng)

  • id
  • api_id (quindi possiamo mettere in relazione la voce evento con l'evento dell'ape)
  • lat
  • lng
  • città
  • ID_categoria (chiave esterna per la tabella delle categorie)
  • contact_id (chiave esterna nella tabella dei contatti)
  • start_date
  • data_finale

event_info

Si tratta di informazioni sull'evento a cui potremmo voler offrire più traduzioni, quindi abbiamo un campo lang (ad es. lang="en"). Questi saranno campi comuni in tutte le API, quindi ci aspettiamo di riempirli (anche se, ad esempio, manca la descrizione, sarà vuoto), anche se una sola voce giapponese per evento (quindi può consentire 1-a-molti , ma se solo una lingua sarà 1-a-1).

  • id
  • lang
  • event_id (chiave esterna con tabella degli eventi)
  • nome
  • Descrizione
  • pagamento

event_meta

Questo sarà per qualsiasi cosa aggiuntiva che una singola API fornisce che vogliamo catturare. Quindi se, ad esempio, forniscono un numero di fax, possiamo inserirlo come {"event_id": #, "lang": null, "nome": "fax", "valore": "12345678"} (Immagino nel caso di un fax, lang è irrilevante)

  • id
  • event_id
  • lang
  • nome
  • Valore

Avremo anche tabelle come i contatti (un singolo ufficio, potrebbe fornire informazioni su molti eventi) e le categorie

Tuttavia, mentre sto scrivendo questo, c'è anche la possibilità di mettere tutto questo in un database Mongo dove possiamo probabilmente gestire traduzioni come:

"_id": ...,
"api_key": "784578435",
"location": {
  "lat": ...,
  "lng": ...
},
"name": {
  "en": "Fun festival",
  "ja": "tanoshii matsuri"
},
"description": {
  "en": "Hello world...",
  "ja": "konichiwa sekai..."
},
"fee": "if given, we can add it"
"category_id": DBRef..
"contact_id": DBRef..

Inoltre, i campi extra possono essere facilmente gestiti. Hm, Mongo sembra molto più semplice. Ad ogni modo, i tuoi suggerimenti per assicurarmi che mi stia dirigendo un po 'nella direzione corretta sarebbero apprezzati, grazie.

    
posta Martyn 18.12.2015 - 03:16
fonte

0 risposte

Leggi altre domande sui tag