Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🧬 CAPÍTULO 06: ANATOMIA DE ATRIBUTOS, DOMÍNIOS E TIPOS

No Modelo Relacional, a organização da informação é cirúrgica. Para que um banco de dados seja escalável e performático (como no MySQL 8.4 ou PostgreSQL 17), precisamos entender como cada "pedaço" de dado se encaixa na estrutura. 🛡️🧩


🎯 Objetivo Curricular

Compreender a estrutura interna dos dados através da definição técnica de atributos, tuplas e o papel vital da Chave Primária (PK). Comparar os tipos de dados entre os SGBDs e dominar o uso de autoincremento e campos híbridos.


🏢 O Cenário Prático (Seu Desafio)

Você atua na TecProExpress. O setor de desenvolvimento reclamou que os IDs dos novos pacotes estão colidindo e gerando erros nas aplicações. Além disso, eles precisam de uma forma de salvar "detalhes técnicos variáveis" de eletrônicos (voltagem, cor, garantia) que mudam para cada produto, tudo sem criar mil colunas vazias.

"Seu desafio é dominar a engenharia de chaves primárias (Autoincrement/Identity) e explorar como armazenar flexibilidade no modelo relacional usando campos JSON nativos."


🧠 Fundamentos: Anatomia de um Registro

1. O Atributo (Campo)

Um Atributo é a menor unidade de informação. Ele precisa seguir as regras do seu Domínio:

  • Atomicidade: O valor deve ser indivisível (ex: separar a Rua do Bairro em vez de criar um "Endereço Completo").
  • Tipo de Dado: INT, VARCHAR, DATE (Limita o que o usuário pode preencher).

2. A Chave Primária (PK)

Nenhuma tabela profissional existe sem uma Chave Primária. Ela é o DNA da tupla, garantindo a integridade dos registros.

🔍 As Duas Leis da PK:

  1. Unicidade: O valor nunca se repete.
  2. Obrigatoriedade: O campo da PK é sempre NOT NULL (Não pode ser vazio).

📖 Exemplo Guiado: Autoincremento Poliglota (DDL -> DML)

A solução para o problema de IDs colidindo na TecProExpress é deixar o próprio SGBD gerenciar a numeração automática das chaves primárias.

Muitos iniciantes não sabem que a sintaxe muda radicalmente entre os bancos.

🛠️ Código no MySQL 8.4 LTS

-- DDL
CREATE TABLE pacotes_mysql (
    id INT PRIMARY KEY AUTO_INCREMENT,
    destino VARCHAR(100)
);

-- DML (O ID é gerado sozinho)
INSERT INTO pacotes_mysql (destino) VALUES ('São Paulo');

🛠️ Código no PostgreSQL 17

-- DDL
CREATE TABLE pacotes_postgres (
    id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    destino VARCHAR(100)
);

-- DML
INSERT INTO pacotes_postgres (destino) VALUES ('Rio de Janeiro');

🔍 Detalhamento do Código:

  • AUTO_INCREMENT vs GENERATED ALWAYS AS IDENTITY: É essencial dominar ambos para atuar no mercado poliglota.
  • Note que, no INSERT, omitimos a coluna id de propósito, pois o SGBD é o responsável pela geração.

📐 Tipos de Dados e Restrições de Domínio

1. Power Tools de Domínio

Além dos tipos básicos (Texto, Número, Data), adicionamos inteligência com restrições (Constraints):

  • NOT NULL: Preenchimento obrigatório.
  • UNIQUE: Valor não repetido, mas permite NULL (ex: E-mail de marketing secundário).
  • CHECK: Valida lógicas (ex: CHECK (preco > 0)).

2. JSON vs JSONB (Arquitetura Híbrida)

A resposta para a TecProExpress armazenar "detalhes técnicos variáveis" sem criar mil colunas é utilizar o poder dos SGBDs modernos que suportam Documentos JSON dentro do modelo relacional:

  • MySQL JSON: Armazena e valida o texto estruturado.
  • Postgres JSONB: Armazena em binário indexado. É incrivelmente rápido para filtros internos.

🛠️ Prática Obrigatória: Carga Híbrida

Cenário: A tabela de produtos avançados da TecProExpress.

  1. Crie a tabela produto_hibrido com uma PK autoincremental e uma coluna chamada especificacoes do tipo JSON.
  2. Insira 2 produtos com detalhes estruturais completamente diferentes usando DML.

🚀 Script de Seed (Gabarito)

-- DDL (Sintaxe MySQL)
CREATE TABLE produto_hibrido (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nome VARCHAR(100) NOT NULL,
    especificacoes JSON
);

-- DML
INSERT INTO produto_hibrido (nome, especificacoes) 
VALUES ('Notebook Gamer', '{"cpu": "i7", "ram": "16GB"}');

INSERT INTO produto_hibrido (nome, especificacoes) 
VALUES ('Cabo HDMI', '{"tamanho_metros": 2, "cor": "preto", "banhado_ouro": true}');

📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos práticos e de estudo:

Use o operador e para critérios rigorosos e ou para critérios flexíveis. Salve os arquivos com a extensão .sql (Ex: Atividade_XX_SeuNome.sql ou Atividade_XX_SeuNome.png ou Atividade_XX_SeuNome.drawio


💡 Checkpoint de Lógica

[!TIP] Dica do Arquiteto: Evite usar BIGINT para tudo. No MySQL, se um campo nunca passará de 255 valores (ex: status de um pedido, idade), use TINYINT. Economia de espaço é sinônimo de performance em larga escala! 🚀🛡️