0

MySQL – Modelando Cadastro de Dinossauros com DDL

Sérgio Junior
Sérgio Junior

Embora existam ferramentas gráficas para modelagem e manutenção de estruturas em bancos de dados (que tornam essa tarefa um pouco mais simples), é possível que o profissional de TI se encontre às vezes em situações onde esses recursos não estão disponíveis ou não podem ser utilizados devido a alguma restrição.


Em um cenário como esse, é importante ter algum conhecimento em DDL (Data Definition Language – subconjunto da linguagem SQL) para conseguir atuar sobre o banco e as estruturas, realizando as operações necessárias.


Nesse artigo, vamos explorar um pouco desses comandos, criando um banco de dados para o cadastro de informações de dinossauros.



Entendendo nossos dados


Antes de ir para o banco em si, vamos tentar entender a estrutura que precisamos para armazenar nossos dados.


Sem entrar muito em detalhes paleontológicos, precisamos saber que existiram na Terra muitas espécies de dinossauros, cada uma com suas características peculiares, e que evoluíram e prosperaram ao longo de alguns períodos geológicos. Para uma modelagem simplificada, podemos considerar apenas alguns exemplares, conforme exibido abaixo:



Note que cada período geológico continha mais de um dinossauro, então precisaremos considerar em nosso modelo uma cardinalidade (1-N), ou Um para Muitos, de tal modo que cada dinossauro esteja relacionado apenas a um período, mas que cada período possa conter muitos dinossauros.



Colocando a mão na massa


Estando claro o que precisamos fazer, agora só falta descobrir como implementar isso. A criação de estruturas em um banco de dados, sempre usa o comando CREATE seguido da identificação do que se deseja criar.


Antes de criar as tabelas, precisamos ter um banco de dados. Caso esse banco não exista, você pode cria-lo da seguinte forma:


CREATE DATABASE dbdino;

USE dbdino;


Uma vez que o banco esteja criado e que você esteja nele, o próximo passo seria criar nossas tabelas, de acordo com a estrutura previamente apresentada. Começando pela tabela de Dinossauros, vamos criar campos para um Id (Chave primária), nome do dinossauro, sua altura (em metros), seu peso (em toneladas) e seu comprimento (em metros).


Todos os campos serão Not Null (não aceitam vazio) e a chave primária será Auto_Increment, ou seja, sempre que formos cadastrar um novo dinossauro, o próprio banco vai se incumbir de gerar o próximo valor para a chave automaticamente.


CREATE TABLE Dinossauros (

   IdDinossauro INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

   Dinossauro VARCHAR(50) NOT NULL,

   Altura DECIMAL(5,2) NOT NULL,

   Comprimento DECIMAL(5,2) NOT NULL,

   Peso INT NOT NULL

);


Mas não ficou faltando uma coluna chamada IdPeriodo? Sim, eu deixei de fora de propósito para mostrar mais adiante como inserimos colunas novas na tabela. Vamos agora criar nossa tabela de períodos e já aproveitar para inserir os dados dos períodos geológicos.


CREATE TABLE Periodos (

   IdPeriodo INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

   Periodo VARCHAR(15) NOT NULL   

);

 

INSERT INTO Periodos (Periodo) VALUES ("Triássico");

INSERT INTO Periodos (Periodo) VALUES ("Jurássico");

INSERT INTO Periodos (Periodo) VALUES ("Cretáceo");


Por que não inserimos valores para o campo IdPeriodo nos inserts acima? Porque ele é Auto_Increment, então podemos deixar que o próprio banco gere os valores.


Pois bem, temos até agora, então, as duas tabelas criadas (Dinossauros e Periodos), sendo que a última já contém inclusive os dados. Contudo, ainda não existe o relacionamento entre elas, de forma que a relação (1-N) seja estabelecida. Inclusive, para isso, tem-se que incluir um campo a mais na tabela Dinossauros, que é justamente a FK (Foreign Key – Chave Estrangeira) IdPeriodo.


Para isso, vamos agora alterar a estrutura da tabela Dinossauros, incluindo a FK IdPeriodo e criando a Constraint que implementa esse relacionamento de Um para Muitos.


ALTER TABLE Dinossauros

ADD COLUMN IdPeriodo INT NOT NULL,

ADD CONSTRAINT FK_DinoPeriodo

           FOREIGN KEY (IdPeriodo)

           REFERENCES Periodos (IdPeriodo);


O comando Alter é usado para alterar estruturas no banco de dados, logo Alter Table está modificando a estrutura de uma tabela (nesse exemplo, a tabela Dinossauros). Add Column está incluindo uma coluna adicional, que chamamos de IdPeriodo e, por fim, Add Constraint está adicionando uma restrição (que nomeei como FK_DinoPeriodo), do tipo Foreign Key (Chave Estrangeira) que liga o campo recém criado IdPeriodo (da tabela Dinossauros) com o campo IdPeriodo da tabela Periodos.


Agora sim, ambas as tabelas existem e estão devidamente relacionadas, de modo que podemos inserir alguns registros para testes.


INSERT INTO Dinossauros (Dinossauro, Altura, Comprimento, Peso, IdPeriodo)

VALUES ("Tyranosaurus rex", 4, 12, 9, 3);

 

INSERT INTO Dinossauros (Dinossauro, Altura, Comprimento, Peso, IdPeriodo)

VALUES ("Brachiosaurus altithorax", 12, 23, 80, 2);

 

INSERT INTO Dinossauros (Dinossauro, Altura, Comprimento, Peso, IdPeriodo)

VALUES ("Brontosaurus excelsus", 4.5, 22, 40, 2);

 

INSERT INTO Dinossauros (Dinossauro, Altura, Comprimento, Peso, IdPeriodo)

VALUES ("Triceratops horridus", 2, 9, 5, 3);

 

INSERT INTO Dinossauros (Dinossauro, Altura, Comprimento, Peso, IdPeriodo)

VALUES ("Stegosaurus stenops", 3, 6.5, 2, 2);

 

INSERT INTO Dinossauros (Dinossauro, Altura, Comprimento, Peso, IdPeriodo)

VALUES ("Plateosaurus", 4.5, 8, 4, 1);


Com todas as tabelas populadas, podemos consultar os resultados relacionados e comparar com a tabela de referência Dinossauro x Período em que viveu. Se tudo correu bem, os resultados são equivalentes.


SELECT  D.IdDinossauro,

        D.Dinossauro,

        D.Altura,

        D.Comprimento,

        D.Peso,

        P.IdPeriodo,

        P.Periodo

FROM Dinossauros D

      INNER JOIN Periodos P ON P.IdPeriodo = D.IdPeriodo

ORDER BY D.IdDinossauro;

 

Espero que tenham gostado. Vamos explorar novos recursos relacionados a bancos de dados nos próximos artigos. Até lá.

0
0

Comentários (0)

Consultor em projetos de Tecnologia e Sistemas de Informação | Professor

Brasil