Banco de dados da livraria — o problema clássico de banco de dados

Mariane Neiva — @maribneiva
3 min readMar 10, 2022

Nesse exercício, você foi contratado pelo dono de livraria que está se digitalizando.

Seu chefe pediu alguns requisitos obrigatórios:

Sobre livros

id, nome, preço, formato, editora, autores, gênero

Sobre os clientes

id, nome, aniversário, email

Sobre o vendedor

id, nome, data de contratação, telefone, aniversário

Sobre a compra

id, data, valor, cliente, vendedor, livro

Ps.: essa livraria bem é simples. Só pode ser vendido um livro por compra

Vamos lá?

Desenhando o banco

Para visualizar melhor a estrutura do banco de dados, vamos usar o DrawSQL para fazer o desenho do banco:

Desenho do banco simples. Relacionamento 1–para-1 entre livro e compra

Nessa versão, a compra tem um relacionamento 1-para-1 com o livro (um livro por compra). No entanto, se queremos um relacionamento m-para-n (vários livros podem estar em várias compras), podemos criar uma tabela de junção compra_livro como indicado na imagem abaixo:

Banco alternativo. Relacionamento m–para-n entre livro e compra. Criação de uma tabela de junção compra_livro

Criando as tabelas

Nas criações a seguir, vamos utilizar o banco da primeira imagem, a versão simples do sistema da biblioteca. Lembre-se: é um exercício ficticio e sem simplificado, a segunda imagem é mais próxima do mundo real.

Criando a tabela de livros

CREATE TABLE livro(
id_livro int,
nome text,
preco double,
formato text,
editora text,
autores text,
genero text
)

Criando a tabela de cliente

CREATE TABLE cliente(
id int,
nome text,
aniversário date,
email text
);

Criando a tabela de vendedor

CREATE TABLE vendedor(
id int,
nome
text,
data_contratação date,
telefone text,
data_aniversário date
);

Criando a tabela de compra

CREATE TABLE compra(
id_compra int,
data_compra date
,
valor_compra double,
id_cliente
int,
id_vendedor int,
id_livro int
);

Inserindo dados nas tabelas

Tabela livro

INSERT INTO livro VALUES (1, 'Mindset', 26.40, 'simples','a', 'Carol S. Dweck', 'desenvolvimento pessoal');
INSERT INTO livro VALUES (2, 'Hábitos atômicos', 34.10, 'dura', 'a','James Clear', 'desenvolvimento pessoal');
INSERT INTO livro VALUES (3, 'Senhora', 0, 'ebook', 'b','José de Alencar', 'literatura');
INSERT INTO livro VALUES (4, 'Dom Casmurro', 0, 'ebook','b', 'Machado de Assis', 'literatura');
INSERT INTO livro VALUES (5, 'A garota do lago', 8.90, 'dura', 'Charlie Donlea','ficcao');
INSERT INTO livro VALUES (2, 'Hábitos atômicos', 34.10, 'dura', 'James Clear', 'desenvolvimento pessoal');
INSERT INTO livro VALUES (3, 'Senhora', 0, 'ebook', 'José de Alencar', 'literatura');
INSERT INTO livro VALUES (4, 'Dom Casmurro', 0, 'ebook', 'Machado de Assis', 'literatura');
INSERT INTO livro VALUES (5, 'A garota do lago', 8.90, 'dura', 'Charlie Donlea','ficcao');

Tabela cliente

INSERT INTO cliente VALUES (1, 'Jose', '1990-10-20','jose@gmail.com');
INSERT INTO cliente VALUES (2, 'Marlene', '1960-05-27','marlene@gmail.com');
INSERT INTO cliente VALUES (3, 'Willy', '2017-01-13','willy@gmail.com');
INSERT INTO cliente VALUES (4, 'Andrew', '2005-11-01,'andy@gmail.com');
INSERT INTO cliente VALUES (5, 'Sonia', '1980-04-15,'sonia@gmail.com');

Tabela vendedor

INSERT INTO vendedor VALUES (1, 'João', '2020-01-02', '1199816488', '1999-02-04')
INSERT INTO vendedor VALUES (2, 'Joana', '2021-03-05', '1199999999', '1989-12-25');
INSERT INTO vendedor VALUES (3, 'Adriana', '2019-04-15', '1199999999', '1970-05-17');
INSERT INTO vendedor VALUES (4, 'Marcelo', '2019-05-20', '11994138227', '1970-08-20');

Tabela compra

INSERT INTO compra VALUES (1, '2021-04-05', 0.00, 3, 1,4);
INSERT INTO compra VALUES (2, '2021-04-25', 7.00, 3, 4,5);
INSERT INTO compra VALUES (3, '2021-07-03', 34.10, 2, 2,2);
INSERT INTO compra VALUES (4, '2021-10-17', 26.40, 2, 3,1);
INSERT INTO compra VALUES (5, '2021-10-17', 0.0, 1, 3,4);
INSERT INTO compra VALUES (6, '2021-10-17', 0.0, 5, 1,4);

Selecionando dados

select * from livroselect * from clienteselect * from vendedorselect * from compraselect * from compra where data_compra = '2021-10-17'
select sum(valor_compra) from compra where data_compra = '2021-10-17'
select * from compra order by descSELECT * FROM compra,cliente where cliente.id = compra.id_cliente and cliente.id = 2SELECT * FROM compra INNER JOIN livro ON livro.id_livro = compra.id_livroSELECT * FROM compra INNER JOIN cliente ON cliente.id = compra.id_cliente

O que mais fariam nesse banco de dados?
Não esqueçam de me seguir:
Linkedlin
Instagram

--

--

Mariane Neiva — @maribneiva

Woman in tech, researcher @University of Sao Paulo. Passionate by artificial intelligence, innovation, scientific communication and programming.