🌿 ATRIBUTOS COMPOSTOS, MULTIVALORADOS E DERIVADOS
Na modelagem de alto nível, nem todo dado é uma simples "string" ou "número". Existem estruturas que exigem um olhar clínico do Arquiteto de Dados para evitar redundância e falhas de projeto. 🛡️🧩
Objetivo: Diferenciar tipos avançados de atributos e dominar as estratégias de decomposição para garantir a atomicidade dos dados e a performance do SGBD.
📗 PASSO 1: Atributo Composto (Hierarquia)
Ocorre quando um atributo pode ser subdividido em partes menores. No banco físico, ele deve ser decomposto em colunas individuais.
📊 Decomposição do Endereço
erDiagram
CLIENTE {
int id_cliente PK
string logradouro
string numero
string bairro
string cep
}
- ⚠️ Alerta: Salvar endereço completo em uma única coluna dificulta filtros por bairro ou CEP.
📗 PASSO 2: Atributo Multivalorado (A Lista)
Ocorre quando uma única tupla possui vários valores para o mesmo atributo (ex: Telefone).
📊 Resolução via Tabela Secundária
erDiagram
CLIENTE ||--o{ TELEFONE : "possui"
CLIENTE {
int id_cliente PK
string nome
}
TELEFONE {
int id_cliente FK
string numero
string tipo
}
- 💡Dica: Atributos multivalorados geram uma nova tabela no modelo lógico para respeitar a 1FN (Primeira Forma Normal).
📗 PASSO 3: Atributo Derivado (Cálculo)
É aquele cujo valor não precisa ser armazenado fisicamente, pois pode ser calculado a partir de outros dados.
- 📍 Exemplo:
Idade(derivada da Data de Nascimento). - 🚀 Dica de Performance: Use Colunas Geradas (Generated Columns):
ALTER TABLE funcionarios
ADD COLUMN idade INT GENERATED ALWAYS AS (YEAR(CURDATE()) - YEAR(data_nascimento)) VIRTUAL;
📗 PASSO 4: Resumo de Decomposição
| Tipo de Atributo | Ação do Engenheiro de Dados |
|---|---|
| Composto | Quebrar em múltiplas colunas na mesma tabela. |
| Multivalorado | Criar uma tabela secundária relacionada (FK). |
| Derivado | Criar uma View ou Coluna Gerada (não armazenar). |
💡 Regra de Ouro (Codd): Para que seu banco seja verdadeiramente "Relacional", cada coluna deve conter apenas valores atômicos (indivisíveis). 🚀🛡️