Tipos de Atributos

Autor

Douglas Braga

Os atributos descrevem as propriedades de entidades e relacionamentos. Há vários tipos, cada um com implicações distintas para a modelagem e para a conversão em esquemas relacionais.

Classificação dos Atributos

Simples vs. Composto

  • Atributo simples: não pode ser dividido em subpartes. É atômico.
  • Atributo composto: pode ser decomposto em subatributos com significado próprio.

O atributo nome de um aluno pode ser modelado como composto:

nome
├── primeiro_nome
├── nome_do_meio   (opcional)
└── sobrenome

Se o sistema precisar ordenar alunos por sobrenome ou gerar etiquetas formais com “Nome, Sobrenome”, vale a pena decompor. Se o nome for tratado como um bloco único, mantê-lo simples é mais prático.

No banco da UnDF, nome é mantido como atributo simples (string completa), pois não há necessidade de consultar partes do nome separadamente.

Monovalorado vs. Multivalorado

  • Atributo monovalorado: admite um único valor para cada entidade.
  • Atributo multivalorado: pode ter múltiplos valores para a mesma entidade. Representado no diagrama ER por uma elipse com borda dupla.

Um professor pode ter vários números de telefone. Se modelarmos telefone como atributo de professor, ele seria multivalorado — cada professor pode ter 0, 1 ou muitos telefones.

No diagrama ER, isso é representado por uma elipse com borda dupla:

er_multivalor professor professor tel telefone professor--tel nome nome professor--nome matricula ̲m̲a̲t̲r̲i̲c̲u̲l̲a̲_̲p̲r̲o̲f̲ professor--matricula

Na conversão para esquema relacional, atributos multivalorados tornam-se tabelas separadas (seção 4.8).

Derivado

Atributo derivado: seu valor pode ser calculado a partir de outros atributos. Representado no diagrama ER por uma elipse com borda tracejada.

O atributo tempo_de_casa de um professor pode ser derivado de ano_ingresso e da data atual. O atributo total_alunos de um curso pode ser derivado contando as tuplas em aluno com aquele sigla_curso.

Atributos derivados não são armazenados no banco de dados — são calculados no momento da consulta. Aparecem no diagrama ER apenas para documentar que a informação é derivável.

Domínio

O domínio de um atributo é o conjunto de valores permitidos para ele.

Atributo Domínio
ch_semanal em professor {20, 40} (valores inteiros positivos)
tipo_curso em curso {'bacharelado', 'licenciatura', 'tecnólogo'}
nota em matricula_disciplina Reais entre 0 e 10
aprovado em matricula_disciplina {0, 1} (booleano)
nome em aluno Strings de até 100 caracteres

O domínio é especificado no DDL pelo tipo de dado da coluna e por restrições CHECK.

Resumo dos Tipos

Tipo Notação ER Conversão Relacional
Simples Elipse normal Coluna direta
Composto Elipse com sub-elipses Uma coluna por componente (ou coluna única)
Monovalorado Elipse normal Coluna direta
Multivalorado Elipse com borda dupla Tabela separada com FK
Derivado Elipse tracejada Não armazenado (calculado)

Para Praticar

1. Classificar atributos. Para a entidade aluno com atributos abaixo, classifique cada um como simples/composto e monovalorado/multivalorado/derivado:

  1. matricula
  2. nome (composto de primeiro nome e sobrenome)
  3. endereco (composto de rua, número, cidade, CEP)
  4. emails (um aluno pode ter e-mail pessoal e institucional)
  5. ano_ingresso
  6. semestres_cursados (pode ser calculado a partir de ano_ingresso)
  • (a) Simples, monovalorado — código único por aluno.
  • (b) Composto, monovalorado — tem subpartes, mas cada aluno tem um nome.
  • (c) Composto, monovalorado — tem subpartes (rua, número, cidade, CEP).
  • (d) Simples (cada e-mail), multivalorado — um aluno pode ter múltiplos e-mails.
  • (e) Simples, monovalorado — um único ano de ingresso.
  • (f) Derivado — calculado a partir de ano_ingresso e da data atual; não precisa ser armazenado.

2. Atributo composto no SQL. O banco da UnDF armazena nome como uma única coluna VARCHAR(100). Se quiséssemos decompor em primeiro_nome e sobrenome, qual seria a vantagem e qual seria o custo?

Vantagem: consultas como ORDER BY sobrenome ou geração de formatações formais (“Souza, Eduarda”) ficariam mais simples e eficientes — sem precisar de SPLIT_PART ou funções de string.

Custo: migração dos dados existentes (separar nome e sobrenome de 18 alunos e 7 professores), maior complexidade na entrada de dados, e nomes compostos (ex.: “Ana Maria de Souza”) precisam de regras claras de decomposição. Para o porte atual do banco, o custo não se justifica.


3. Armadilha do atributo multivalorado em SQL. Um desenvolvedor resolve armazenar múltiplos telefones de professores concatenando-os em uma coluna: telefones = '11-9999-0001,11-9888-0002'. Quais problemas essa solução causa?

  • Busca: encontrar todos os professores com determinado número exige LIKE '%11-9999-0001%', que não usa índices eficientemente.
  • Atualização: remover um número requer manipulação de string no código da aplicação.
  • Integridade: não há como impor que cada número seja válido (formato, unicidade).
  • Normalização: viola a 1ª Forma Normal — valores não são atômicos.

A solução correta é uma tabela separada: telefone_professor(matricula_prof FK, telefone VARCHAR(20)).