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

Um modelo de dados de agência imobiliária


Além da localização, o que é preciso para administrar um negócio imobiliário de sucesso? Examinamos um modelo de dados para ajudar as agências imobiliárias a se manterem organizadas.

Comprar, vender e alugar apartamentos ou casas é um grande negócio hoje em dia. A maioria das pessoas fica feliz em pagar uma taxa e deixar uma agência imobiliária profissional fazer o trabalho por elas. Por outro lado, a empresa poderia atuar em nome próprio, comprando imóveis para revender ou alugar. Uma empresa imobiliária também pode arrendar um imóvel e depois alugá-lo ou sublocá-lo e lucrar com a diferença.

Obviamente, manter o controle das propriedades é uma parte importante da administração de um negócio imobiliário. Ao mesmo tempo, as datas são igualmente importantes. (por exemplo, quando um apartamento alugado estará disponível? Quando um imóvel entrará no mercado?) Neste artigo, veremos um modelo de dados que pode ajudar as empresas imobiliárias a se manterem organizadas.

Perguntas frequentes sobre imóveis


Antes de começarmos a descrever o modelo e seus dados esperados, responderemos primeiro a algumas perguntas específicas de um negócio imobiliário. O setor imobiliário tem muitos termos e uma explicação completa de seu jargão e princípios vão muito além do escopo deste artigo, por isso responderemos apenas às perguntas mais comuns e básicas aqui.

  1. O que pode ser considerado uma propriedade ou propriedade?

    Quando pensamos em imóveis, a primeira imagem que temos é muitas vezes de uma casa ou outra habitação. O mercado imobiliário é muito mais do que isso. Edifícios, escritórios, terrenos, recursos minerais e corpos também se enquadram nesta categoria. Para os propósitos deste artigo, tratarei tudo o que é “imóvel” como imóveis. Dito isso, vamos nos concentrar principalmente em prédios de apartamentos e casas.

  2. Onde está localizada a propriedade ou propriedade?

    Para casas, prédios e apartamentos, isso é muito simples. Saberemos o endereço exato onde a propriedade está localizada. O terreno não tem endereço, mas a sua posição é definida por um registo predial.

  3. Quais dados precisamos armazenar?

    Em nosso modelo, precisamos armazenar todas as propriedades (ou seja, imóveis) e clientes com quem trabalhamos. Precisamos dessas informações para criar relatórios e também para melhorar nossos negócios.

    Podemos esperar que nos comuniquemos frequentemente com os clientes, por isso devemos armazenar todos os seus detalhes de contato. Também queremos saber qual funcionário entrou em contato com o cliente e qual interesse o cliente expressou durante a conversa.

    Para propriedades, precisamos de seus detalhes e status atual ao nosso alcance para que possamos responder rapidamente às perguntas de clientes em potencial.

    Também armazenaremos nosso histórico de contatos e quaisquer contratos relacionados a clientes ou propriedades.

  4. Qual ​​a importância das datas?

    As datas são sempre cruciais, mas quero enfatizar que elas são especialmente importantes no setor imobiliário. Precisamos saber a quantidade exata de tempo que uma de nossas propriedades alugadas está ocupada para que possamos alugá-la novamente assim que estiver disponível. Não pode haver sobreposição quando dois clientes alugam o mesmo imóvel. Se um cliente em potencial expressar o desejo de alugar em alguma data futura específica, devemos armazenar essa informação e receber um lembrete quando essa data estiver se aproximando.

  5. Como deve ser nosso aplicativo?

    Para isso, uma aplicação web é a melhor solução. Grande parte do trabalho imobiliário é baseado em escritórios, mas os agentes de vendas devem ser capazes de inserir novos dados onde quer que estejam. A funcionalidade mais importante em nosso aplicativo é uma pesquisa rápida que pode encontrar clientes, propriedades e status de propriedades.

O modelo de dados





Nosso modelo de dados imobiliários consiste em três áreas principais:
  • Estates and locations
  • Clients and contacts
  • Contracts and transactions

Há uma tabela, employee , que está fora de qualquer área de assunto.

Observe que o employee e a estate tabelas em Clients and contacts área de assunto e o client tabela em Contracts and transactions área de assunto são apenas cópias usadas para simplificar o modelo.

Vamos dar uma olhada no employee tabela primeiro, continue com Estates and locations , vá para Clients and contacts e finalize com Contracts and transactions .

A Tabela de Funcionários



Começaremos com o employee tabela. É simples:ele armazena apenas o first_name e last_name de cada funcionário. Poderíamos adicionar outros detalhes como o número de identificação fiscal do funcionário, sua data de nascimento, endereço, cargo, etc. No entanto, neste modelo não estaremos focando nos funcionários, então tudo o que precisamos é uma maneira de associar funcionários a ações (como ser atribuído a uma tarefa ou contrato). Essa tabela também nos permitirá registrar qual funcionário participou de cada contato com o cliente.

Seção 1:Propriedades e Locais



As Estates and location A área de assunto contém seis tabelas que descrevem todas as propriedades (propriedades) com as quais trabalhamos, suas localizações e seu status atual.

A tabela central nesta área de assunto é a estate tabela. Ele contém uma lista de todas as propriedades com as quais estamos, trabalhamos ou trabalharemos. Isso inclui propriedades para as quais mediamos entre dois clientes, aqueles que possuímos, aqueles que vendemos ou alugamos para clientes e aqueles que alugamos ou compramos de clientes. Ele também mantém um registro das propriedades com as quais planejamos (ou planejamos) fazer negócios.

Como estamos focando principalmente em apartamentos e casas neste artigo, os atributos nesta tabela estão principalmente relacionados a eles. Se quisermos descrever outros tipos de propriedade real, podemos adicionar atributos descritivos anuláveis ​​adicionais. Também podemos simplesmente inserir esses valores no estate_description atributo. Os atributos na estate tabela são:

  • estate_name – O nome da propriedade. Pode ser nosso nome interno para uma propriedade ("Stoker house") ou um nome público bem conhecido ("Bran Castle").
  • city_id – O ID da cidade onde a propriedade está localizada.
  • estate_type_id – Refere-se ao estate_type dicionário.
  • floor_space e balconies_space – O tamanho (em metros quadrados) dos pisos e varandas dos apartamentos.
  • number_of_balconies , number_of_bedrooms , number_of_garages e number_of_parking_spaces – Valores inteiros para cada categoria. Autoexplicativo.
  • pets_allowed – Um valor booleano indicando se animais de estimação são permitidos. Isso é usado principalmente para propriedades de aluguel.
  • estate_description – Uma descrição detalhada de uma propriedade. É aqui que armazenamos qualquer informação adicional, por ex. histórico da propriedade.
  • estate_status_id – Se uma propriedade está atualmente disponível ou não. Usaremos este campo em nossa função de pesquisa.

Já mencionamos dois dicionários que o estate tabela se refere a, estate_type e estate_status . Ambos os dicionários contêm apenas um ID e um atributo de nome UNIQUE.

No estate_type dicionário, armazenaremos valores como "apartamento", "casa", "campo" etc. O estate_status tabela terá valores informando se o imóvel está disponível no momento ou não, como “propriedade alugada”, “propriedade comprada”, “propriedade vendida”, “propriedade alugada”.

Definiremos a localização de cada propriedade, não apenas pela descrição (a estate . estate_description atributo), mas também pelo seu país e cidade. Para isso, usaremos duas tabelas de dicionário:country e city . Cada país é definido exclusivamente por um country_name , que será o único atributo (diferente de ID) armazenado na tabela. Por outro lado, cada cidade tem um nome e um país. Algumas cidades podem ter o mesmo nome, mas vamos supor que o nome de cada cidade é exclusivo de seu país – apenas uma Viena, Áustria ou Genebra, Suíça. No entanto, se quisermos proteger contra duplicatas, podemos adicionar um atributo region. Por enquanto, porém, vamos deixar tudo como está. O city_namecountry_id par é a chave ÚNICA da city tabela.

A última tabela nesta área de assunto é a in_charge tabela. Podemos esperar que cada propriedade tenha pelo menos um funcionário designado para lidar com assuntos relacionados a ela. Esse funcionário é responsável por coisas como se comunicar com os clientes, mostrar a propriedade a clientes em potencial e outras tarefas administrativas e legais. No in_charge tabela, teremos:
  • estate_id e employee_id – Chaves estrangeiras que se referem ao espólio e cliente relacionados, respectivamente.
  • date_from e date_to – O intervalo em que o funcionário foi atribuído a essa propriedade. Observe que “date_to” pode ser NULL porque um funcionário pode cuidar de uma propriedade indefinidamente. Quando atribuímos um funcionário a uma propriedade, devemos nos certificar de que ele já não esteja atribuído a outra propriedade, verificando os intervalos de datas sobrepostos. Por outro lado, podemos atribuir muitos funcionários à mesma propriedade ao mesmo tempo. Isso seria desejável quando os funcionários têm funções diferentes, por exemplo, um funcionário cuida da comunicação com o cliente, outro funcionário mostra essa propriedade, outro lida com vendas e contratos legais etc.

Seção 2:clientes e contatos



O Client and contacts área de assunto consiste em apenas duas tabelas, o client tabela e o contact tabela. As duas outras tabelas mostradas nesta área, employee:Clients and contacts e estate:Clients and contacts são apenas cópias.

O client A tabela contém registros de todos os clientes com quem já trabalhamos, incluindo clientes atuais e potenciais. Quem é um cliente em potencial? Pode ser alguém que disse que quer vender, comprar ou alugar alguma propriedade nossa no futuro. Precisamos armazenar os detalhes de contato e propriedades desses clientes para uso futuro. Os atributos no client tabela são:

  • client_name – Para um indivíduo, este campo contém seu nome e sobrenome. Se o cliente for uma pessoa jurídica, ele possui o nome da empresa ou entidade.
  • client_address – Uma descrição de texto da localização do cliente.
  • contact_person – Nome e sobrenome (e provavelmente um cargo, se o cliente for uma empresa) de nossa pessoa de contato.
  • phone , mobile e mail – Os detalhes de contato do cliente.
  • client_details – Todos os outros detalhes relacionados a esse cliente. Eles são armazenados em um formato de texto não estruturado.

Os últimos cinco atributos nesta tabela são anuláveis ​​porque não são cruciais. Provavelmente precisaremos armazenar informações de pelo menos uma pessoa de contato, mas podemos não saber com antecedência quem será nosso contato.

A segunda e última tabela nesta área de assunto é o contact tabela. Aqui armazenaremos dados sobre todas as interações que tivemos com os clientes. Usaremos essas informações para otimizar nossos negócios futuros – por exemplo, se um cliente nos pediu para alugar um determinado imóvel quando estiver disponível, devemos armazenar esse pedido e informá-lo quando o imóvel estiver pronto. Os atributos na tabela são:
  • client_id – O ID do cliente envolvido.
  • employee_id – O ID do funcionário envolvido nessa instância de contato. Isso pode ser NULL porque um cliente não pode entrar em contato com nenhum funcionário individual - por exemplo, talvez o cliente tenha enviado um email para a conta da empresa. Ainda assim, na maioria dos casos, podemos esperar saber qual funcionário lidou com uma interação.
  • estate_id – O ID do espólio relacionado. Isso é útil quando o cliente solicita um determinado imóvel ou deseja vender ou arrendar algo que já temos em nosso sistema.
  • contact_time – A hora em que o contato ocorreu.
  • contact_details – Quaisquer notas não estruturadas que queremos salvar sobre esse contato. Podemos escrever algo como “O cliente expressou desejo de comprar uma casa bairro.”

Seção 3:Contratos e Transações



A última área de assunto em nosso modelo é Contracts and transactions . Vamos usá-lo para relacionar propriedades com clientes.

A tabela central desta seção é o contract tabela. É onde armazenamos todos os detalhes do contrato e relacionamos contratos com clientes e funcionários. Os atributos nesta tabela são:

  • client_id – O ID do cliente que assinou o contrato relacionado.
  • employee_id – O ID do funcionário que assinou o contrato em nome da nossa empresa.
  • contract_type_id – Refere-se ao contract_type dicionário e indica se o contrato está relacionado à compra, venda, arrendamento ou aluguel de propriedade.
  • contract_details – Uma descrição detalhada do contato, armazenada em formato de texto.
  • payment_frequency_id – Refere-se à payment_frequency dicionário e define os intervalos em que as faturas devem ser enviadas.
  • number_of_invoices – O número de faturas que devem ser geradas. Se a empresa pagar apenas uma vez, um valor de “1” é armazenado neste atributo e todo o payment_amount será igual ao invoice_amount .
  • payment_amount – O valor total pago.
  • fee_percentage – A porcentagem que cobramos do cliente. Por exemplo, podemos cobrar 5% do preço de venda de uma casa como taxa. O valor nesta coluna deve ser o mesmo que o contract_type .fee_percentage atributo para este contrato. A fee_percentage atributo será usado para calcular o fee_amount quando inserimos um valor no payment_amount atributo.
  • fee_amount – O valor total da taxa que cobraremos do cliente por este contrato.
  • date_signed – A data em que o contrato foi assinado.
  • start_date – A data em que o contrato se torna válido (por exemplo, para um contrato de aluguel ou arrendamento).
  • end_date – A data em que o contrato expira. Pode ser NULL caso assinemos um contrato sem data de término. No entanto, na maioria dos casos, saberemos a end_date com antecedência.
  • transaction_id –Referencia a transaction tabela se o contrato for parte de uma transação entre dois clientes. Ele pode conter valores NULL porque não haverá um registro de transação relacionado se o contrato for diretamente entre nós e um cliente.

O under_contract tabela relaciona contratos e propriedades. Ao lado do atributo de chave primária id , contém apenas duas chaves estrangeiras, estate_id e contract_id . Este par de chaves estrangeiras também forma a chave ÚNICA da tabela.

Armazenaremos registros de todas as faturas geradas na invoice tabela. Se o cliente fizer um único pagamento para todo o contrato, haverá apenas um registro nesta tabela para esse contrato. O mesmo se aplica se fizermos um único pagamento a um cliente. Caso o cliente (ou nossa empresa) opte pelo parcelamento, há o mesmo número de registros que o valor no contract .number_of_invoices campo. Os atributos nesta tabela são:
  • contract_id – O ID do contrato relacionado.
  • invoice_number – Um identificador interno exclusivo para a fatura.
  • issued_by – Uma descrição de texto do emissor da fatura. Quando emitimos uma fatura, armazenamos os detalhes da nossa empresa aqui. Se o cliente emitir, seus detalhes serão armazenados aqui.
  • issued_to – O oposto de issued_by . Se cobrarmos do cliente, esse atributo conterá seus detalhes; se o cliente nos cobrar, nossos dados serão armazenados aqui.
  • invoice_details – Todos os detalhes do item da fatura.
  • invoice_amount – O valor devido nesta fatura.
  • date_created – A data real em que a fatura foi criada em nosso sistema.
  • billing_date – A data em que a fatura deve ser paga.
  • date_paid – A data real em que a fatura foi paga. Pode ser NULL até que a fatura seja paga.

Usaremos mais dois dicionários para descrever os contratos, contract_type e payment_frequency . O contract_type_name campo é usado para denotar a ação que estamos realizando no contrato:“mediação (compra)”, “mediação (venda)”, “mediação (aluguel)”, “mediação (locação)”, “compra (de um cliente) ”, “vender (para um cliente)”, ”arrendar (de um cliente)” e “alugar (para um cliente)”. O payment_frequency_name O atributo simplesmente descreve com que frequência as faturas serão geradas, por nós ou pelo cliente. Ele pode armazenar valores como “uma vez”, “uma vez por mês”, “uma vez a cada 2 meses” e “uma vez por ano”.

Se a nossa empresa comprar ou arrendar algum imóvel, pagaremos ao cliente. Isso significa que seremos os únicos na invoice .issued_to campo e teremos que pagar faturas. Se vendermos ou alugarmos um imóvel, o cliente nos pagará e seremos nós na invoice .issued_by campo.

Se mediarmos um acordo entre dois clientes, cobraremos uma taxa pelos nossos serviços. Neste caso, vamos assinar dois contratos separados, um com o cliente vendedor/aluguer e outro com o cliente comprador/locatário. Relacionaremos esses dois contratos atribuindo o mesmo transaction_id para ambos. A transaction A tabela é usada para armazenar registros de negócios que mediamos. Os atributos nesta tabela são:
  • transaction_id – Um ID exclusivo para cada transação.
  • transaction_type_id – Refere-se ao transaction_type dicionário.
  • client_offered – Faz referência ao client tabela e indica quem está vendendo ou alugando uma propriedade.
  • client_requested – Faz referência ao client tabela e indica quem está comprando ou alugando uma propriedade.
  • transaction_date – A data em que a transação realmente acontecerá.
  • transaction_details – Todos os detalhes relacionados a essa transação, armazenados em um formato de texto não estruturado.

A tabela final em nosso modelo é o transaction_type dicionário. Os valores armazenados nesta tabela são atribuídos a cada transação de acordo com o que é:“compra/venda” ou “aluguel/arrendamento”.

Administrar uma empresa imobiliária é muito complicado, exigente e até arriscado. Para que tudo funcione bem, é preciso muita organização. Espero que este modelo de dados tenha ajudado você a perceber a complexidade desse campo.

Como sempre, há muitas maneiras de melhorar este modelo. Sinta-se à vontade para compartilhar suas sugestões e comentários.