sql >> Database >  >> RDS >> Database

Een gegevensmodel voor een weer-app

Veel mensen gebruiken mobiele weer-apps om hun dag te plannen - of in ieder geval te beslissen of ze een paraplu mee moeten nemen! Wat voor soort datamodel ligt er onder deze populaire programma's?

We willen allemaal weten hoe vies het weer is voordat we naar buiten gaan. Windows-, iOS- en Android-apps geven ons nauwkeurige en betrouwbare informatie over de huidige weersomstandigheden. In dit artikel wordt een gedetailleerd gegevensmodel uitgelegd dat voor dergelijke apps kan worden gebruikt.

Welke functionaliteiten heeft een weer-app nodig?

Bijna iedereen die een smartphone heeft, heeft ook minstens één weer-app. Deze apps bieden gedetailleerde weersinformatie, waardoor hun gebruikers zich kunnen voorbereiden op eventuele weersveranderingen die ze gedurende de dag kunnen tegenkomen.

Wat moet een weer-app doen?

  • De huidige weersomstandigheden rapporteren, inclusief de algemene status (d.w.z. zonnig, gedeeltelijk bewolkt, bewolkt, enz.), luchttemperatuur, vochtigheid, windsnelheid en -richting, een "gevoelsmatige" temperatuur, barometrische druk en zicht. Het moet ook algemene informatie rapporteren, zoals tijden voor zonsopgang en zonsondergang en de hoge en lage temperaturen van de dag.
  • Geef details per uur weer (temperatuur, vochtigheid, neerslag, algemene weersomstandigheden) voor de komende 24 uur.
  • Laat een basisvoorspelling zien (dagelijkse hoge en lage temperaturen, weersomstandigheden en tijden van zonsopgang/ondergang) voor elke dag in de komende twee weken.
  • Gebruikers toestaan ​​hun lokale stad en andere steden in te stellen waar ze het weer willen zien.
  • Laat gebruikers gegevens zien in de maateenheden van hun keuze. Amerikaanse gebruikers geven bijvoorbeeld waarschijnlijk de voorkeur aan Fahrenheit-temperaturen en windsnelheden in mijlen per uur, maar Canadese en Europese gebruikers geven de voorkeur aan Celsius en kilometers per uur.

Onthoud dat de app alleen toont de weersvoorspelling en (afhankelijk van de instellingen) het omrekenen van meeteenheden. Het doet niet de eigenlijke voorspelling; het ontvangt eenvoudig voorspellingsgegevens van een andere bron (zoals een overheidsdienst of een weersvoorspellingsbureau) en geeft deze weer op de manier die de gebruiker verkiest.

Het gegevensmodel van de weer-app




Ik heb het model opgesplitst in drie vakgebieden:

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

We bespreken elk gebied in de volgorde waarin het wordt vermeld.

Weerlogboeken

Dit is het belangrijkste vakgebied. Elke weer-app moet deze basisgegevens vastleggen:

  • Huidige werkelijke temperatuur
  • De huidige "voelt als" temperatuur, die kan verschillen van de werkelijke temperatuur vanwege aanvullende weersfactoren (bijv. een hoge luchtvochtigheid kan een warme dag heter doen aanvoelen of een koude dag kouder).
  • Dagelijkse hoge en lage temperaturen
  • Dauwpunt- en/of relatieve vochtigheidsgegevens
  • Windsnelheid
  • Windrichting
  • Barometrische druk
  • Zichtbaarheid (d.w.z. op een mistige dag is het zicht minder dan op een heldere dag)
  • Tijden van zonsopgang en zonsondergang

Samen geven deze een holistisch beeld van de huidige weersomstandigheden. Dit is de informatie die aan gebruikers wordt gepresenteerd, meestal via een of meer intuïtieve schermen.

Elke weersvoorspelling heeft twee soorten attributen:die elke dag veranderen en die in de loop van de tijd elke dag. Kenmerken zoals tijden voor zonsopgang en zonsondergang zijn gebaseerd op gebeurtenissen die één keer per dag plaatsvinden, dus deze informatie wordt één keer per dag vastgelegd. Als het gaat om voorspellingen op lange termijn (van 7 tot 15 dagen van tevoren), moeten gebruikers voldoende informatie hebben als u de hoge en lage temperaturen van elke dag, de vochtigheidsgraad en de algemene weersomstandigheden (d.w.z. zonnig, bewolkt, enz.) opneemt.

Kenmerken zoals huidige temperatuur, "voelt als" temperatuur, windsnelheid en -richting, luchtdruk en zichtbereik kunnen gedurende de dag veranderen. Deze moeten worden vastgelegd voor een specifiek tijdsinterval, bijvoorbeeld elk uur of elke drie uur. Voor dit model gaan we uit van een tijdsbestek van één uur.

Omdat we twee soorten attributen hebben, heb ik twee tabellen in dit onderwerpgebied geplaatst. De eerste, weather_daily_forecast_log , bevat de dagelijkse attributen. Het bevat deze kolommen:

  • city_id – Verwijst naar de city tabel en geeft de stad aan waarop deze gegevens van toepassing zijn.
  • calendar_date – De kalenderdatum voor deze gegevens. Aangezien deze tabel één record per stad per datum bevat, zijn deze kolommen (city_id en calendar_date ) vormen de samengestelde primaire sleutel voor deze tabel.
  • weather_status_id – Verwijst naar de weather_status tabel en geeft de weersomstandigheden aan (d.w.z. regenachtig, bewolkt, gedeeltelijk bewolkt of zonnig).
  • min_temperature – De minimum (laagste) temperatuur van die dag.
  • max_temperature – De maximale (hoogste) temperatuur van die dag.
  • avg_humidity_in_percentage – Het gemiddelde relatieve vochtigheid in de lucht die dag. (De hoeveelheid water die lucht kan bevatten is relatief aan de temperatuur.)
  • sunrise_time – Een tijdstempelkolom die de zonsopgangstijd opslaat.
  • sunset_time – Een tijdstempelkolom waarin de tijd van zonsondergang wordt opgeslagen.
  • last_updated_at – Bevat de datum en tijd (als tijdstempel) wanneer de record voor het laatst is bijgewerkt.
  • source_system – De naam van de bron van onze weersvoorspelling. Deze laatste twee kolommen worden bewaard voor controledoeleinden.

De weather_hourly_forecast_log tabel bevat alle attributen die gedurende de dag kunnen veranderen. We beschouwen deze kenmerken als één record voor een specifiek tijdsbestek. De kolommen zijn:

  • id – De surrogaatsleutel voor de tafel.
  • city_id – De relevante stad.
  • start_timestamp – Een tijdstempelkolom die aangeeft wanneer dit tijdsbestek is begonnen.
  • end_timestamp – Een tijdstempelkolom die aangeeft wanneer dit tijdsbestek eindigde.
  • weather_status_id - De algemene weerstatus voor het tijdsbestek.
  • temperature – De huidige temperatuur voor het tijdsbestek.
  • feels_like_temperature – De “voelt-als” temperatuur voor het tijdsbestek. Dit kan worden beïnvloed door vele factoren, waaronder wind, regen en hoge of lage luchtvochtigheid. Deze informatie geeft een realistischer beeld van de huidige weersomstandigheden.
  • humidity_in_percentage –Deze kolom bevat de hoeveelheid (als percentage) vochtigheid in de lucht.
  • wind_speed_in_mph – Houdt de windsnelheid vast in mph (mijl per uur).
  • wind_direction – Deze tekstkolom bevat een of twee karakters die de windrichting aangeven (N, NW, NE, S, W, SW, etc.)
  • pressure_in_mmhg – Slaat luchtdrukwaarden op, in mmHg.
  • visibility_in_mph – Slaat waarden van het zichtbaarheidsbereik op, in mijlen.

Deze tabellen bevatten de meest recente gegevens voor een bepaald tijdsbestek. Af en toe kan een toekomstvoorspelling worden uitgegeven en later worden gewijzigd. In dergelijke gevallen wordt het bestaande record voor de betreffende dag of tijdsbestek overschreven door het laatste record. U zult ook merken dat we attributen slechts in één maateenheid (bijv. mph) per attribuut hebben opgeslagen. Om opslagruimte te besparen, slaan we slechts één record op voor elk attribuut en laten we de front-end deze indien nodig converteren naar de voorkeurseenheden van de gebruiker.

Gebruikersvoorkeuren

Dit onderwerp behandelt voornamelijk gebruikersvoorkeuren voor meeteenheden. De meeste kolommen spreken voor zich, dus we zullen kort het doel van elke tabel uitleggen.

De users tabel bevat basisinformatie over gebruikers, zoals e-mailadres en telefoonnummer. De id kolom wijst een uniek nummer toe aan elke gebruiker die zich registreert bij de applicatie.

Het attribute tabel slaat een lijst met attributen op, zoals temperatuur, windsnelheid, windrichting, luchtdruk, enz.

De measuring_units tabel slaat een lijst op van alle meeteenheden, met hun bijbehorende naam, beschrijving en attribute_id .

De user_preferences tabel brengt de relatie tussen gebruikers en meeteenheidvoorkeuren in kaart. Houd er rekening mee dat we voor elk afzonderlijk kenmerk informatie kunnen opslaan over de voorkeuren van gebruikers. Omdat gebruikers elke meeteenheid kunnen kiezen uit de gegeven opties voor een attribuut, hebben we een samengestelde primaire sleutel gemaakt met behulp van de users_id en attribute_id kolommen.

Gebruikersprofielen

Aangezien de applicatie gebruikers in staat stelt om het weer in zoveel steden te volgen als ze willen, behandelt dit onderwerpgebied het associëren van een of meer steden met elk gebruikersprofiel.

De city tabel bewaar een lijst met steden en hun locatiegegevens (postcode, land, kaartcoördinaten). De kolommen in deze tabel spreken voor zich, maar het is goed om te beseffen dat de city_longitude en city_latitude kolommen kunnen positieve of negatieve waarden bevatten.

De user_city tabel associeert steden met gebruikersprofielen. Aangezien gebruikers slechts één keer een stad aan hun profiel kunnen toevoegen, hebben we een samengestelde primaire sleutel gemaakt met behulp van de users_id en city_id kolommen.

Wat zou u aan dit gegevensmodel toevoegen?

Nu komen we bij het gedeelte waar u ons vertelt wat u zou toevoegen, wijzigen of verwijderen in een model. Wat kunnen we toevoegen? Welnu, de opwarming van de aarde is een grote zorg geworden. Onderzoek toont duidelijk aan dat het meer wordt veroorzaakt door menselijke activiteiten dan door natuurlijke veranderingen. Relatief weinig mensen beseffen dit echter. Hoe kunnen we mensen bewust maken van klimaatveranderingen en opwarming van de aarde? We zouden feiten over veranderingen in het milieu en hun oorzaken in de app kunnen opnemen. Of misschien kunnen we het percentage boombedekking in een lokaal gebied opnemen om het bewustzijn te vergroten.

Wat denk je? Laat ons uw ideeën weten door hieronder te reageren.


  1. Parallelle unnest() en sorteervolgorde in PostgreSQL

  2. Beperking aanroepen van een functie Oracle SQL-ontwikkelaar

  3. Hoe UPPER() werkt in MariaDB

  4. Beperking voor slechts één record gemarkeerd als standaard