1+
12<p align =" center " >
23 <img src =" https://img.shields.io/badge/status-em%20desenvolvimento-yellow?style=for-the-badge " alt =" Status: em desenvolvimento " />
3- <img src =" https://img.shields.io/badge/stack-SQL -blue?style=for-the-badge " alt =" Stack: SQL " />
4- <img src =" https://img.shields.io/badge/domain-Imobiliaria -334155?style=for-the-badge " alt =" Domínio: Imobiliária " />
4+ <img src =" https://img.shields.io/badge/stack-MySQL -blue?style=for-the-badge " alt =" Stack: MySQL " />
5+ <img src =" https://img.shields.io/badge/domain-Imobili%C3%A1ria -334155?style=for-the-badge " alt =" Domínio: Imobiliária " />
56 <img src =" https://img.shields.io/badge/SaaS-modelagem-0ea5e9?style=for-the-badge " alt =" SaaS: modelagem " />
67</p >
78
89# 💼 Imobiliaria — Modelagem de Banco para SaaS
910
1011> ** Objetivo:** disponibilizar uma ** modelagem inicial** de banco de dados para um sistema ** SaaS de imobiliárias** . O foco é oferecer um ponto de partida limpo e didático para evoluir em ** normalização, multitenancy e governança de dados** .
1112
12- - 📂 Esquema principal: ` bd_imobiliaria .sql`
13- - 🧭 Status: ** inicial** ( em evolução; ajustes de * tenant * planejados )
13+ - 📂 Esquema principal: ` sql/01_schema .sql`
14+ - 🧭 Status: ** inicial** , em evolução (multitenancy em roadmap )
1415- 🧪 Ideal para: estudos, POCs e bases de TCC/portfólio
1516
1617---
1718
1819## 📑 Sumário
20+
1921- [ Visão Geral] ( #visao-geral )
22+ - [ Estrutura e Padrões] ( #estrutura-e-padroes )
2023- [ Como Executar] ( #como-executar )
21- - [ Estratégia de Multitenancy (Roadmap)] ( #estrategia-de-multitenancy-roadmap )
22- - [ Boas Práticas e Padrões] ( #boas-praticas-e-padroes )
2324- [ Consultas de Exemplo] ( #consultas-de-exemplo )
24- - [ Roadmap Técnico ] ( #roadmap-tecnico )
25+ - [ Roadmap (inclui Multitenancy) ] ( #roadmap-inclui-multitenancy )
2526- [ Contribuição] ( #contribuicao )
2627- [ Autor] ( #autor )
2728
3031## 🔎 Visão Geral
3132<a id =" visao-geral " ></a >
3233
33- Este repositório oferece um ** esquema SQL** para o domínio imobiliário (aluguel/venda, contratos, partes envolvidas, etc.).
34- A proposta é ser ** claro e extensível** , permitindo evoluir para cenários comuns de multi-empresas (* multi-tenant* ), auditoria e relatórios.
34+ Este repositório oferece um ** esquema SQL** para o domínio imobiliário (aluguel/venda, contratos, partes envolvidas, etc.), com foco em simplicidade e extensibilidade.
3535
36- Sugestões de entidades típicas do domínio (podem variar conforme sua evolução do schema):
36+ Entidades centrais do domínio (nomes podem variar conforme a evolução do schema):
3737
38- - ** imovel** , ** endereco** , ** proprietario** , ** locatario** , ** contrato** , ** pagamento** , ** manutencao**
39- - Entidades de apoio: ** usuario** , ** perfil** , ** permissao**
40- - Entidade de isolamento (futuro): ** tenant** (ex.: imobiliária/cliente)
38+ - ** profissoes** , ** tipo_endereco** , ** endereco** , ** contato** , ** pessoa**
39+ - ** Regiao** , ** Estado** , ** Municipio** , ** Bairro**
40+ - ** contrutora** , ** finalidade_busca** , ** tipo_imovel** , ** localizacao**
41+ - Tabelas de apoio/segurança: ** perm_system** , ** acesso_tipo** , ** acessos** , ** pessoa_has_identifica** , ** identifica**
42+ - (Futuro) ** tenant** para isolamento lógico multi-empresa
4143
42- > Para visualizar o modelo: importe o ` .sql ` em ferramentas como ** DBeaver** , ** pgAdmin ** , ** MySQL Workbench** ou gere um ERD via ** dbdiagram.io** .
44+ > Para visualizar o modelo, importe o ` .sql ` em ferramentas como ** DBeaver** , ** MySQL Workbench** ou gere um ERD via ** dbdiagram.io** . Diagramas estáticos podem ser adicionados em ` docs/erd ` .
4345
4446---
4547
46- ## ⚙️ Como Executar
47- <a id =" como-executar " ></a >
48-
49- > O arquivo ` bd_imobiliaria.sql ` contém a estrutura (DDL). Abaixo, exemplos rápidos para ** PostgreSQL** e ** MySQL/MariaDB** .
50- > Ajuste nomes/usuários/senhas conforme seu ambiente.
48+ ## 🧭 Estrutura e Padrões
49+ <a id =" estrutura-e-padroes " ></a >
5150
52- ### PostgreSQL (local)
53- ``` bash
54- # 1) Criar banco
55- createdb imobiliaria
51+ - ** Banco/SGBD:** MySQL 8+
52+ - ** Charset/Collation:** ` utf8mb4 ` / ` utf8mb4_unicode_ci `
53+ - ** Convenções**
54+ - Tabelas/colunas em ` snake_case `
55+ - ** PKs inteiras autoincrement** (` INT ` + ` AUTO_INCREMENT ` ), FKs obrigatórias
56+ - ** Campos de auditoria** (sugeridos): ` created_at ` , ` updated_at ` (ainda não implementados)
57+ - ** Soft delete** (opcional): ` deleted_at `
58+ - ** Índices** otimizados para joins e consultas frequentes (ver ` sql/indexes.sql ` )
59+ - ** Seeds** para popular dados mínimos (ver ` sql/seed.sql ` )
5660
57- # 2) Importar schema
58- psql -d imobiliaria -f bd_imobiliaria.sql
59- ```
61+ ---
6062
61- ### MySQL/MariaDB (local)
62- ``` bash
63- # 1) Criar banco
64- mysql -u root -p -e " CREATE DATABASE imobiliaria CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
63+ ## ⚙️ Como Executar
64+ <a id =" como-executar " ></a >
6565
66- # 2) Importar schema
67- mysql -u root -p imobiliaria < bd_imobiliaria.sql
68- ```
66+ > Os arquivos ficam no diretório ` sql/ ` :
67+ > - ` sql/01_schema.sql ` — DDL
68+ > - ` 02_seed_minimo.sql ` — dados iniciais
69+ > - ` 03_indexes.sql ` — índices adicionais
6970
70- ### Docker (Postgres) — opcional
71+ ### Opção A — Docker Compose (recomendado)
7172``` bash
72- docker run -d --name pg-imob -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=imobiliaria -p 5432:5432 postgres:16
73- # Quando o container estiver pronto:
74- docker cp bd_imobiliaria.sql pg-imob:/bd_imobiliaria.sql
75- docker exec -it pg-imob psql -U postgres -d imobiliaria -f /bd_imobiliaria.sql
76- ```
73+ # 1) Subir serviços
74+ docker compose up -d
7775
78- > * Seeds (opcional):* crie um ` scripts/seed_exemplo.sql ` com ** inserts** fictícios para testes e execute após a importação do schema.
76+ # 2) (Opcional) Acompanhar logs
77+ docker compose logs -f mysql
7978
80- ---
79+ # 3) Importar schema + seeds + índices
80+ docker exec -i mysql \
81+ sh -c ' mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -h127.0.0.1' < sql/01_schema.sql.sql
8182
82- ## 🏷️ Estratégia de Multitenancy (Roadmap)
83- < a id = " estrategia-de-multitenancy-roadmap " ></ a >
83+ docker exec -i mysql \
84+ sh -c ' mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -h127.0.0.1 01_schema.sql ' < sql/02_seed_minimo.sql
8485
85- A evolução natural é suportar ** múltiplas imobiliárias/empresas** no mesmo banco (** isolamento lógico** ):
86+ docker exec -i mysql \
87+ sh -c ' mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -h127.0.0.1 01_schema.sql' < sql/03_indexes.sql
88+ ```
8689
87- - Adicionar ** ` tenant_id ` ** nas tabelas de domínio.
88- - Garantir ** chaves estrangeiras** com ` tenant_id ` acoplado (ex.: ` (id, tenant_id) ` como PK composta, ou ` tenant_id ` + PK simples).
89- - Criar ** índices** por ` tenant_id ` e aplicar ** políticas de acesso** (ex.: RLS no PostgreSQL) para cada usuário/empresa ver apenas seus dados.
90- - Alternativas: ** schema por tenant** (isolamento por schema) ou ** database por tenant** (isolamento máximo) — com custos/benefícios distintos.
90+ > O workflow de CI usa ` 127.0.0.1 ` para conexão MySQL (compatibilidade com GitHub Actions).
9191
92- ---
92+ ### Opção B — MySQL local
93+ ``` bash
94+ # 1) Criar banco com charset/collation recomendados
95+ mysql -u root -p -e " CREATE DATABASE 01_schema.sql CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
9396
94- ## 🧭 Boas Práticas e Padrões
95- <a id =" boas-praticas-e-padroes " ></a >
97+ # 2) Importar schema, seed e índices
98+ mysql -u root -p bd_imobiliaria < sql/01_schema.sql.sql
99+ mysql -u root -p bd_imobiliaria < sql/02_seed_minimo.sql
100+ mysql -u root -p bd_imobiliaria < sql/03_indexes.sql
101+ ```
96102
97- - ** Nomes descritivos** para tabelas/colunas (snake_case).
98- - ** Chaves primárias** inteiras (` BIGSERIAL ` /` AUTO_INCREMENT ` ) ou UUIDs conforme necessidade.
99- - ** Integridade referencial** (FKs obrigatórias).
100- - ** Campos de auditoria** : ` created_at ` , ` updated_at ` , ` created_by ` , ` updated_by ` .
101- - ** Soft delete** (opcional): ` deleted_at ` para preservar histórico.
102- - ** Índices** para consultas frequentes (por ` tenant_id ` , ` status ` , ` created_at ` ).
103- - ** Views** para relatórios (ex.: ` vw_contratos_ativos ` , ` vw_inadimplencia ` ).
104- - ** Segurança/PII:** dados pessoais (CPF, e-mail, telefone) devem seguir boas práticas de privacidade e LGPD.
103+ ### Verificação rápida
104+ ``` sql
105+ -- Tabelas essenciais com ao menos 1 linha?
106+ SELECT ' Regiao' AS tabela, COUNT (* ) AS qtd FROM Regiao
107+ UNION ALL SELECT ' Estado' , COUNT (* ) FROM Estado
108+ UNION ALL SELECT ' Municipio' , COUNT (* ) FROM Municipio
109+ UNION ALL SELECT ' tipo_endereco' , COUNT (* ) FROM tipo_endereco
110+ UNION ALL SELECT ' endereco' , COUNT (* ) FROM endereco
111+ UNION ALL SELECT ' profissoes' , COUNT (* ) FROM profissoes
112+ UNION ALL SELECT ' contato' , COUNT (* ) FROM contato
113+ UNION ALL SELECT ' pessoa' , COUNT (* ) FROM pessoa
114+ UNION ALL SELECT ' construtora' , COUNT (* ) FROM contrutora
115+ UNION ALL SELECT ' finalidade_busca' , COUNT (* ) FROM finalidade_busca
116+ UNION ALL SELECT ' tipo_imovel' , COUNT (* ) FROM tipo_imovel
117+ UNION ALL SELECT ' localizacao' , COUNT (* ) FROM localizacao;
118+ ```
105119
106120---
107121
108122## 🔍 Consultas de Exemplo
109123<a id =" consultas-de-exemplo " ></a >
110124
111- > Ajuste nomes de tabelas/ colunas conforme seu schema .
125+ > Ajuste nomes de colunas conforme seu client/visões .
112126
113- ### Contratos ativos por período
127+ ** Contratos ativos por período (exemplo conceitual) **
114128``` sql
115129SELECT c .id , c .data_inicio , c .data_fim , l .nome AS locatario, i .codigo AS imovel
116130FROM contrato c
@@ -120,7 +134,7 @@ WHERE c.data_inicio <= CURRENT_DATE
120134 AND (c .data_fim IS NULL OR c .data_fim >= CURRENT_DATE );
121135```
122136
123- ### Inadimplência (pagamentos em atraso)
137+ ** Inadimplência (pagamentos em atraso) — conceitual **
124138``` sql
125139SELECT p .id , p .vencimento , p .valor , l .nome AS locatario
126140FROM pagamento p
@@ -130,7 +144,7 @@ WHERE p.status = 'EM_ABERTO'
130144 AND p .vencimento < CURRENT_DATE ;
131145```
132146
133- ### Vacância de imóveis (sem contrato ativo)
147+ ** Vacância de imóveis (sem contrato ativo) — conceitual **
134148``` sql
135149SELECT i .id , i .codigo , i .tipo , i .cidade
136150FROM imovel i
@@ -143,25 +157,25 @@ WHERE c.id IS NULL;
143157
144158---
145159
146- ## 🗺️ Roadmap Técnico
147- <a id =" roadmap-tecnico " ></a >
160+ ## 🗺️ Roadmap (inclui Multitenancy)
161+ <a id =" roadmap-inclui-multitenancy " ></a >
148162
149163- ** v0.2**
150164 - Documentar entidades principais no README (tabelas e relações).
151- - Adicionar ** seeds** básicos (` scripts/seed_exemplo .sql` ).
152- - Criar ** diagramas ER** (PNG/SVG) em ` / docs/erd` .
165+ - Adicionar ** seeds** básicos (` sql/02_seed_minimo .sql` ).
166+ - Criar ** diagramas ER** (PNG/SVG) em ` docs/erd ` .
153167
154168- ** v0.3**
155- - Introduzir ** ` tenant_id ` ** e índices por tenant.
169+ - Introduzir ** tenant_id** e índices por tenant (em tabelas de domínio) .
156170 - Adicionar ** views** de relatórios: contratos ativos, inadimplência, vacância.
157171 - Configurar ** GitHub Actions** para validar o schema (spin-up de DB + import DDL).
158172
159173- ** v0.4**
160- - Criar ** políticas de acesso** (RLS no Postgres) ou equivalente .
174+ - Criar ** políticas de acesso** (RLS equivalente no MySQL via views + filtros por usuário) .
161175 - ** Migrations** com ** Flyway** ou ** Liquibase** .
162176 - Publicar ** Release v1.0** quando o modelo estabilizar.
163177
164- > ** Topics sugeridos (GitHub):** ` sql ` , ` database ` , ` er-diagram ` , ` saas ` , ` real-estate ` , ` multitenancy ` (e o SGBD preferido: ` postgresql ` ou ` mysql ` ) .
178+ > ** Topics sugeridos (GitHub):** ` sql ` , ` database ` , ` er-diagram ` , ` saas ` , ` real-estate ` , ` multitenancy ` , ` mysql ` .
165179
166180---
167181
@@ -174,7 +188,7 @@ WHERE c.id IS NULL;
1741884 . Push: ` git push origin feat/minha-melhoria `
1751895 . Abra um ** Pull Request** com contexto e screenshots (se houver).
176190
177- > Sugestões bem-vindas: diagramas ER, seeds, views, índices, RLS , migrações.
191+ > Sugestões bem-vindas: diagramas ER, seeds, views, índices, políticas de acesso , migrações.
178192
179193---
180194
0 commit comments