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

Alquilar coches es tan sencillo como conducir:un modelo de datos para una empresa de alquiler de coches

Es posible que haya alquilado un automóvil en sus últimas vacaciones. Reservó su automóvil en línea y luego lo recogió en la ubicación designada después de pagar todos los cargos previamente acordados. Una vez que terminó, lo devolvió a la agencia y tal vez pagó algunas tarifas adicionales. ¿Alguna vez pensaste en el sistema que hace que sucedan todas estas cosas? En este artículo, veremos un modelo de datos para un sistema de alquiler de automóviles.

¿Por qué crear otro modelo de datos de alquiler de automóviles?

Quiero diseñar un modelo de datos de un sistema totalmente funcional para una empresa internacional de alquiler de coches. La empresa mantiene vehículos de alquiler en varios segmentos (mini, económico, intermedio, SUV, cargo y limusina). Opera sus operaciones desde varias ciudades en múltiples países. La empresa permite a sus clientes alquilar un coche en un lugar (lugar de recogida) y dejarlo en otro lugar (lugar de entrega).

Llegados a este punto, vamos a referirnos a un artículo anterior que explica un modelo sencillo de empresa de alquiler de coches. Este modelo cubre todos los servicios fundamentales que ofrece una empresa de alquiler de coches.




Antes de agregar nuevas funciones, me gustaría incorporar algunos cambios menores en este modelo, a saber:

  • Agregar city como una columna en la location y eliminando la mesa de la ciudad por completo.
  • Agregar una columna adicional, zip (como en código postal, o código postal), en la location mesa. Este sistema identificará una ubicación de recogida/entrega por su código postal. Hay muchos países donde el código postal es un número alfanumérico, por lo que mantendré esta columna como una columna varchar.

  • Agregar driving license issue date al customer mesa. Hay algunos países donde el límite máximo de velocidad depende de cuándo se emitió la licencia al conductor.

  • Renombrar la category tabla a car_category , que describe su contenido con mayor precisión.
  • Almacenar la información de vuelo de un cliente si el lugar de recogida está cerca de un aeropuerto. Esto permite que el sistema realice los cambios apropiados en la solicitud de reserva del cliente en caso de retrasos o cancelaciones de vuelos. Para hacer esto, agrego otra tabla llamada flight_detail y conéctalo a la reservation mesa.

Agregar información de la factura del cliente

Para la facturación, necesitamos almacenar un valor de alquiler para cada artículo del inventario, incluidos los automóviles y el equipo. El costo del alquiler se asigna a cada categoría, porque el proceso de reserva trata con categorías en lugar de automóviles individuales.

Déjame agregar rental_value en la car_category y equipment_category mesas.

De manera similar, debe haber algún costo asociado con el seguro. Este costo lo determina la compañía de seguros. Por ahora, agregaré una columna más, costo, en el insurance mesa.

Para la facturación, creo una tabla separada para almacenar todos los detalles de la factura. De esta manera, estos mismos detalles se pueden recuperar fácilmente cuando sea necesario. Dado que el cálculo de estos valores es un poco complicado, no los repetiré una y otra vez para una factura. Agregaré una tabla, a saber, rental_invoice , que está relacionado principalmente con el rental mesa.

La rental_invoice la tabla contiene las siguientes columnas:

  • id – la clave principal de esta tabla.
  • rental_id – la clave principal del rental mesa. Agregaré una restricción única en esta columna:solo puede haber un registro para cada alquiler.
  • car_rent – Esta columna representa los costes de alquiler del vehículo alquilado.
  • Este costo se puede determinar usando el siguiente SQL:

    select a.rental_value from car_category a, car b, rental c
    where  c.car_id = b.car_id and b.category_id = a.id
    and c.id = ;
    

  • equipment_rent_total – Esta columna muestra el monto a cobrar por cualquier equipo alquilado al cliente
  • El costo total se puede determinar usando el siguiente SQL:

    select sum(a.rental_value) from equipment_category a, equipment b, car_equipment c, car d, rental e
    where  a.id = b.equipment_category_id and b.id = c.equipment_id
    and c.car_id = d.id and d.id = e.car_id 
    and e.id = ;
    

  • insurance_cost_total – Esta columna es para el costo total del seguro del cliente. Esto se puede determinar usando el siguiente SQL

    select sum(a.cost) from insurance a, rental_insurance b, rental c
    where a.id = b.insurance_id and b.rental_id = c.id 
    and c.id = ;
    

  • service_tax y VAT – Como sugieren sus nombres, estas columnas almacenan valores para el impuesto de servicio y el IVA aplicables.
  • total_amount_payable – Esta columna contendrá el valor del importe total de la factura. Esta sería la suma de las siguientes columnas:

    total_amount_payable =car_rent + equipment_rent_total + insurance_cost_total

  • waiver_amount y net_amount_payable – Estas columnas almacenan valores para los montos de exención (si corresponde) y el monto neto adeudado para el pago. El waiver_amount es cuánto se renunciará a la factura total. Se usa comúnmente cuando una empresa de alquiler ofrece un descuento a los clientes. La fórmula para determinar net_amount_payable se parece a esto:

    net_amount_payable =total_amount_payable – waiver_amount

Inventario móvil – Para una empresa de alquiler de automóviles, su inventario siempre es móvil porque se mueve de un lugar a otro. Si ha notado una casilla de verificación que dice "¿volver a una ubicación diferente?" cuando reserva un automóvil en línea, lo ha visto en acción. El sistema trata su solicitud de manera un poco diferente si la ubicación de devolución NO es la misma que la ubicación de recogida. El sistema siempre realiza un seguimiento de su inventario a medida que se alquila y se devuelve.

Por ejemplo, un cliente alquila un automóvil en Chicago, confirma que el lugar de entrega será diferente y conduce hasta su destino en San Luis. Obviamente, dejará el auto en la ubicación de la compañía en Saint Louis. En este caso, tan pronto como conduce el automóvil desde la ubicación de Chicago, esta parte del inventario ya no está vinculada a esa oficina. El automóvil se registrará nuevamente, esta vez en la oficina de Saint Louis, tan pronto como termine con él.

Para incorporar este mecanismo, agregaré una columna, a saber, current_location_id , en el car mesa así como el equipment mesa. Esta columna contiene solo los ID válidos de las ubicaciones de la location mesa.

Entonces, con el ejemplo anterior, la ubicación inicial del automóvil es Chicago; se actualizará después de que el cliente devuelva el automóvil a la oficina de destino.

Configuración de opciones de abastecimiento de combustible

La mayoría de las empresas de alquiler de coches ofrecen los siguientes tipos de opciones de repostaje:
  1. Adelanto de servicio de combustible – el cliente paga por adelantado el depósito de combustible lleno y devuelve el coche con el depósito vacío.
  2. Cargo por servicio de combustible – el cliente obtiene el automóvil con el tanque lleno de combustible, pero lo paga en función del uso de combustible.
  3. Autoservicio de combustible – el cliente recibe el coche con el depósito de combustible lleno y lo devuelve con el depósito lleno. Esta es la opción más aceptada de las tres.

Aquí, no nos preocupa qué opción elige el cliente. Lo que queremos es registrar su elección mientras se procesa la solicitud de alquiler.

Para satisfacer esta necesidad, agregaré una tabla, fuel_option , que almacena todas las opciones posibles para repostar el coche. Debe haber un mapeo uno a uno entre una solicitud de alquiler y la fuel_option , ya que se pide al cliente que seleccione uno en el momento de reservar el alquiler.

El modelo final de datos de alquiler de vehículos




En muchas áreas, las empresas de alquiler de automóviles están cambiando hacia el uso de una experiencia de alquiler de autoservicio sin llave para sus clientes. No quieren que sus clientes esperen en un mostrador solo para completar el papeleo y recoger las llaves del auto. ¿Puede nuestro modelo de datos actual satisfacer tales requisitos? ¿Qué cambios se necesitan en nuestro modelo de datos para que esto suceda?

¿Tiene alguna idea sobre nuestro modelo de datos de alquiler de coches? ¡Comencemos una discusión! No dude en compartir su opinión en la sección de comentarios.