Es bien sabido que la mejor manera de aprender algo es practicarlo en un escenario de la vida real. Obviamente, lo mismo se aplica al modelado de bases de datos. Por lo tanto, en este artículo decidí enseñarle cómo crear una estructura de base de datos simple, tomando un ejemplo de libro de texto de un sistema de reserva de habitaciones de hotel. Le mostraré cómo empezar y le daré algunas ideas para ampliar el modelo.
Modelado de bases de datos:Descubrir, Descubrir, Descubrir
En este artículo diseñaremos un modelo de datos para un sistema de reserva de habitaciones de hotel. Buscamos un modelo de datos donde podamos representar información sobre las habitaciones, los huéspedes y las reservas realizadas en nuestro imaginario Hotel VERTABELO*****. Toda esta información se almacenará en tablas.
El modelado de bases de datos es un proceso de descubrimiento cíclico. Primero identificamos las tablas principales y sus atributos. En nuestro modelo, las mesas principales son:room
, guest
y reservation
. Luego continuamos refinando nuestras tablas descubriendo sus atributos o columnas. Por ejemplo, la room
la tabla tiene atributos como:sala number
, name
y smoke
bandera entre otros.
Reservation
la tabla tiene atributos date_in
, date_out
, status
(cancelado, confirmado) y made_by
(en línea, en persona, teléfono, correo), mientras que los atributos de la tabla guest
son:first_name
, last_name
y member_since
. Quizás te apetezca la reservation
la mesa necesita más atributos (como tipo de habitación, número de camas), cubriremos este punto más adelante, hasta entonces, considere nuestra reservation
tabla incompleta. El siguiente modelo de datos creado en Vertabelo muestra las tablas principales.
Tipos de datos:¿Cuáles son los dominios de valores permitidos para una columna?
Tenga en cuenta que cada columna tiene un tipo de datos (varchar, entero, fecha, booleano) para indicar qué tipo de valores se pueden asignar a la columna. Por ejemplo, la columna smoke
en la mesa room
es booleano tipo de datos, lo que significa que solo verdadero o falso son los valores permitidos.
Claves primarias:el número de seguro social de cada registro
Cada tabla debe tener una columna (o más de una) que actúe como identificador para cada registro de la tabla. Esta columna se denomina clave principal (PK) y las mejores prácticas en el diseño de bases de datos sugieren que cada tabla debe tener una PK.
Si echamos un vistazo al modelo de datos anterior de Vertabelo, veremos que cada tabla tiene una columna llamada id
con un indicador PK a la derecha. Estas columnas de id forman el PK (por convención las llamamos id
la columna PK).
Un concepto importante, quizás obvio para muchos lectores, es que una columna PK no puede tener valores duplicados. En otras palabras, cada columna PK tiene una restricción única, y cualquier intento de crear un nuevo registro con un valor duplicado será rechazado con un error por parte del administrador de la base de datos.
Continuar descubriendo; Buscar nuevos objetos de base de datos
Una reserva es uno de los elementos más complejos de representar en este modelo de datos. Una reserva puede tener muchas habitaciones asociadas (por ejemplo, "Deseo hacer una reserva para una habitación doble y una habitación separada con 3 camas para mis hijos"). Este requisito comercial agrega 4 cosas a nuestro modelo:
Una nueva tabla: Necesitamos crear una nueva tabla llamada room_reserved
, donde almacenamos todas las habitaciones pertenecientes a una reserva.
Añadir dos referencias: Una referencia es un elemento muy importante en un modelo de datos. Una referencia describe cómo se relaciona una tabla con otra tabla. En nuestro modelo, cada habitación reservada pertenece a una reserva, por lo que usaremos una referencia para modelar ese hecho. Esta referencia se representa gráficamente como una línea que conecta ambas tablas.
Además, como cada reserva pertenece a un huésped, debemos crear una nueva referencia que vincule al guest
y la reservation
mesas.
Mover una columna: Como podemos tener varias habitaciones pertenecientes a una reserva, debemos permitir la cancelación por habitación individual, luego movemos el attribute
estado de reservation
a reserved_room
mesa.
El modelo de datos actualizado se muestra en el siguiente diagrama diseñado en Vertabelo:
¿Qué sucede con las tablas vinculadas por una referencia?
Cuando creamos una referencia entre dos tablas, se agrega una nueva columna a una de las tablas. Esta columna recién agregada se denomina clave externa y actúa como un puntero a la otra tabla que permite conexiones entre tablas. Por ejemplo, eche un vistazo a los siguientes diagramas:
Fig. 1 Mesas reservation
y guest
antes y después de agregar una referencia
Continuar descubriendo; Ve por más
Un punto pendiente por modelar es el hecho de que las habitaciones pueden estar en uso por parte de algunos huéspedes por un período de tiempo. Para representar este hecho comercial, agregamos 2 tablas:hosted_at
y occupied_room
.
Tenga en cuenta que cada persona que se hospedó en el hotel tendrá un registro en hosted_at
. Este registro tendrá una referencia a la habitación que ocupó y al huésped. Por eso hosted_at
tiene una doble referencia hacia guest
y occupied_room
.
La mesa occupied_room
tendrá un registro por cada habitación que se alquile, en este registro podemos encontrar los campos:check_in
y check_out
de tipo timestamp indicando cuando comienza y termina el alquiler. Un tipo de datos de marca de tiempo almacena un punto en el tiempo con precisión arbitraria. Cada occupied_room
el registro también tendrá una referencia al número de habitación que se alquila e indirectamente a través de hosted_at
a los invitados que se quedaron en esta habitación.
También agregamos la tabla room_type
al modelo de datos; la idea es agrupar las habitaciones por categoría de habitación o tipo de habitación. Por ejemplo, "una cama doble estándar", "2 camas dobles de lujo" pueden ser descripciones de tipo. También tenemos un atributo max_capacity aquí.
Ejercicios: El diseño de bases de datos es una disciplina fácil de abordar, sin embargo, se necesita tiempo para convertirse en un experto en la materia. Si está dando sus primeros pasos en el diseño de bases de datos, intente completar el modelo de datos actual para permitir:
- Si dos o más huéspedes comparten una habitación, permita entradas y salidas diferentes para cada huésped.
- En algunos casos, los hoteles pueden cambiar la configuración de las habitaciones (por ejemplo, de una cama doble estándar a dos camas dobles de lujo). Agregue al modelo de datos los elementos para representar esos cambios de configuración, manteniendo el historial de cada habitación.