Database
 sql >> Base de Dados >  >> RDS >> Database

Projetando um modelo de dados para um sistema de reserva de quartos de hotel




É do conhecimento geral que a melhor maneira de aprender algo é praticá-lo em um cenário da vida real. Obviamente, o mesmo se aplica à modelagem de banco de dados. Portanto, neste artigo eu decidi ensiná-lo a criar uma estrutura de banco de dados simples, tomando como exemplo um livro didático de um sistema de reserva de quarto de hotel. Mostrarei como começar e darei algumas ideias para estender o modelo.

Modelagem de banco de dados:descobrir, descobrir, descobrir


Neste artigo, projetaremos um modelo de dados para um sistema de reserva de quartos de hotel. Procuramos um modelo de dados onde possamos representar informação sobre os quartos, os hóspedes e as reservas feitas no nosso imaginário VERTABELO***** Hotel. Todas essas informações serão armazenadas em tabelas.

A modelagem de banco de dados é um processo de descoberta cíclico. Primeiro identificamos as tabelas principais e seus atributos. Em nosso modelo, as tabelas principais são:room , guest e reservation . Então continuamos refinando nossas tabelas descobrindo seus atributos ou colunas. Por exemplo, a room tabela tem atributos como:quarto number , name e smoke bandeira entre outros.

Reservation tabela tem atributos date_in , date_out , status (cancelado, confirmado) e made_by (online, presencial, telefone, correio), enquanto os atributos da tabela guest são:first_name , last_name e member_since . Talvez você sinta que a reservation a mesa precisa de mais atributos (como tipo de quarto, número de camas), abordaremos esse ponto mais tarde, até lá, considere nossa reservation tabela incompleta. O modelo de dados a seguir criado no Vertabelo mostra as principais tabelas.



Tipos de dados:quais são os domínios de valores permitidos para uma coluna?


Observe que cada coluna tem um tipo de dados (varchar, integer, date, boolean) para indicar que tipo de valores podem ser atribuídos à coluna. Por exemplo, a coluna smoke na mesa room é booleano tipo de dados, significando que apenas true ou false são os valores permitidos.

Chaves primárias:o número de CPF de cada registro


Cada tabela deve ter uma coluna (ou mais de uma) atuando como um identificador para cada registro na tabela. Essa coluna é chamada de chave primária (PK), e as práticas recomendadas de design de banco de dados sugerem que cada tabela deve ter uma PK.

Se dermos uma olhada no modelo de dados Vertabelo anterior, veremos que cada tabela tem uma coluna chamada id com um indicador PK à direita. Estas colunas de id formam o PK (por convenção, nomeamos id a coluna PK).

Um conceito importante, talvez óbvio para muitos leitores, é que uma coluna PK não pode ter valores duplicados. Em outras palavras, cada coluna PK possui uma restrição única, e qualquer tentativa de criar um novo registro com valor duplicado será rejeitada com erro pelo gerenciador do banco de dados.


Continue descobrindo; Encontre novos objetos de banco de dados


Uma reserva é um dos elementos mais complexos para representar neste modelo de dados. Uma reserva pode ter vários quartos associados (por exemplo “Desejo fazer uma reserva para um quarto duplo e um quarto separado com 3 camas para os meus filhos”). Esse requisito de negócios adiciona 4 coisas ao nosso modelo:

Uma nova tabela: Precisamos criar uma nova tabela chamada room_reserved , onde armazenamos todos os quartos pertencentes a uma reserva.

Adicione duas referências: Uma referência é um elemento muito importante em um modelo de dados. Uma referência descreve como uma tabela está relacionada a outra tabela. Em nosso modelo, cada quarto reservado pertence a uma reserva, então usaremos uma referência para modelar esse fato. Essa referência é representada graficamente como uma linha conectando ambas as tabelas.

Além disso, como cada reserva pertence a um hóspede, precisamos criar uma nova referência vinculando o guest e a reservation mesas.

Mover uma coluna: Como podemos ter vários quartos pertencentes a uma reserva, devemos permitir o cancelamento por quarto individual, depois disso movemos o attribute status da reservation para reserved_room tabela.

O modelo de dados atualizado é mostrado no diagrama a seguir desenhado em Vertabelo:


O que acontece com as tabelas vinculadas por uma referência?


Quando criamos uma referência entre duas tabelas, uma nova coluna é adicionada a uma das tabelas. Essa coluna recém-adicionada é chamada de Chave Estrangeira e atua como um ponteiro para a outra tabela, permitindo conexões entre as tabelas. Por exemplo, dê uma olhada nos seguintes diagramas:

Fig. 1 reservation e guest antes e depois de adicionar uma referência

Continue descobrindo; Vá para mais


Um ponto pendente a ser modelado é o fato de que os quartos podem estar em uso por alguns hóspedes por um período de tempo. Para representar esse fato comercial, adicionamos 2 tabelas:hosted_at e occupied_room .

Observe que todas as pessoas que se hospedaram no hotel terão um registro em hosted_at . Este registo terá uma referência ao quarto que ocupou e ao hóspede. É por isso que hosted_at tem uma referência dupla para guest e occupied_room .

A tabela occupied_room terá um registro por cada quarto alugado, neste registro podemos encontrar os campos:check_in e check_out do tipo timestamp indicando quando o aluguel começa e termina. Um tipo de dados timestamp armazena um ponto no tempo com precisão arbitrária. Cada occupied_room registro também terá uma referência ao número do quarto que está sendo alugado e indiretamente via hosted_at para os hóspedes que ficaram neste quarto.

Também adicionamos a tabela room_type ao modelo de dados; a ideia é agrupar os quartos por categoria ou tipo de quarto. Por exemplo, “padrão uma cama de casal”, “luxo 2 camas de casal” podem ser descrições de tipo. Também temos um atributo max_capacity aqui.




Exercícios: O design de banco de dados é uma disciplina fácil de abordar, no entanto, leva tempo para se tornar um especialista no assunto. Se você estiver dando os primeiros passos no design do banco de dados, tente concluir o modelo de dados atual para permitir:
  • Se dois ou mais hóspedes compartilharem um quarto, permita check-in e check-out diferentes para cada hóspede.
  • Em alguns casos, os hotéis podem alterar a configuração dos quartos (por exemplo, de uma cama de casal padrão para duas camas de casal de luxo). Adicione ao modelo de dados os elementos para representar essas mudanças de configuração, mantendo o histórico de cada sala.