Criação de Tabelas e Relacionamentos com SQL

Já escrevi sobre a criação de relacionamentos no MySQL anteriormente, então não serei repetitivo em falar sobre as mesmas coisas, mas aconselho a leitura do artigo anterior para os que não tiverem intimidade com relacionamentos de banco de dados.

Neste me concentrarei em mostrar a criação de relacionamentos utilizando apenas comandos SQL, não que isso dispense a utilização de uma interface com o banco de dados para a execução dos mesmos. Para isso, podemos utilizar além do próprio MySQL Query Browser, o phpMyAdmin ou outro programa de sua preferência que permita a execução de códigos SQL na base de dados.

Basearei minhas explicações em exemplos para a criação de um banco de dados para uma “biblioteca” (inventado apenas para nos servir de exemplo, então longe de ser completo o suficiente para uma aplicação real). Iniciaremos, criando a tabela de autores, contendo o nome do mesmo e um identificador:

CREATE TABLE autor (
id INT,
nome VARCHAR
)

No código anterior contemplamos apenas a estrutura da tabela, ignorando a definição da chave primária e dos campos que não aceitam valores nulos. Então, colocaremos o id como chave primária (primary key, ou apenas pk) e auto incrementada, para que o seu valor seja gerado pelo próprio MySQL. Além disso, o campo nome passa a não aceitar valores nulos, pois o padrão é que qualquer coluna aceite valores nulos. Existem outras sintaxes para esse comando, mas mostrarei apenas a que considero mais simples (mas não possibilita a criação de chaves compostas).

CREATE TABLE autor (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR NOT NULL
)

Então, nossa tabela de autores está pronta. Criaremos agora a tabela de livros. Para simplificar, considerarei que um livro será escrito por apenas um autor, assim teremos que cada livro fará referência a exato um registro da tabela de autores. Armazenaremos, além do autor, apenas ISBN, título e edição do livro.

CREATE TABLE livro (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
isbn INT NOT NULL,
titulo VARCHAR NOT NULL,
edicao INT NOT NULL
)

Já que o ISBN é um identificador único para as edições dos livros, poderíamos utilizá-lo como chave primária, mas não faremos isso, apenas não aceitaremos valores repetidos no ISBN, para isso utilizaremos unique nessa coluna. Além disso, temos ainda que criar uma coluna para o relacionamento com a tabela de autores e constraint de chave estrangeira (foreign key, ou apenas fk).

CREATE TABLE livro (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
isbn INT NOT NULL UNIQUE,
titulo VARCHAR NOT NULL,
edicao INT NOT NULL,
autor INT NOT NULL
CONSTRAINT fk_autor FOREIGN KEY (id) REFERENCES autor(id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
engine = InnoDB

Não comentei sobre a última linha do comando, ela determina o tipo de tabela que o MySQL criará. É necessário acrescentá-la por causa da foreign key, que não é suportada por qualquer tipo de tabela.

A criação das tabelas de autor e livro já foram suficientes para mostrar o básico da sintaxe de criação de tabela e já temos um (mini) banco de dados funcionando. Existem muitos detalhes que não foram comentados nesse artigo, quem quiser pode encontrá-los na documentação do MySQL.

Espero ter respondido aos pedidos feitos nos comentários do outro artigo. Abraços!

Uma ideia sobre “Criação de Tabelas e Relacionamentos com SQL

  1. Natanael

    Valeu Rodrigo, não li ainda, estou cheio de coisas aqui, mas vou salvar nos favoritos, com certeza. Vou fazer testes com esses exemplos, exatamente como você mensionou no seu artigo.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *