Projeto SQL: Loja de Vinhos

Um guia interativo para as etapas do seu trabalho de banco de dados.

1. Modelo Físico (DDL - Data Definition Language)

A primeira etapa é definir a estrutura do nosso banco de dados. Usamos os comandos DDL para criar as "plantas baixas" das nossas tabelas, especificando quais colunas elas terão, os tipos de dados de cada uma e como elas se relacionam através de chaves primárias e estrangeiras.

CREATE TABLE `Regiao` (
  `codRegiao` BIGINT NOT NULL AUTO_INCREMENT,
  `nomeRegiao` VARCHAR(100) NOT NULL,
  `descricaoRegiao` TEXT,
  PRIMARY KEY (`codRegiao`)
);

2. Inserção de Dados (DML - Data Manipulation Language)

Com a estrutura pronta, é hora de popular nossas tabelas. Usamos os comandos DML para inserir os registros. É crucial manter a integridade referencial, ou seja, inserir primeiro os dados nas tabelas que não dependem de outras (como `Regiao`), para depois inserir em tabelas que se referenciam a elas (como `Vinicula` e `Vinho`).

Visualização dos Dados Inseridos

Tabela: Regiao

codRegiaonomeRegiao
1Vale dos Vinhedos
2Serra Gaúcha
3Vale do São Francisco
4Campanha Gaúcha
5Serra do Sudeste

Tabela: Vinicula

codViniculanomeViniculacodRegiao
1Casa Valduga1
2Miolo1
3Aurora2
4Vinibrasil (Rio Sol)3
5Guatambu4

Tabela: Vinho

codVinhonomeVinhotipoVinhoanoVinhocodVinicula
1130 BrutEspumante20221
2Lote 43Tinto20202
3MerlotTinto20213
4Rio Sol SyrahTinto20204
5Rastros do Pampa CabernetTinto20195

3. Consulta (DQL - Data Query Language)

Com os dados no lugar, podemos "conversar" com o banco. O DQL nos permite fazer perguntas. A tarefa pede para listar os vinhos, suas vinícolas e as regiões de origem. Para isso, usamos o `JOIN`, que "costura" as informações das três tabelas usando as chaves que as conectam.

Comando de Consulta

SELECT
    Vinho.nomeVinho,
    Vinho.anoVinho,
    Vinicula.nomeVinicula,
    Regiao.nomeRegiao
FROM
    Vinho
JOIN
    Vinicula ON Vinho.codVinicola = Vinicula.codVinicola
JOIN
    Regiao ON Vinicula.codRegiao = Regiao.codRegiao;

Resultado da Consulta

nomeVinho anoVinho nomeVinicula nomeRegiao
130 Brut2022Casa ValdugaVale dos Vinhedos
Lote 432020MioloVale dos Vinhedos
Merlot2021AuroraSerra Gaúcha
Rio Sol Syrah2020Vinibrasil (Rio Sol)Vale do São Francisco
Rastros do Pampa Cabernet2019GuatambuCampanha Gaúcha

4. Controle de Acesso (DCL - Data Control Language)

A segurança é fundamental em qualquer banco de dados. Com o DCL, criamos usuários e controlamos exatamente o que eles podem ver e fazer. Aqui, criamos o usuário `Somellier` com acesso limitado, garantindo que ele veja apenas as informações estritamente necessárias para seu trabalho, e com um limite de consultas por hora.

Comando de Criação do Usuário

-- Cria o usuário 'Somellier' que só pode acessar localmente, com senha e limite de 40 consultas/hora.
CREATE USER 'Somellier'@'localhost'
IDENTIFIED BY 'uma_senha_segura'
WITH MAX_QUERIES_PER_HOUR 40;

Comandos de Permissão

-- Concede permissão de leitura (SELECT) em todas as colunas da tabela Vinho.
GRANT SELECT ON Servienski.Vinho TO 'Somellier'@'localhost';

-- Concede permissão de leitura (SELECT) apenas nas colunas codVinicula e nomeVinicula da tabela Vinicula.
GRANT SELECT (codVinicula, nomeVinicula) ON Servienski.Vinicula TO 'Somellier'@'localhost';

Simulação: O que o 'Somellier' pode ver

Acesso PERMITIDO ✅

O usuário pode ver TODAS as colunas da tabela `Vinho`.

codVinhonomeVinhotipoVinhoanoVinhocodVinicula
...............

Acesso RESTRITO 🚫

O usuário pode ver APENAS duas colunas da tabela `Vinicula`.

codViniculanomeViniculadescriçãofone
......NEGADONEGADO