# 🏗️ Estrutura de Bancos - Multi-Tenancy

## 📊 Como Funciona

### ❌ **NÃO é assim:**
```
Banco Único
├── franchises (tabela)
├── users_master (tabela)
├── receivables (dados da franquia 1)
├── receivables (dados da franquia 2) ❌ MISTURADO!
└── receivables (dados da franquia 3) ❌ MISTURADO!
```

### ✅ **É assim (CORRETO):**

```
Banco Atual (ou trainees_master)
├── franchises (tabela de CONTROLE - lista as franquias)
└── users_master (tabela de CONTROLE - lista os usuários)

Banco Separado: trainees_franquia_001
├── users (usuários da franquia 001)
├── receivables (dados da franquia 001)
├── payables (dados da franquia 001)
└── ... (TODOS os dados da franquia 001)

Banco Separado: trainees_franquia_002
├── users (usuários da franquia 002)
├── receivables (dados da franquia 002)
├── payables (dados da franquia 002)
└── ... (TODOS os dados da franquia 002)

Banco Separado: trainees_franquia_003
├── users (usuários da franquia 003)
├── receivables (dados da franquia 003)
└── ... (TODOS os dados da franquia 003)
```

---

## 🔑 Pontos Importantes

### 1. **Tabelas Master = Apenas Controle**

As tabelas `franchises` e `users_master` são apenas para:
- **Saber quais franquias existem**
- **Saber qual banco cada franquia usa**
- **Fazer login único funcionar**

**Elas NÃO contêm dados das franquias!**

### 2. **Cada Franquia = Banco Separado**

Cada franquia tem seu **próprio banco de dados completo**:
- Todas as tabelas (receivables, payables, suppliers, etc.)
- Todos os dados isolados
- Totalmente independente

### 3. **Isolamento Total**

- ✅ Franquia 001 não vê dados da Franquia 002
- ✅ Franquia 002 não vê dados da Franquia 001
- ✅ Cada uma tem seu próprio banco
- ✅ Dados completamente separados

---

## 📋 Exemplo Prático

### Cenário: 3 Franquias

```
Banco: seu_banco_atual (ou trainees_master)
├── franchises
│   ├── id: 1, code: '001', database_name: 'trainees_franquia_001'
│   ├── id: 2, code: '002', database_name: 'trainees_franquia_002'
│   └── id: 3, code: '003', database_name: 'trainees_franquia_003'
└── users_master
    ├── username: 'joao', franchise_id: 1 (→ banco trainees_franquia_001)
    ├── username: 'maria', franchise_id: 2 (→ banco trainees_franquia_002)
    └── username: 'pedro', franchise_id: 3 (→ banco trainees_franquia_003)

Banco: trainees_franquia_001
├── users (joão está aqui)
├── receivables (dados financeiros da franquia 001)
└── ... (todos os dados da franquia 001)

Banco: trainees_franquia_002
├── users (maria está aqui)
├── receivables (dados financeiros da franquia 002)
└── ... (todos os dados da franquia 002)

Banco: trainees_franquia_003
├── users (pedro está aqui)
├── receivables (dados financeiros da franquia 003)
└── ... (todos os dados da franquia 003)
```

---

## 🔄 Como Funciona na Prática

### 1. Usuário faz login:
```
Usuário: joao
Senha: 123456
```

### 2. Sistema busca na tabela `users_master`:
```sql
SELECT * FROM users_master WHERE username = 'joao'
```
**Resultado:** `franchise_id = 1`, `database_name = 'trainees_franquia_001'`

### 3. Sistema configura banco:
```php
Database::setDatabase('trainees_franquia_001');
```

### 4. Todas as queries seguintes usam:
- Banco: `trainees_franquia_001`
- Apenas dados da franquia 001
- Isolado de outras franquias

---

## ✅ Resumo

| Item | Onde Fica |
|------|-----------|
| **Tabelas de controle** | Banco atual (ou trainees_master) |
| **Dados da Franquia 001** | Banco `trainees_franquia_001` |
| **Dados da Franquia 002** | Banco `trainees_franquia_002` |
| **Dados da Franquia 003** | Banco `trainees_franquia_003` |

**Cada franquia = Banco separado = Dados isolados** ✅

---

## 🎯 Conclusão

**SIM, cada franquia terá seu próprio banco separado!**

As tabelas master são apenas para:
- ✅ Controlar quais franquias existem
- ✅ Fazer login único funcionar
- ✅ Saber qual banco cada franquia usa

**Os dados de cada franquia ficam em bancos completamente separados!**

