sql >> Base de Datos >  >> RDS >> Database

Un modelo de datos para una aplicación meteorológica

Mucha gente usa aplicaciones meteorológicas móviles para planificar su día, ¡o al menos decidir si necesitan llevar un paraguas! ¿Qué tipo de modelo de datos subyace a estos populares programas?

Todos queremos saber qué tan desagradable es el clima antes de salir. Las aplicaciones de Windows, iOS y Android nos brindan información precisa y confiable sobre las condiciones climáticas actuales. Este artículo explica un modelo de datos detallado que podría usarse para tales aplicaciones.

¿Qué funcionalidades necesita una aplicación meteorológica?

Casi todos los que tienen un teléfono inteligente también tienen al menos una aplicación meteorológica. Estas aplicaciones brindan información meteorológica detallada, lo que ayuda a sus usuarios a prepararse para cualquier cambio climático que puedan encontrar durante el día.

¿Qué debe hacer una aplicación meteorológica?

  • Informa sobre las condiciones meteorológicas actuales, incluido el estado general (es decir, soleado, parcialmente nublado, nublado, etc.), la temperatura del aire, la humedad, la velocidad y la dirección del viento, la temperatura que se siente, la presión barométrica y la visibilidad. También debe informar información general, como las horas de salida y puesta del sol y las temperaturas máximas y mínimas del día.
  • Muestre detalles por hora (temperatura, humedad, precipitación, condiciones climáticas generales) durante las próximas 24 horas.
  • Muestre un pronóstico básico (temperaturas máximas y mínimas diarias, condiciones meteorológicas y horas de salida y puesta del sol) para cada día de la próxima semana o dos.
  • Permita a los usuarios configurar su ciudad local y cualquier otra ciudad donde deseen ver el clima.
  • Permita que los usuarios vean los datos en las unidades de medida que elijan. Por ejemplo, los usuarios de EE. UU. probablemente preferirían que las temperaturas Fahrenheit y la velocidad del viento se muestren en millas por hora, pero los usuarios canadienses y europeos preferirían Celsius y kilómetros por hora.

Recuerde, la aplicación solo muestra el pronóstico del tiempo y (dependiendo de la configuración) la conversión de unidades de medida. No hace el pronóstico real; simplemente recibe datos de pronóstico de otra fuente (como un servicio gubernamental o una agencia de pronóstico del tiempo) y los muestra de la forma preferida por el usuario.

El modelo de datos de la aplicación meteorológica




He dividido el modelo en tres áreas temáticas:

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

Hablaremos de cada área en el orden en que aparecen.

Registros meteorológicos

Esta es el área temática más importante. Cualquier aplicación meteorológica debería capturar estos detalles básicos:

  • Temperatura real actual
  • Temperatura actual que se "siente", que puede ser diferente de la temperatura real debido a factores climáticos adicionales (por ejemplo, la alta humedad puede hacer que un día caluroso se sienta más caluroso o un día frío más frío).
  • Temperaturas altas y bajas diarias
  • Datos de punto de rocío y/o humedad relativa
  • Velocidad del viento
  • Dirección del viento
  • Presión barométrica
  • Visibilidad (es decir, un día con niebla tendrá menos visibilidad que un día despejado)
  • Horario de salida y puesta del sol

Juntos, estos dan una visión holística de las condiciones climáticas actuales. Esta es la información que se presentará a los usuarios, generalmente a través de una o más pantallas intuitivas.

Hay dos tipos de atributos para cualquier pronóstico del tiempo:los que cambian cada día y los que cambian a lo largo cada día. Los atributos como las horas de salida y puesta del sol se basan en eventos que ocurren una vez al día, por lo que esta información se captura una vez por día. Cuando se trata de pronósticos a largo plazo (de 7 a 15 días de anticipación), los usuarios deben tener suficiente información si incluye las temperaturas altas y bajas de cada día, el nivel de humedad y las condiciones climáticas generales (es decir, soleado, nublado, etc.).

Atributos como la temperatura actual, la temperatura de "sensación", la velocidad y dirección del viento, la presión barométrica y el rango de visibilidad pueden cambiar a lo largo del día. Estos deben capturarse durante un intervalo de tiempo específico, digamos cada hora o cada tres horas. A los efectos de este modelo, supondremos un marco de tiempo de una hora.

Debido a que tenemos dos tipos de atributos, he puesto dos tablas en esta área temática. El primero, weather_daily_forecast_log , tiene los atributos diarios. Contiene estas columnas:

  • city_id – Hace referencia a la city y representa la ciudad a la que se aplican estos datos.
  • calendar_date – La fecha del calendario para estos datos. Dado que esta tabla contiene un registro por ciudad por fecha, estas columnas (city_id y calendar_date ) forman la clave primaria compuesta para esta tabla.
  • weather_status_id – Hace referencia al weather_status tabla e indica la condición meteorológica (es decir, lluvioso, nublado, parcialmente nublado o soleado).
  • min_temperature – La temperatura mínima (más baja) de ese día.
  • max_temperature – La temperatura máxima (más alta) de ese día.
  • avg_humidity_in_percentage – El promedio humedad relativa en el aire ese día. (La cantidad de agua que puede contener el aire es relativa a su temperatura).
  • sunrise_time – Una columna de marca de tiempo que almacena la hora del amanecer.
  • sunset_time – Una columna de marca de tiempo que almacena la hora del atardecer.
  • last_updated_at – Contiene la fecha y la hora (como una marca de tiempo) cuando se actualizó el registro por última vez.
  • source_system – El nombre de la fuente de nuestro pronóstico del tiempo. Estas dos últimas columnas se conservan con fines de auditoría.

El weather_hourly_forecast_log table contiene todos los atributos que pueden cambiar a lo largo del día. Consideramos estos atributos como un registro para un período de tiempo específico. Las columnas son:

  • id – La clave sustituta de la tabla.
  • city_id – La ciudad correspondiente.
  • start_timestamp – Una columna de marca de tiempo que indica cuándo comenzó este período de tiempo.
  • end_timestamp – Una columna de marca de tiempo que indica cuándo finalizó este período de tiempo.
  • weather_status_id – El estado general del clima para el período de tiempo.
  • temperature – La temperatura actual para el período de tiempo.
  • feels_like_temperature – La temperatura de “sensación” para el período de tiempo. Esto puede verse influenciado por muchos factores, incluidos el viento, la lluvia y la humedad alta o baja. Esta información da una impresión más realista de las condiciones meteorológicas actuales.
  • humidity_in_percentage –Esta columna contiene la cantidad (como porcentaje) de humedad en el aire.
  • wind_speed_in_mph – Mantiene la velocidad del viento en mph (millas por hora).
  • wind_direction – Esta columna de texto almacena uno o dos caracteres que indican la dirección del viento (N, NW, NE, S, W, SW, etc.)
  • pressure_in_mmhg – Almacena valores de presión de aire, en mmHg.
  • visibility_in_mph – Almacena valores de rango de visibilidad, en millas.

Estas tablas contendrán los datos más recientes para un período de tiempo particular. Ocasionalmente, se puede emitir un pronóstico futuro y luego cambiarlo. En tales casos, el registro existente para el día o franja horaria correspondiente será sobrescrito por el último. Además, notará que solo hemos almacenado atributos en una unidad de medida (por ejemplo, mph) por atributo. Para ahorrar en almacenamiento, solo almacenaremos un registro para cada atributo y dejaremos que el front-end los convierta a las unidades preferidas del usuario cuando sea necesario.

Preferencias de usuario

Esta área temática maneja principalmente las preferencias del usuario para las unidades de medida. La mayoría de las columnas se explican por sí mismas, por lo que solo explicaremos brevemente el propósito de cada tabla.

Los users la tabla contiene información básica sobre los usuarios, como la dirección de correo electrónico y el número de teléfono. El id columna asigna un número único a cada usuario que se registra en la aplicación.

El attribute tabla almacena una lista de atributos, como temperatura, velocidad del viento, dirección del viento, presión barométrica, etc.

Las measuring_units tabla almacena una lista de todas las unidades de medida, con su correspondiente nombre, descripción y attribute_id .

Las user_preferences tabla mapea la relación entre los usuarios y las preferencias de unidades de medida. Tenga en cuenta que podemos almacenar información sobre las preferencias de los usuarios para cada atributo individual. Dado que los usuarios pueden elegir cualquier unidad de medida de las opciones dadas para un atributo, hemos creado una clave primaria compuesta usando el users_id y attribute_id columnas.

Perfiles de usuario

Dado que la aplicación permite a los usuarios monitorear el clima en tantas ciudades como deseen, esta área temática se encarga de asociar una o más ciudades con cada perfil de usuario.

La city tabla almacenar una lista de ciudades y sus detalles de ubicación (código postal, país, coordenadas del mapa). Las columnas de esta tabla se explican por sí mismas, pero es bueno darse cuenta de que la city_longitude y city_latitude las columnas pueden contener valores positivos o negativos.

La user_city tabla asocia ciudades con perfiles de usuario. Dado que los usuarios pueden agregar una ciudad a sus perfiles solo una vez, hemos creado una clave principal compuesta utilizando el users_id y city_id columnas.

¿Qué agregaría a este modelo de datos?

Ahora llegamos a la sección donde nos dice qué agregaría, cambiaría o eliminaría en un modelo. ¿Qué podríamos agregar? Bueno, el calentamiento global se ha convertido en una gran preocupación. La investigación muestra claramente que es causado más por actividades humanas que por cambios naturales. Sin embargo, relativamente pocas personas se dan cuenta de esto. ¿Cómo podemos concienciar a la gente sobre los cambios climáticos y el calentamiento global? Podríamos incluir datos sobre cambios ambientales y sus causas en la aplicación. O tal vez podríamos incluir el porcentaje de cobertura arbórea en un área local para crear conciencia.

¿Qué piensas? Por favor, háganos saber sus ideas comentando a continuación.