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

Construcción de un modelo de datos para un sistema de gestión de estacionamientos

Las investigaciones muestran que los automóviles permanecen estacionados durante el 95 % de su vida útil, lo que sugiere que los sistemas de administración de estacionamientos deben ser inteligentes, eficientes y sólidos. En este artículo, construiremos un modelo de datos para dicho sistema.

Introducción

Antes de comenzar a construir nuestro modelo de datos, primero debemos comprender cómo se estructuran los estacionamientos y cómo funcionan. Echemos un breve vistazo a estas dos áreas clave.

  1. ¿Cómo están estructurados los estacionamientos?

    Un estacionamiento típico consta de uno o más bloques que se subdividen en pisos. Cada piso contiene múltiples alas que ayudan a los conductores a orientarse y recordar sus lugares de estacionamiento. Estos suelen estar etiquetados con letras, como "A", "B", "C", etc. Un piso generalmente tiene un límite de altura que restringe el ingreso de ciertos vehículos al estacionamiento. Además, un piso contiene varios espacios de estacionamiento numerados de manera única. Algunas de estas franjas horarias están reservadas para personas con discapacidad; otros pueden ser reservados por visitantes regulares a un costo determinado.

  2. ¿Cómo funcionan los estacionamientos?

    Para comprender cómo funcionan los estacionamientos, debemos saber más sobre los tipos de personas que visitan los estacionamientos. Los clientes que ingresan a los estacionamientos pertenecen a uno de los siguientes grupos:

    • Un cliente habitual que ha comprado un pase quincenal, mensual o anual.
    • Un cliente de prepago que reservó un espacio de forma remota (por teléfono o en línea).
    • Un cliente sin cita previa que no tiene un pase ni reservó un espacio de forma remota. Se asignará un espacio a dicho cliente en función de la disponibilidad.

    Por lo general, a los clientes habituales se les entregan tarjetas o calcomanías para que las coloquen en algún lugar visible de su tablero o parabrisas, de modo que la administración del estacionamiento pueda determinar fácilmente que los clientes no están violando ninguna regla de estacionamiento. A diferencia de los visitantes ocasionales, a los clientes regulares nunca se les entregan boletos de estacionamiento diariamente. Un estacionamiento generalmente reserva un bloque o piso completo para sus visitantes regulares para garantizar que siempre tengan lugares para estacionar. Los clientes regulares también pueden reservar espacios para ellos mismos para que puedan estacionar sus vehículos en los mismos espacios designados todos los días, pero esto generalmente tiene un costo adicional.

    Aquellos que hacen reservas de estacionamiento remotas, por lo general, solo pueden usar sus espacios designados durante un período de tiempo limitado de un par de horas, después de lo cual se liberan los espacios. Cuando estos visitantes ingresan al estacionamiento, deben estacionarse en sus espacios reservados. Se cobra una multa a los clientes que no abandonan el estacionamiento después de que hayan transcurrido sus períodos de tiempo, pero los clientes ciertamente pueden irse antes de que caduquen sus reservas. Algunos estacionamientos tienen un período de tiempo mínimo fijo (por ejemplo, es posible que el cliente deba reservar un espacio para tres horas, incluso si solo se ausentará durante una hora).

    Los clientes sin cita previa reciben boletos de estacionamiento cuando ingresan a un estacionamiento. A continuación, se asigna una plaza de aparcamiento al cliente a medida que se genera el comprobante, en función de las preferencias que haya especificado. El proceso de reserva aquí es esencialmente el mismo que el de los clientes de prepago. Sin embargo, una reserva sin cita previa depende completamente de la disponibilidad. Un espacio puede costarle más que si tuviera que reservar un lugar con anticipación, especialmente si hay disponibilidad limitada y alta demanda.

Modelo de datos




Con estos requisitos en mente, sigamos adelante y creemos nuestro modelo de datos. Esta vez, trabajaremos con tres secciones principales:

  • Estacionamiento
  • Cliente
  • Reserva de estacionamiento

Echemos un vistazo más de cerca a cada una de estas áreas de nuestro modelo de datos.

Sección 1:Estacionamiento

La sección Estacionamiento no solo captura toda la información importante sobre el estacionamiento en sí, sino que también simplifica la forma en que la empresa puede administrar la unidad más pequeña del estacionamiento (una ranura). Se han agregado algunas columnas de la tabla con el único propósito de hacer que las reservas de estacionamiento y las operaciones sean más eficientes en secciones posteriores.

De acuerdo con la estructura del estacionamiento que discutimos en la introducción, hemos creado las siguientes tablas para capturar todos y cada uno de los detalles que necesitaremos.

parking_lot – almacena información básica sobre un estacionamiento. Las columnas de esta tabla son:

  • id – la clave primaria para esta tabla. Asigna un número único a cada estacionamiento.
  • number_of_blocks – realiza un seguimiento del número de bloques en un estacionamiento.
  • is_slot_available – significa si el estacionamiento actualmente tiene espacios disponibles.
  • address – almacena la dirección completa de un estacionamiento.
  • zip – almacena el código postal de un estacionamiento, lo que permite a los clientes buscar más fácilmente los estacionamientos disponibles dentro de un área determinada simplemente consultando el código postal deseado.
  • is_reentry_allowed – indica si un cliente puede salir del estacionamiento y volver a ingresar con el mismo boleto de estacionamiento. Tenga en cuenta que muchos estacionamientos generalmente no permiten que los clientes hagan esto. En dichos estacionamientos, debe comprar un nuevo boleto cada vez que vuelva a ingresar en un día determinado.
  • operating_company_name – almacena el nombre de la empresa que opera el estacionamiento.
  • is_valet_parking_available – significa si el estacionamiento ofrece servicios de valet parking.

block – un estacionamiento está dividido en uno o más bloques. Esta tabla almacena información sobre cada bloque de un estacionamiento. Las columnas de esta tabla son:– un estacionamiento se divide en uno o más bloques. Esta tabla almacena información sobre cada bloque de un estacionamiento. Las columnas de esta tabla son:

  • id – la clave principal para esta tabla.
  • parking_lot_id – la columna referenciada del parking_lot tabla que identifica el estacionamiento al que pertenece el bloque.
  • block_code – almacena el código asociado a este bloque. Los bloques generalmente reciben códigos de identificación únicos, como "A", "B", "C", "11", "22", "33", etc.
  • number_of_floors – almacena el número de pisos en este bloque. El número “1” indica que se trata de un bloque a nivel del suelo sin plantas.
  • is_block_full – indica si el bloque está actualmente lleno.

floor – en estacionamientos de varios niveles, los bloques pueden tener más de un piso. Sin embargo, esta tabla también puede ser referenciada por bloques a nivel del suelo. Las columnas de esta tabla son:

  • id – la clave principal para esta tabla.
  • block_id – identifica el bloque al que pertenece un piso.
  • floor_number – representa el número de un piso (donde 1 =nivel del suelo).
  • max_height_in_inch – en un estacionamiento de varios niveles, cada piso tiene una restricción de altura. Esta columna almacena la altura máxima permitida para vehículos en un piso.
  • number_of_wings – un piso se divide aún más en alas, lo que ayuda a los clientes a recordar dónde estacionaron. Esta columna almacena el número de alas que existen en un piso.
  • number_of_slots – almacena el número de ranuras que existen en un piso.
  • is_covered – identifica si un suelo está cubierto. Nunca se cubrirá el último piso de un estacionamiento de varios niveles o un estacionamiento a nivel del suelo.
  • is_accessible – indica si el piso es de fácil acceso, especialmente para los discapacitados. Si un lote de varios niveles tiene un ascensor operativo, cada uno de sus pisos se considera accesible.
  • is_floor_full – indica si un piso está completamente ocupado.
  • is_reserved_reg_cust – indica si un piso está estrictamente reservado para clientes regulares.

parking_slot – esta tabla almacena toda la información sobre los espacios de estacionamiento de un estacionamiento. Las columnas de esta tabla son:

  • id – clave principal para esta tabla.
  • floor_id – identifica el piso al que pertenece un espacio.
  • slot_number – almacena el identificador único de la ranura en un piso en particular.
  • wing_code – identifica el ala en la que se encuentra una ranura.

Sección 2:Clientes

Continuando, ahora comenzaremos a detallar toda la información relevante sobre los clientes. Tenga en cuenta que los estacionamientos no se ocupan de capturar y almacenar información personal como nombres, direcciones, etc., ya que pueden acceder a sus portales locales del DMV en cualquier momento para obtener dicha información, si es necesario.

customer – almacena todos los detalles relevantes sobre todo tipo de clientes que pueden visitar el estacionamiento (regular, único y prepago). Las columnas de esta tabla son:

  • id – identificador único para el cliente.
  • vehicle_number – almacena el número de matrícula del vehículo de un cliente.
  • registration_date – almacena la fecha en que el vehículo se registró por primera vez en el estacionamiento.
  • is_regular_customer – indica si un cliente tiene pase regular. Si la columna almacena un valor de verdadero, entonces debe existir una entrada válida en el regular_pass mesa. Una vez que un pase caduca y el cliente aún no lo ha renovado, el valor de esta columna se actualiza a falso.
  • contact_number – almacena el número de contacto de un cliente. Dado que algunas personas son reacias a compartir sus números de contacto con los estacionamientos, mantuvimos esta columna anulable.

regular_pass – almacena información sobre pases regulares que se emiten a los clientes. Las columnas de esta tabla son:

  • id – clave principal para esta tabla.
  • customer_id – una columna referenciada de la tabla de clientes.
  • purchase_date – almacena la fecha en la que se compró el pase.
  • start_date – almacena la fecha en la que el pase se considerará válido, que puede no ser necesariamente la fecha de compra, ya que algunos clientes compran los pases por adelantado.
  • duration_in_days – almacena el número de días de validez de un pase. Un pase mensual suele ser válido durante 30 días.
  • cost – almacena el costo, en moneda local, que un cliente debe pagar para comprar un pase.

Sección 3:Reservas

Nuestro último apartado está dedicado a detallar el proceso de reserva de plazas de aparcamiento. Al realizar una reserva, un cliente generalmente debe proporcionar ciertos detalles, como la fecha y hora previstas de llegada, la cantidad de tiempo para la que desea reservar el espacio, etc. Discutimos las dos tablas principales de esta sección a continuación.

parking_slot_reservation – mantiene los detalles de la reserva. Las columnas de esta tabla son:

  • id – asigna un número de referencia único a una solicitud de reserva individual.
  • customer_id – referencia al identificador del cliente que realiza esta reserva.
  • start_timestamp – almacena la fecha y hora previstas de llegada del cliente.
  • duration_in_minutes – almacena la duración por la cual se realizó la reserva.
  • booking_date – almacena la fecha en que se realizó la reserva.
  • parking_slot_id – columna interna que asigna un espacio de estacionamiento a un cliente una vez que se captura su solicitud y se realiza el pago.

parking_slip – almacena información sobre los tiempos de entrada y salida del cliente, así como cualquier tarifa relevante. Creamos esta tabla para estacionamientos que permiten múltiples entradas y salidas bajo la misma reserva. Las columnas de esta tabla son:

  • id – la clave principal para esta tabla.
  • parking_slot_reservation_id – columna referenciada que identifica la solicitud de reserva asociada.
  • actual_entry_time – almacena la fecha de llegada y la marca de tiempo del cliente.
  • actual_exit_time – almacena la fecha y hora de salida (salida) del cliente.
  • basic_cost – almacena el coste básico de la reserva.
  • penalty – almacena un valor de 0 por defecto. Si un cliente retrasa su salida, se aplicará una multa y se actualizará el valor de esta columna.
  • total_cost – esta columna simplemente agrega los valores del basic_cost y columnas de penalización.
  • is_paid – el reingreso generalmente se permite solo cuando un cliente ha pagado su tarifa de estacionamiento. Esta columna indica si se ha realizado este pago.

Conclusión

En este artículo, presentamos una descripción general de un modelo de datos para un sistema de gestión de estacionamientos. Hay muchas aplicaciones que ayudan a los usuarios a encontrar lugares de estacionamiento mediante la extracción, el procesamiento y la compilación de datos (como la disponibilidad y los costos) de los lugares de estacionamiento en una vecindad específica. Esto es especialmente útil para las personas que visitan grandes ciudades como Nueva York, Los Ángeles y otras donde encontrar un estacionamiento puede ser una pesadilla si no planifica su visita con cuidado. Estas aplicaciones se basan en modelos de datos bien diseñados y API de bases de datos para recuperar esta información.

En nuestro próximo artículo, transformaremos nuestro modelo de datos actual en una solución para un sistema de disponibilidad de estacionamiento en tiempo real. Siéntase libre de publicar sus pensamientos, comentarios y recomendaciones en la sección de comentarios a continuación.