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

Entrega de regalos de Navidad:modelo de datos de Santa

Con las vacaciones acercándose rápidamente, Santa necesita ayuda adicional para entregar regalos a los niños de todo el mundo. Hoy, desarrollaremos un modelo de datos que puede ayudar a Santa y sus duendes a trabajar de manera más eficiente.

Antecedentes

El trabajo de Santa es extremadamente importante, por lo que debe hacer todo lo posible para garantizar el éxito a tiempo. Solo recuerda todos los problemas que encontró Howard en "Jingle All the Way" cuando intentaba encontrar una sola figura de Turbo Man:no podemos dejar que Santa vuelva a cometer un error o su reputación se arruinará. Entonces, para ayudar a Santa a mantenerse organizado, dividiremos sus actividades en tres fases principales.

  1. Planificación

    Primero, Santa necesita planificar todo. ¡Después de todo, no puede tener a sus duendes corriendo por la fábrica y entrando en pánico mientras intentan dar sentido a miles de millones de entregas! Además de leer las cartas de este año y determinar qué regalos les gustaría a los niños, también debemos analizar las tendencias de años anteriores para reunir algunos materiales comunes o incluso producir regalos con anticipación. Esto ayudará a reducir algunos de los retrasos a medida que comencemos a trabajar en la producción.

  2. Producción

    Después de la fase de planificación, estamos listos para comenzar a producir regalos. Con la ayuda de los duendes de Papá Noel, podemos fabricar y empaquetar regalos rápidamente de acuerdo con las listas de deseos que recibimos. Sin embargo, para que el proceso sea más eficiente, debemos organizar todos los materiales y la información que tenemos a mano para que los elfos puedan tomar las cosas que necesitan lo más rápido posible.

  3. Entrega

    ¡El momento se acerca rápidamente! Los renos de Papá Noel están listos y el hombre mira ansiosamente su reloj. Los ayudantes de Papá Noel cargan rápidamente los regalos en el trineo. En este punto, Santa está echando un último vistazo a su agenda para asegurarse de que tiene todas las direcciones correctas, así como cualquier nota que deba considerar.

Ahora que tenemos algunos antecedentes sobre el tipo de información con la que necesitaremos trabajar, finalmente podemos comenzar a diseñar el modelo de datos de Santa.

El modelo de datos




Este modelo de datos consta de tres secciones:

  1. Artículos
  2. Personas y listas de deseos
  3. Entregas

Echemos un vistazo más de cerca a cada uno de estos.

Sección 1:Artículos

Nuestro modelo de datos comienza con la sección Elementos, que contiene muchas tablas que son fundamentales para las dos secciones restantes.

El item_type La tabla es posiblemente la más importante aquí. Esta tabla contiene una lista de todos los artículos que necesitaremos producir en la fábrica de Santa. Para cada artículo, almacenaremos la siguiente información:

  • item_name — el nombre del elemento.
  • properties — pares clave-valor textuales que indican el tamaño, la forma, el color y otras propiedades del elemento producido, almacenados en un formato estructurado.
  • description — una descripción textual no estructurada del artículo.

Si alguna vez tenemos dos elementos similares que solo difieren en algunas de sus propiedades, como el color, los almacenaremos como registros individuales en la tabla.

A los efectos de nuestro modelo de datos, supondremos que Papá Noel no comprará regalos, sino que ordenará a sus duendes que produzcan todo en casa. Para cada tipo de elemento diferente, tendremos una lista de requisitos previos que debemos cumplir. Estos pueden ser mano de obra o materiales como madera, plástico, metal y pinturas. Tendremos que almacenar una lista de todos los requisitos previos posibles y relacionarlos con cada artículo que necesitamos producir. Usaremos cuatro tablas para lograr esto.

La primera de estas cuatro tablas es prerequisite , que, como sugiere su nombre, almacena una lista de todos los requisitos previos posibles. Para cada registro en esta tabla, almacenaremos un nombre de requisito previo único, todas las properties adicionales (esta vez en un formato no estructurado) y referencias al prerequisite_type y diccionarios de unidades. El prerequisite_type El diccionario se utilizará para almacenar una lista de todas las categorías de requisitos previos, como "mano de obra" y "materiales". La unit El diccionario se usará para almacenar una lista de todas las unidades que usaremos para cuantificar nuestros requisitos previos. Por ejemplo, podemos esperar que la mano de obra se mida en horas o minutos y que los materiales se midan en términos de costo de producción (dólares), peso (kilogramos) o volumen (litros).

La última tabla de esta sección es warehouse , que usaremos para rastrear el estado actual de nuestro inventario tanto para artículos como para materiales (de ahí el item_type_id y prerequisite_id llaves extranjeras). Solo una de estas dos claves contendrá un valor en un momento dado. Además de estas claves, almacenaremos la quantity final que estaba disponible en un warehouse_date en particular .

Sección 2:Personas y listas de deseos

Una parte fundamental de nuestro modelo de datos, esta sección trata sobre las cosas que los niños quieren encontrar debajo de sus árboles de Navidad. Trabajaremos de derecha a izquierda.

Las dos tablas más a la derecha son country y city . Usaremos estas dos tablas cuando hagamos referencia a la ubicación de un niño que le envió a Santa una lista de deseos. El country la tabla contiene solo el country_name único atributo y una lista de todos los countries existentes . Para ser más precisos con nuestras ubicaciones, usaremos la city mesa para almacenar todas las ciudades que Santa necesitará visitar. Para cada ciudad de esta tabla, almacenaremos:

  • city_name — el nombre de la ciudad, que no es necesariamente único.
  • postal_code — el código postal de la ciudad.
  • country_id — la identificación del país en el que se encuentra la ciudad. Junto con los dos atributos anteriores, esto forma la clave única para esta tabla.
  • latitude y longitude — usado para ayudar a Papá Noel a encontrar la ciudad en su mapa o para ingresar sus coordenadas en el sistema de navegación que usa.

¡Por supuesto, no puedes tener deseos sin personas! Guardaremos una lista de todas las personas en la person mesa. Para cada individuo, almacenaremos un first_name , last_name , birth_date y city . También almacenaremos la dirección de la persona, así como cualquier delivery_details adicional. Es posible que Santa deba considerar (como una nota que indique que una persona no tiene chimenea).

La última tabla de esta sección contiene la wish_list que almacena todos los deseos de Navidad que se hayan hecho. Para cada deseo, necesitamos saber:

  • person_id — una referencia a la persona que hizo el deseo.
  • item_type_id — una referencia al elemento (tipo) que solicitó la persona.
  • quantity — la cantidad deseada del artículo especificado en el deseo.
  • details — todos los detalles que pueden ayudar a Santa a cumplir el deseo.
  • ts — indica el momento en que se almacenó el deseo en nuestro sistema, lo cual es importante para determinar el año en que se realizó el deseo.
  • gift_id — una referencia a la mesa de regalos que indica el regalo que se entregó para cumplir este deseo.

Sección 3:Entregas

Ahora, finalmente hemos llegado a la parte más interesante de nuestro modelo de datos:¡regalos y entregas!

Después de producir un solo artículo, insertaremos su registro relacionado en el item mesa. Tenga en cuenta que cuando se produce un artículo, todavía no está asignado a ningún regalo, por lo que el gift_id El atributo contendrá un valor de nulo hasta que el artículo se asocie con un regalo en particular. También necesitaremos almacenar el tipo de artículo que se produjo (item_type_id ), así como su quantity . Si bien la cantidad de un artículo será principalmente 1, podemos esperar cantidades diferentes en algunos casos especiales (por ejemplo, más de 1 artículo combinado en un conjunto; esto es muy inusual pero, sin embargo, es posible).

Continuando, combinaremos uno o más artículos para producir un gift . Actualizaremos item.gift_id una vez que hayamos empaquetado nuestros artículos seleccionados en ese regalo. Cada regalo será entregado a su persona relacionada (person_id ) y tendrá un estado de seguimiento (current_status_id ), así como una marca de tiempo de cuándo Santa planea entregar el regalo (delivery_time_planned ). También actualizaremos el valor de wish_list.gift_id atributo para todos los artículos que se entregaron con éxito.

Las dos últimas tablas de este modelo de datos se refieren al seguimiento de los estados de entrega. Primero, el status la tabla contiene un status_name único valor que usaremos al hacer referencia al estado actual del gft (gift.current_status_id ). Además, el status_history table almacenará una lista de todos los estados de todos los obsequios en nuestra base de datos, así como las marcas de tiempo de todas las actualizaciones de estado (ts).

Con suerte, nuestro modelo de datos ayudará a Santa a completar otro año exitoso de entregas para que todos podamos recibir nuestros regalos a tiempo. Si está de humor para más SQL con temas navideños, Vertabelo Academy ha preparado un desafío especial de vacaciones de 24 consultas. ¡Adelante, compruébalo! En nombre de la familia Vertabelo, ¡les deseamos una maravillosa Navidad!