Database
 sql >> Database >  >> RDS >> Database

Un modello di dati per un'app meteo

Molte persone usano le app meteo mobili per pianificare la propria giornata o almeno decidono se devono portare un ombrello! Che tipo di modello di dati si trova sotto questi programmi popolari?

Vogliamo tutti sapere quanto è brutto il tempo prima di uscire. Le app per Windows, iOS e Android ci forniscono informazioni accurate e affidabili sulle condizioni meteorologiche attuali. Questo articolo spiega un modello di dati dettagliato che potrebbe essere utilizzato per tali app.

Di quali funzionalità ha bisogno un'app meteo?

Quasi tutti coloro che hanno uno smartphone hanno anche almeno un'app meteo. Queste app forniscono informazioni meteorologiche dettagliate, che aiutano i loro utenti a prepararsi per eventuali cambiamenti meteorologici che potrebbero incontrare durante il giorno.

Cosa dovrebbe fare un'app meteo?

  • Riporta le condizioni meteorologiche attuali, incluso lo stato generale (cioè soleggiato, parzialmente nuvoloso, nuvoloso, ecc.) temperatura dell'aria, umidità, velocità e direzione del vento, temperatura "sensibile", pressione barometrica e visibilità. Dovrebbe anche riportare informazioni generali come gli orari di alba e tramonto e le temperature alte e basse del giorno.
  • Visualizza i dettagli orari (temperatura, umidità, precipitazioni, condizioni meteorologiche generali) per le prossime 24 ore.
  • Mostra una previsione di base (temperature massime e basse giornaliere, condizioni meteorologiche e orari di alba/tramonto) per ogni giorno della prossima settimana o due.
  • Consenti agli utenti di impostare la propria città locale e qualsiasi altra città in cui desiderano vedere il meteo.
  • Consenti agli utenti di visualizzare i dati nelle unità di misura di loro scelta. Ad esempio, gli utenti statunitensi preferirebbero probabilmente le temperature Fahrenheit e la velocità del vento mostrate in miglia orarie, ma gli utenti canadesi ed europei preferirebbero gradi Celsius e chilometri orari.

Ricorda, l'app sta solo mostrando le previsioni del tempo e (a seconda delle impostazioni) la conversione delle unità di misura. Non esegue le previsioni effettive; riceve semplicemente i dati delle previsioni da un'altra fonte (come un servizio governativo o un'agenzia di previsioni meteorologiche) e li visualizza nel modo preferito dall'utente.

Il modello di dati dell'app meteo




Ho suddiviso il modello in tre aree tematiche:

  1. Weather Logs
  2. User Preferences
  3. User Profiles

Discuteremo ogni area nell'ordine in cui è elencata.

Registri meteo

Questa è l'area tematica più importante. Qualsiasi app meteo dovrebbe acquisire questi dettagli di base:

  • Temperatura attuale attuale
  • La temperatura attuale "sensibile", che potrebbe essere diversa dalla temperatura effettiva a causa di ulteriori fattori meteorologici (ad es. un'umidità elevata può far sembrare più calda una giornata calda o più fredda una giornata fredda).
  • Alte e basse temperature giornaliere
  • Dati punto di rugiada e/o umidità relativa
  • Velocità del vento
  • Direzione del vento
  • Pressione barometrica
  • Visibilità (ovvero una giornata nebbiosa avrà una visibilità inferiore rispetto a una giornata serena)
  • Orari di alba e tramonto

Insieme, questi forniscono una visione olistica delle condizioni meteorologiche attuali. Queste sono le informazioni che verranno presentate agli utenti, solitamente attraverso una o più schermate intuitive.

Esistono due tipi di attributi per qualsiasi previsione meteorologica:quelli che cambiano ogni giorno e quelli che cambiano durante ogni giorno. Attributi come l'ora dell'alba e del tramonto si basano su eventi che si verificano una volta al giorno, quindi queste informazioni vengono acquisite una volta al giorno. Quando si tratta di previsioni a lungo termine (da 7 a 15 giorni in anticipo), gli utenti dovrebbero avere informazioni sufficienti se si includono le temperature alte e basse di ogni giorno, il livello di umidità e le condizioni meteorologiche generali (cioè soleggiato, nuvoloso, ecc.).

Attributi come la temperatura attuale, la temperatura "sensibile", la velocità e la direzione del vento, la pressione barometrica e l'intervallo di visibilità possono cambiare nel corso della giornata. Questi dovrebbero essere acquisiti per un intervallo di tempo specifico, diciamo ogni ora o ogni tre ore. Ai fini di questo modello, assumiamo un intervallo di tempo di un'ora.

Poiché abbiamo due tipi di attributi, ho inserito due tabelle in questa area tematica. Il primo, weather_daily_forecast_log , contiene gli attributi giornalieri. Contiene queste colonne:

  • city_id – Fa riferimento alla city tabella e indica la città a cui si applicano questi dati.
  • calendar_date – La data di calendario per questi dati. Poiché questa tabella contiene un record per città per data, queste colonne (city_id e calendar_date ) formano la chiave primaria composita per questa tabella.
  • weather_status_id – Fa riferimento a weather_status tabella e indica le condizioni meteorologiche (ad es. piovoso, nuvoloso, parzialmente nuvoloso o soleggiato).
  • min_temperature – La temperatura minima (minima) di quel giorno.
  • max_temperature – La temperatura massima (massima) di quel giorno.
  • avg_humidity_in_percentage – La media umidità relativa nell'aria quel giorno. (La quantità di acqua che l'aria può trattenere è relativa alla sua temperatura.)
  • sunrise_time – Una colonna timestamp che memorizza l'ora dell'alba.
  • sunset_time – Una colonna timestamp che memorizza l'ora del tramonto.
  • last_updated_at – Contiene la data e l'ora (come timestamp) dell'ultimo aggiornamento del record.
  • source_system – Il nome della fonte delle nostre previsioni del tempo. Queste ultime due colonne vengono conservate a fini di controllo.

Il weather_hourly_forecast_log la tabella contiene tutti gli attributi che possono cambiare nel corso della giornata. Consideriamo questi attributi come un record per un periodo di tempo specifico. Le colonne sono:

  • id – La chiave surrogata per la tabella.
  • city_id – La città di riferimento.
  • start_timestamp – Una colonna timestamp che indica quando è iniziato questo periodo di tempo.
  • end_timestamp – Una colonna timestamp che indica quando è terminato questo periodo di tempo.
  • weather_status_id – Lo stato meteorologico generale per l'intervallo di tempo.
  • temperature – La temperatura attuale per l'intervallo di tempo.
  • feels_like_temperature – La temperatura "sensibile" per il periodo di tempo. Questo può essere influenzato da molti fattori, tra cui vento, pioggia e umidità alta o bassa. Queste informazioni danno un'impressione più realistica delle condizioni meteorologiche attuali.
  • humidity_in_percentage –Questa colonna contiene la quantità (in percentuale) di umidità nell'aria.
  • wind_speed_in_mph – Mantiene la velocità del vento in mph (miglia all'ora).
  • wind_direction – Questa colonna di testo memorizza uno o due caratteri che indicano la direzione del vento (N, NW, NE, S, W, SW, ecc.)
  • pressure_in_mmhg – Memorizza i valori di pressione dell'aria, in mmHg.
  • visibility_in_mph – Memorizza i valori dell'intervallo di visibilità, in miglia.

Queste tabelle conterranno i dati più recenti per un determinato periodo di tempo. Occasionalmente, è possibile emettere una previsione futura e poi modificarla. In tali casi, il record esistente per il giorno o la fascia oraria rilevante sarà sovrascritto dall'ultimo. Inoltre, noterai che abbiamo memorizzato solo gli attributi in un'unità di misura (ad es. mph) per attributo. Per risparmiare sullo spazio di archiviazione, memorizzeremo un solo record per ogni attributo e consentiremo al front-end di convertirli nelle unità preferite dell'utente quando necessario.

Preferenze utente

Questa area tematica tratta principalmente le preferenze dell'utente per le unità di misura. La maggior parte delle colonne è autoesplicativa, quindi spiegheremo brevemente lo scopo di ciascuna tabella.

Gli users la tabella contiene le informazioni di base sugli utenti, come l'indirizzo e-mail e il numero di telefono. Il id colonna assegna un numero univoco a ogni utente che si registra all'applicazione.

L'attribute la tabella memorizza un elenco di attributi, come temperatura, velocità del vento, direzione del vento, pressione barometrica, ecc.

Le measuring_units la tabella memorizza un elenco di tutte le unità di misura, con il nome, la descrizione e l'attribute_id corrispondenti .

Le user_preferences la tabella mappa la relazione tra gli utenti e le preferenze dell'unità di misura. Tieni presente che possiamo memorizzare informazioni sulle preferenze degli utenti per ogni singolo attributo. Poiché gli utenti possono scegliere qualsiasi unità di misura tra le opzioni fornite per un attributo, abbiamo creato una chiave primaria composita utilizzando users_id e attribute_id colonne.

Profili utente

Poiché l'applicazione consente agli utenti di monitorare il tempo in tutte le città che desiderano, questa area tematica gestisce l'associazione di una o più città a ciascun profilo utente.

La city la tabella memorizza un elenco di città e i dettagli della loro posizione (codice postale, paese, coordinate della mappa). Le colonne di questa tabella sono autoesplicative, ma è bene rendersi conto che il city_longitude e city_latitude le colonne possono contenere valori positivi o negativi.

Il user_city la tabella associa le città ai profili utente. Poiché gli utenti possono aggiungere una città ai propri profili solo una volta, abbiamo creato una chiave primaria composita utilizzando users_id e city_id colonne.

Cosa aggiungeresti a questo modello di dati?

Ora arriviamo alla sezione in cui ci dici cosa aggiungeresti, cambieresti o elimineresti in un modello. Cosa potremmo aggiungere? Bene, il riscaldamento globale è diventato una grande preoccupazione. La ricerca mostra chiaramente che è causato più dalle attività umane che dai cambiamenti naturali. Tuttavia, relativamente poche persone se ne rendono conto. Come possiamo sensibilizzare le persone sui cambiamenti climatici e sul riscaldamento globale? Potremmo includere nell'app fatti sui cambiamenti ambientali e le loro cause. O forse potremmo includere la percentuale di copertura arborea in un'area locale per aumentare la consapevolezza.

Cosa ne pensi? Fateci sapere le vostre idee commentando qui sotto.