Skip to content

Commit c8a82b5

Browse files
authored
Update README.md
1 parent 8b5fbc1 commit c8a82b5

File tree

1 file changed

+85
-71
lines changed

1 file changed

+85
-71
lines changed

README.md

Lines changed: 85 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
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

@@ -30,87 +31,100 @@
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 ADocker 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
115129
SELECT c.id, c.data_inicio, c.data_fim, l.nome AS locatario, i.codigo AS imovel
116130
FROM 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
125139
SELECT p.id, p.vencimento, p.valor, l.nome AS locatario
126140
FROM 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
135149
SELECT i.id, i.codigo, i.tipo, i.cidade
136150
FROM 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;
174188
4. Push: `git push origin feat/minha-melhoria`
175189
5. 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

Comments
 (0)