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
| codRegiao | nomeRegiao |
|---|---|
| 1 | Vale dos Vinhedos |
| 2 | Serra Gaúcha |
| 3 | Vale do São Francisco |
| 4 | Campanha Gaúcha |
| 5 | Serra do Sudeste |
Tabela: Vinicula
| codVinicula | nomeVinicula | codRegiao |
|---|---|---|
| 1 | Casa Valduga | 1 |
| 2 | Miolo | 1 |
| 3 | Aurora | 2 |
| 4 | Vinibrasil (Rio Sol) | 3 |
| 5 | Guatambu | 4 |
Tabela: Vinho
| codVinho | nomeVinho | tipoVinho | anoVinho | codVinicula |
|---|---|---|---|---|
| 1 | 130 Brut | Espumante | 2022 | 1 |
| 2 | Lote 43 | Tinto | 2020 | 2 |
| 3 | Merlot | Tinto | 2021 | 3 |
| 4 | Rio Sol Syrah | Tinto | 2020 | 4 |
| 5 | Rastros do Pampa Cabernet | Tinto | 2019 | 5 |
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 Brut | 2022 | Casa Valduga | Vale dos Vinhedos |
| Lote 43 | 2020 | Miolo | Vale dos Vinhedos |
| Merlot | 2021 | Aurora | Serra Gaúcha |
| Rio Sol Syrah | 2020 | Vinibrasil (Rio Sol) | Vale do São Francisco |
| Rastros do Pampa Cabernet | 2019 | Guatambu | Campanha 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`.
| codVinho | nomeVinho | tipoVinho | anoVinho | codVinicula |
|---|---|---|---|---|
| ... | ... | ... | ... | ... |
Acesso RESTRITO 🚫
O usuário pode ver APENAS duas colunas da tabela `Vinicula`.
| codVinicula | nomeVinicula | descrição | fone |
|---|---|---|---|
| ... | ... | NEGADO | NEGADO |