Академический Документы
Профессиональный Документы
Культура Документы
R P P
supervisionado por
Profa. Dra. Sahudy Montenegro González
9 de dezembro de 2017
Sumário
2 Projeto Conceitual 7
3 Projeto Lógico 9
3.1 Descrição do Mapeamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 Esquema e Normalização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4 Projeto Físico 13
4.1 Criação e alimentação do banco de dados . . . . . . . . . . . . . . . . . . . . . 13
4.2 Consultas em Álgebra Relacional e SQL . . . . . . . . . . . . . . . . . . . . . . 13
4.3 Proposta e Implementação de um trigger . . . . . . . . . . . . . . . . . . . . . 16
5 Considerações finais 17
Referências Bibliográficas 18
Apêndices 19
1
Lista de Figuras
2
Lista de Tabelas
3
1 Especificação do Problema e dos Requisitos de Dados
4
atendimento e melhorar a organização da loja como um todo.
O sistema deve permitir a realização de consultas e atualizações através da CLI (Com-
mand Line Interface) do software PostgreSQL Stinson [2001], escolhido para implementação
deste projeto.
1.2 Descrição dos Requisitos de Dados
5
• Atributos de busca: Nenhum
6
2 Projeto Conceitual
Esta seção apresenta dois elementos necessários para a modelagem conceitual: a ta-
bela de atributos dos tipo-entidades e o diagrama entidade-relacionamento (DER). A Tabela
2.1 resume os atributos dos tipo-entidades do problema, descrevendo também seus tipos e
restrições. A Figura 2.1 contém o diagrama entidade-relacionamento, o qual identifica, além
dos atributos dos tipo-entidades, os tipo-relações entre os tipo-entidades e atributos ineren-
tes a estes. Ambos elementos foram construídos de forma a refletir o mini-mundo descrito
na Seção 1.
Tipo-Entidade Atributo Tipo Restrição
Album Cod_album Monovalorado, simples, identificador Obrigatório
Nome Monovalorado, simples Obrigatório
Capa Monovalorado, simples Opcional
1889 <= data.ano <= ano atual e obrigatório,
Data_publicacao Monovalorado, composto
1 <= data.dia <= 31 e 1 <= data.mes <= 12 opcionais
Pais Monovalorado, simples Obrigatório
Genero Multivalorado, simples Obrigatório
Descricao Monovalorado, simples 1 <= descricao.size <= 200, opcional
Avaliacao Monovalorado, simples 0 <= avaliacao <= 5, opcional
Versao Cod_barras Monovalorado, simples, ident. parcial Obrigatório
Formato Monovalorado, simples ”vinil”, ”cassete”ou ”cd”
Tipo_versao Monovalorado, simples ”original”, ”remasterizada”ou ”aniversario”
Preco Monovalorado, simples preco >0, obrigatório
Qtd_vendida Monovalorado, simples qtd_vendida >= 0, obrigatório
Qtd_disponivel Monovalorado, simples qtd_disponivel >= 0, obrigatório
Promocao Monovalorado, simples Booleano, obrigatório
Gravadora Nome Monovalorado, simples Obrigatório
Cod_identificacao Monovalorado, simples, identificador Obrigatório
Data_fundacao Monovalorado, composto data <= 2017
Genero Multivalorado, simples Obrigatório
email é ”x@y.{z}”, em que x e y são cadeias de
E-mail Monovalorado, simples
caracteres alfanuméricos e z é um grupo de domínios
telefone é ”XXYYZZZZZZZZ”,
Telefone Multivalorado, simples
em que X, Y e Z são números
Banda Cod_banda Monovalorado, simples, identificador Obrigatório
Nome Monovalorado, simples Obrigatório
Data_fundacao Monovalorado, composto data <= 2017
Genero Multivalorado, simples Obrigatório
Descricao Monovalorado, simples Opcional
7
Figura 2.1: DER da modelagem do problema
2. Uma banda pode atuar em gêneros diferentes da gravadora que contratou. Por exem-
plo, a gravadora Virgin Records atualmente atua nos gêneros Pop e Pop-rock, porém
tem contratos com bandas de diversos gêneros, como Jamiroquai (gêneros Pop-funk
Acid-jazz) e Genesis (gênero Prog-rock).
8
3 Projeto Lógico
9
3.2 Esquema e Normalização
10
As dependências funcionais associadas ao esquema relacional são as seguintes:
11
12
4 Projeto Físico
O código que contém a criação das tabelas do banco de dados deste projeto encontra-se
no apêndice A. Os seis esquemas gerados na seção 3 foram mapeados para seis tabelas
de mesmo nome utilizando a sintaxe do PostgreSQL. Optou-se por utilizar atributos do tipo
serial para as tabelas album, banda e gravadora para que não houvesse preocupação
com a geração de chaves primárias para tuplas dessas tabelas. Como o tipo serial impõe,
por padrão, a possibilidade de uma gama de valores equivalente ao tipo bigint, as cha-
ves primárias e estrangeiras das outras tabelas (versao, gravacao e contrato) também
foram forçadas a utilizar o tipo bigint.
Em termos de restrições de domínio, os atributos das tabelas foram declaradas conforme
a tabela 2.1, com a adição de algumas outras restrições visando a escalabilidade do arma-
zenamento: a restrição de que todos os atributos que são cadeias de caracteres (exceto
atributos descricao de album e formato e tipo_versao de versao) foram limitados
a 40 caracteres; e os atributos telefone1 e telefone2 foram limitados a 15 caracteres,
conforme norma global.
As políticas de operações sobre o banco de dados foram definidas para todas as ta-
belas que possuem chaves estrangeiras: versao, gravacao e contrato. Em todos os
casos, convencionou-se que remoções e atualizações nas tabelas referenciadas implicam
em remoções e atualizados em cascata nas tabelas com referências.
O banco foi alimentado através dos scripts contidos no apêndice B conforme a ordem
descrita: primeiro foram inseridos os álbuns (B.1), bandas (B.2) e gravadoras (B.3) e pos-
teriormente as versões de álbuns (B.4), gravações (B.5) e contratos (B.6), para garantir a
integridade referencial do banco de dados. Os dados foram obtidos majoritariamente atra-
vés das próprias mídias físicas dos álbuns e por meio do site Discogs Lewandowski [2017],
logo representam dados condizentes com a vida real e não triviais.
13
• Atributos de visualização do resultado: Cod_album, Nome, Descricao
• Atributos de busca: Cod_banda
• AR:
t1 ← σCod_banda=⟨banda⟩ (Gravacao)
tf ← πCod_album,N ome,Descricao (t1 ▷◁ Album)
14
• Atributos de busca: Cod_album, Promocao
• AR:
15
• Função em SQL: avg_rating_band
16
5 Considerações finais
O projeto consiste na criação de um banco de dados que uma loja de discos pode utilizar
para facilitar a sua organização e manutenção. A loja foi modelada de modo a ter quatro
tipo entidades, Banda, Álbum, Gravadora e Versão, na qual a loja vende versões de álbuns
musicais. O controle dentro do estabelecimento Sahudyscos torna-se notavelmente mais
fácil com a utilização do banco de dados quando comparado com trabalhadores que teriam
que, por exemplo, verificar o estoque de discos, realizar pedidos para aqueles que estives-
sem em falta, ou mesmo lembrar manualmente a uma lista bandas de determinado gênero
quando requisitado por um cliente.
Algumas limitações fundamentais do projeto incluem a inexistência de registro de faixas
dos álbuns, o fato de modificar o estado de uma versão de álbum em relação a promoção
precisar efetivamente de duas operações, a inexistência de controle de vendas (uma vez
que está fora do escopo) e a duplicação de alguns dados quando há versões originais à
venda. Embora este projeto tenha sido criado e desenvolvido especialmente para a loja em
questão, o modelo pode ser adaptado para outras finalidades e funções, sendo capaz de ser
utilizado, ou reaproveitado em outros projetos.
17
Referências Bibliográficas
E. F. Codd. A relational model of data for large shared data banks. Commun. ACM,
13(6):377–387, June 1970. ISSN 0001-0782. doi: 10.1145/362384.362685. URL
http://doi.acm.org/10.1145/362384.362685.
Barry Stinson. PostgreSQL Essential Reference. New Riders Publishing, Thousand Oaks,
CA, USA, 2001. ISBN 0735711216.
18
Apêndices
19
A Código da criação do banco de dados
20
38 tipo_versao varchar(20) NOT NULL CHECK (tipo_versao =
,→ 'original' OR tipo_versao = 'remasterizada' OR tipo_versao
,→ = 'aniversário'),
39 preco numeric NOT NULL CHECK (preco >= 0),
40 qtd_vendida bigint NOT NULL CHECK (qtd_vendida >= 0),
41 qtd_disponivel bigint NOT NULL CHECK (qtd_disponivel >= 0),
42 promocao boolean NOT NULL,
43 data_lancamento date NOT NULL CHECK ((data_lancamento >=
,→ '1889-01-01') AND (data_lancamento <= CURRENT_DATE)),
44 PRIMARY KEY (cod_barras, cod_album),
45 FOREIGN KEY (cod_album) REFERENCES album(cod_album) ON UPDATE
,→ CASCADE ON DELETE CASCADE,
46 FOREIGN KEY (cod_gravadora) REFERENCES
,→ gravadora(cod_identificacao) ON UPDATE CASCADE ON DELETE
,→ CASCADE
47 );
48
21
B Código da alimentação do banco de dados
B.1 Álbuns
22
10 ('Lulu', 'US', 'Lulu is a collaborative album between rock
,→ singer-songwriter Lou Reed and heavy metal band Metallica. It
,→ was released on October 31, 2011 by Warner Bros. in the U.S. and
,→ Vertigo elsewhere.', 3.42,
,→ 'https://img.discogs.com/mBDUnwvyoTKo5QyTIx08OeU7ffE=/fit-in/470x467/filters:s
,→ '2011-10-31', 'Rock', 'Avantgarde');
11 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
12 ('Minute By Minute', 'US', 'Minute by Minute is the eighth studio
,→ album by American rock band The Doobie Brothers, released in
,→ 1978. The album contains their biggest hit, the Grammy-winning
,→ "What a Fool Believes," which was co-written by Kenny Loggins
,→ and simultaneously released on his 1978 album Nightwatch.',
,→ 3.64,
,→ 'https://img.discogs.com/TZ71KMxLLVM5flj0Tq6LYYiykN4=/fit-in/600x596/filters:s
,→ '1978-12-1', 'Pop', 'Rock');
13 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
14 ('A Saucerful Of Secrets', 'UK', 'A Saucerful of Secrets is the
,→ second studio album by the English rock band Pink Floyd,
,→ released on 29 June 1968 by EMI Columbia in the United Kingdom
,→ and released on 27 July 1968 in the United States by Tower
,→ Records.', 4.31,
,→ 'https://img.discogs.com/-py05SBErqzDoi77TYbElzp1GAc=/fit-in/600x597/filters:s
,→ '1968-06-29', 'Rock', 'Psychedelic');
15 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
16 ('Ummagumma', 'UK', 'Ummagumma is the fourth album by the English
,→ rock band Pink Floyd. It is a double album and was released on 7
,→ November 1969 by Harvest Records in the United Kingdom and by
,→ Capitol Records internationally.', 4.11,
,→ 'https://img.discogs.com/z_UiAo4RrL0SQMBNr_4RKSy9Ogo=/fit-in/587x600/filters:s
,→ '1969-10-25', 'Rock', 'Psychedelic');
17 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
18 ('More', 'UK', 'More is the first full-length soundtrack album, and
,→ third studio album, by the English rock band Pink Floyd,
,→ released on 13 June 1969 in the United Kingdom by EMI Columbia
,→ and on 9 August 1969 by Tower Records a subsidiary label of
,→ Capitol Records in the United States as Original Motion Picture
,→ Soundtrack from the film More.', 4.06,
,→ 'https://img.discogs.com/YF7rneGUVTGM8kVo_xBhpa_2qS0=/fit-in/600x590/filters:s
,→ '1969-06-13', 'Rock', 'Psychedelic');
19 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
23
20 ('Atom Heart Mother', 'UK', 'Atom Heart Mother is the fifth studio
,→ album by the English progressive rock band Pink Floyd. It was
,→ released by Harvest on 2 October 1970 in the UK, and by Capitol
,→ on 10 October 1970 in the US.', 4.25,
,→ 'https://img.discogs.com/lVSWqAipy64ZCi3zyS2b8tlMo2w=/fit-in/600x588/filters:s
,→ '1970-10-02', 'Rock', 'Psychedelic');
21 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
22 ('Meddle', 'UK', 'Meddle is the sixth studio album by English
,→ progressive rock group Pink Floyd, released on 31 October 1971
,→ by Harvest Records.', 4.5,
,→ 'https://img.discogs.com/p68Oz1NzpkEJGvGkAphL-q2xYaw=/fit-in/599x596/filters:s
,→ '1971-10-31', 'Rock', 'Progressive');
23 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
24 ('Obscured By Clouds', 'UK', 'Obscured by Clouds is the seventh
,→ studio album by the English progressive rock band Pink Floyd,
,→ based on their soundtrack for the French film La Vallée, by
,→ Barbet Schroeder.', 4.14,
,→ 'https://img.discogs.com/Hq2Mf3qSQLd7Jqo43G4b3V_sQwY=/fit-in/600x603/filters:s
,→ '1972-06-02', 'Rock', 'Progressive');
25 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
26 ('The Dark Side of the Moon', 'UK', 'The Dark Side of the Moon is
,→ the eighth album by English rock band Pink Floyd, released on 1
,→ March 1973 by Harvest Records.', 4.69,
,→ 'https://img.discogs.com/jKTmuxcsYe2TqcahU3QqVXJLssU=/fit-in/600x600/filters:s
,→ '1973-03-01', 'Rock', 'Progressive');
27 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
28 ('Wish You Were Here', 'UK', 'Wish You Were Here is the ninth
,→ studio album by English rock band Pink Floyd. It was released on
,→ 12 September 1975 by Harvest Records in the United Kingdom and a
,→ day later by Columbia Records in the United States. The album
,→ topped record charts in both regions.', 4.71,
,→ 'https://img.discogs.com/T4T7uNgiBmcrWP1pfv7BLjdB7u4=/fit-in/600x600/filters:s
,→ '1975-09-12', 'Rock', 'Progressive');
29 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
30 ('Animals', 'UK', 'Animals is the tenth studio album by English
,→ rock band Pink Floyd. It was first released on 23 January 1977
,→ by Harvest Records in the United Kingdom and by Columbia Records
,→ in the United States.', 4.53,
,→ 'https://img.discogs.com/vBQw6Y9FESBtF8PRIQuw7rPVwxU=/fit-in/600x599/filters:s
,→ '1977-01-23', 'Rock', 'Progressive');
24
31 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
32 ('The Wall', 'UK', 'The Wall is the eleventh album by English rock
,→ band Pink Floyd. It was first released as a double album on 30
,→ November 1979 by Harvest Records in the United Kingdom and by
,→ Columbia Records in the United States.', 4.58,
,→ 'https://img.discogs.com/p7KdhxY0C7HGtAnIl53OTN0BvV4=/fit-in/588x600/filters:s
,→ '1979-11-30', 'Rock', 'Progressive');
33 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
34 ('The Final Cut', 'UK', 'The Final Cut is the twelfth studio album
,→ by the English progressive rock band Pink Floyd, released on 21
,→ March 1983 by Harvest Records in the United Kingdom and on 2
,→ April by Columbia Records in the United States.', 4.04,
,→ 'https://img.discogs.com/TsykxRFCikEaoQoyMl146goWmVs=/fit-in/600x636/filters:s
,→ '1983-03-21', 'Rock', 'Progressive');
35 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
36 ('A Momentary Lapse of Reason', 'UK', 'A Momentary Lapse of Reason
,→ is the thirteenth studio album by English progressive rock band
,→ Pink Floyd, released in the UK and US on 7 September 1987, on
,→ the labels EMI and Columbia.', 4.08,
,→ 'https://img.discogs.com/KiMEZISsXb2mzKySkXZR3NCkcrg=/fit-in/600x595/filters:s
,→ '1987-09-07', 'Rock', 'Progressive');
37 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
38 ('The Division Bell', 'UK', 'The Division Bell is the fourteenth
,→ studio album by the English progressive rock band Pink Floyd,
,→ released on 28 March 1994 by EMI Records in the United Kingdom
,→ and on 4 April by Columbia Records in the United States.', 4.4,
,→ 'https://img.discogs.com/wekpZfFF3c1tZw9thcrCQfGI_2w=/fit-in/600x596/filters:s
,→ '1994-03-28', 'Rock', 'Progressive');
39 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
40 ('The Endless River', 'UK', 'The Endless River is the fifteenth and
,→ final studio album by the English rock band Pink Floyd. It was
,→ released on 7 November 2014 in Friday-release countries and on
,→ 10 November elsewhere by Parlophone Records in the United
,→ Kingdom and by Columbia Records in the United States.', 4.0,
,→ 'https://img.discogs.com/4ygmwLbcph6oMUugL5pxq0VDRhA=/fit-in/600x630/filters:s
,→ '2014-11-07', 'Rock', 'Progressive');
41 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
25
42 ('American Idiot', 'UK', 'American Idiot is the seventh studio
,→ album by American rock band Green Day. Produced by Rob Cavallo,
,→ the album was released in the UK on September 20, 2004 and in
,→ the US on September 21, 2004 by Reprise Records', 3.5,
,→ 'https://images-na.ssl-images-amazon.com/images/I/51H6nwsp6QL.jpg',
,→ '2004-09-20', 'Pop', 'Punk');
43 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
44 ('Physical Graffiti', 'US', 'Physical Graffiti is the sixth studio
,→ album by the English rock band Led Zeppelin, released as a
,→ double album on 24 February 1975 by their newly founded imprint
,→ label Swan Song Records.', 4.8,
,→ 'https://upload.wikimedia.org/wikipedia/en/e/e3/Led_Zeppelin_-_Physical_Graffi
,→ '1975-02-24', 'Rock', 'Progressive');
45 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
46 ('Back in Black', 'Australia', 'Back in Black is the seventh studio
,→ album by Australian rock band AC/DC. Produced by Robert John
,→ "Mutt" Lange, the album was released on 25 July 1980 by Albert
,→ Productions and Atlantic Records.', 4.1,
,→ 'https://upload.wikimedia.org/wikipedia/pt/b/b6/Back_in_Black.jpg',
,→ '1980-07-25', 'Rock', 'Hard');
47 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
48 ('Still Not Getting Any...', 'Canada', 'Still Not Getting Any... is
,→ the second studio album by Canadian rock band Simple Plan. It
,→ was released on October 26, 2004 by Lava Records.', 3.7,
,→ 'https://upload.wikimedia.org/wikipedia/pt/1/12/StillNotGettingAny.jpg',
,→ '2004-10-26', 'Pop', 'Rock');
49 INSERT INTO album(nome, pais, descricao, avaliacao, capa,
,→ data_publicacao, genero1, genero2) VALUES
50 ('Ghost Stories', 'US', 'Ghost Stories is the sixth studio album by
,→ British rock band Coldplay. Co-produced by the band with Paul
,→ Epworth along with returning Mylo Xyloto producers Daniel Green
,→ and Rik Simpson, it was released by Parlophone on 16 May 2014.',
,→ 4.2,
,→ 'https://upload.wikimedia.org/wikipedia/en/8/8a/Coldplay_-_Ghost_Stories.png'
,→ '2014-05-16', 'Pop', 'Electronic');
51 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
52 ('Kill Em All', 'US', 4.52, '1983-01-01', 'Metal');
53 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
54 ('Ride The Lightning', 'US', 4.62, '1984-01-01', 'Metal');
55 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
26
56 ('Master of Puppets', 'US', 4.63, '1986-01-01', 'Metal');
57 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
58 ('...And Justice For All', 'US', 4.47, '1988-01-01', 'Metal');
59 INSERT INTO album(nome, pais,descricao, avaliacao, data_publicacao,
,→ genero1) VALUES
60 ('Metallica', 'US','Released on 12 Aug, 1991 by Elektra Records,
,→ commonly known as.. the Black Album, it became the bands
,→ best-selling album, certified 16× platinum by Riaa in 2012, and
,→ has sold over 16.000.000 copies in the United States. The snake
,→ in the artwork as well as the track "Dont tread on me" were
,→ inspired by a historical American flag, The Gadsden flag, which
,→ was designed in 1775. The cover is almost black, James Hetfield
,→ said "It was a simple black cover and you had to listen to the
,→ music. You wouldn’t be distracted by a drawing on the front." It
,→ is the album that shifted the band from Thrash to Heavy, also it
,→ attracted people to Metal that had little or anything to do with
,→ Metallica or Metal before in their life; but also vice versa for
,→ many of the ones that did.', 4.35, '1984-08-12', 'Metal');
61 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
62 ('Live Shit: Binge & Purge', 'US', 4.59, '1993-01-01', 'Metal');
63 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
64 ('Load', 'US', 3.92, '1996-01-01', 'Metal');
65 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
66 ('Reload', 'US', 3.78, '1997-01-01', 'Metal');
67 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
68 ('S&M', 'US', 4.03, '1999-01-01', 'Metal');
69 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
70 ('St. Anger', 'US', 3.54, '2003-01-01', 'Metal');
71 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
72 ('Death Magnetic', 'US', 4.0, '2008-01-01', 'Metal');
73 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
74 ('Quebec Magnetic', 'US', 4.45, '2012-01-01', 'Metal');
75 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
76 ('Through The Never', 'US', 4.29, '2013-01-01', 'Metal');
77 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
27
78 ('Liberté, Égalité, Fraternité, Metallica!', 'US', 4.16,
,→ '2016-01-01', 'Metal');
79 INSERT INTO album(nome, pais, avaliacao, data_publicacao, genero1)
,→ VALUES
80 ('Hardwired...To Self-Destruct', 'US', 4.31, '2016-01-01',
,→ 'Metal');
B.2 Bandas
28
12 ('Metallica', '1981-01-01', 'Metallica is an American heavy metal
,→ band from Los Angeles, California. The band was formed in 1981
,→ by drummer Lars Ulrich and vocalist/guitarist James Hetfield.
,→ The band''s fast tempos, instrumentals and aggressive
,→ musicianship made them one of the founding "big four" bands of
,→ thrash metal, alongside Megadeth, Anthrax and Slayer.',
,→ 'Metal');
13 INSERT INTO banda(nome, data_fundacao, descricao, genero1, genero2)
,→ VALUES
14 ('Lou Reed', '1942-03-02', 'Lewis Allan Reed (March 2, 1942 –
,→ October 27, 2013) was an American musician, singer and
,→ songwriter. He was the guitarist, singer, and principal
,→ songwriter for the rock band the Velvet Underground, with a solo
,→ career that spanned five decades.', 'Rock', 'Experimental');
15 INSERT INTO banda(nome, data_fundacao, descricao, genero1, genero2)
,→ VALUES
16 ('Green Day', '1987-10-17', 'Green Day is an American punk rock
,→ band formed in 1986 by lead vocalist and guitarist Billie Joe
,→ Armstrong and bassist Mike Dirnt.', 'Punk', 'Rock');
17 INSERT INTO banda(nome, data_fundacao, descricao, genero1, genero2)
,→ VALUES
18 ('Led Zeppelin', '1968-10-04', 'Led Zeppelin were an English rock
,→ band formed in London in 1968. The group consisted of guitarist
,→ Jimmy Page, singer Robert Plant, bassist and keyboardist John
,→ Paul Jones, and drummer John Bonham.', 'Rock', 'Metal');
19 INSERT INTO banda(nome, data_fundacao, descricao, genero1, genero2)
,→ VALUES
20 ('AC/DC', '1973-12-31', 'AC/DC are an Australian rock band, formed
,→ in Sydney in 1973 by brothers Malcolm and Angus Young. A hard
,→ rock/blues rock band, they have also been considered a heavy
,→ metal band.', 'Rock', 'Metal');
21 INSERT INTO banda(nome, data_fundacao, descricao, genero1, genero2)
,→ VALUES
22 ('Simple Plan', '1999-09-10', 'Simple Plan is a Canadian rock band
,→ from Montreal, Quebec. Simple Plan''s style of music has been
,→ described as emo, pop punk, alternative rock, pop rock, punk
,→ rock, and power pop', 'Rock', 'Pop');
23 INSERT INTO banda(nome, data_fundacao, descricao, genero1, genero2)
,→ VALUES
24 ('Coldplay', '1996-09-23', 'Coldplay are a British rock band formed
,→ in 1996 by lead vocalist and keyboardist Chris Martin and lead
,→ guitarist Jonny Buckland at University College London (UCL).',
,→ 'Rock', 'Pop');
29
B.3 Gravadoras
B.4 Versões
30
4 (509970405892, 1, 1, 'cd', 'remasterizada', 30.0, 0, 10, TRUE,
,→ '1998-01-01');
5 INSERT INTO versao VALUES
6 (093624953692, 5, 2, 'cd', 'original', 30.0, 20, 45, FALSE,
,→ '2011-10-31');
7 INSERT INTO versao VALUES
8 (082083054051, 2, 3, 'vinil', 'remasterizada', 70.0, 0, 15, FALSE,
,→ '1982-01-01');
9 INSERT INTO versao VALUES
10 (777746384400, 4, 1, 'cassete', 'remasterizada', 55.0, 3, 1, TRUE,
,→ '1994-01-01');
11 INSERT INTO versao VALUES
12 (066083075051, 6, 2, 'vinil', 'original', 15.0, 5, 5, FALSE,
,→ '1978-12-01');
13 INSERT INTO versao VALUES
14 (088069088046, 3, 4, 'vinil', 'original', 100.0, 1, 0, FALSE,
,→ '1967-05-26');
15 INSERT INTO versao VALUES
16 (089065088046, 7, 1, 'vinil', 'original', 70.0, 0, 3, FALSE,
,→ '1968-01-01');
17 INSERT INTO versao VALUES
18 (083072086076, 7, 5, 'vinil', 'remasterizada', 80.0, 1, 1, TRUE,
,→ '1974-01-01');
19 INSERT INTO versao VALUES
20 (049048067032, 8, 5, 'vinil', 'remasterizada', 120.0, 0, 0, FALSE,
,→ '1972-01-01');
21 INSERT INTO versao VALUES
22 (454736626271, 9, 5, 'vinil', 'aniversário', 55.0, 1, 5, TRUE,
,→ '1989-01-01');
23 INSERT INTO versao VALUES
24 (077774638623, 9, 5, 'cd', 'remasterizada', 80.0, 2, 1, FALSE,
,→ '1987-01-01');
25 INSERT INTO versao VALUES
26 (083072086076046, 10, 5, 'vinil', 'original', 60.0, 0, 0, FALSE,
,→ '1970-01-01');
27 INSERT INTO versao VALUES
28 (050060032050052, 11, 5, 'cassete', 'remasterizada', 80.0, 0, 1,
,→ FALSE, '1978-01-01');
29 INSERT INTO versao VALUES
30 (368746034200000, 11, 5, 'cd', 'remasterizada', 50.0, 0, 5, TRUE,
,→ '1988-01-01');
31 INSERT INTO versao VALUES
32 (083072083080032, 12, 5, 'vinil', 'original', 150.0, 0, 1, FALSE,
,→ '1972-06-03');
33 INSERT INTO versao VALUES
31
34 (083072086076032, 13, 5, 'vinil', 'original', 150.0, 1, 1, FALSE,
,→ '1973-01-01');
35 INSERT INTO versao VALUES
36 (083075080069045, 14, 5, 'cassete', 'original', 150.0, 0, 1, FALSE,
,→ '1975-01-01');
37 INSERT INTO versao VALUES
38 (053067032050054, 15, 5, 'cassete', 'original', 130.0, 2, 0, FALSE,
,→ '1977-01-01');
39 INSERT INTO versao VALUES
40 (087080067082045, 16, 4, 'vinil', 'remasterizada', 80.0, 0, 3,
,→ TRUE, '2014-01-29');
41 INSERT INTO versao VALUES
42 (032067075032052, 18, 1, 'cd', 'original', 60.0, 0, 5, FALSE,
,→ '1987-08-31');
43 INSERT INTO versao VALUES
44 (509974765812900, 19, 1, 'cd', 'original', 70.0, 1, 1, TRUE,
,→ '1994-01-01');
45 INSERT INTO versao VALUES
46 (888750078810000, 20, 1, 'vinil', 'original', 80.0, 10, 30, FALSE,
,→ '2014-01-01');
47 INSERT INTO versao VALUES
48 (189740034670000, 21, 2, 'cd', 'original', 55.0, 15, 40, FALSE,
,→ '2004-09-20');
49 INSERT INTO versao VALUES
50 (237847113580403, 21, 2, 'cd', 'aniversário', 80.0, 5, 20, FALSE,
,→ '2005-10-22');
51 INSERT INTO versao VALUES
52 (115487862100043, 22, 2, 'vinil', 'original', 140.0, 2, 5, FALSE,
,→ '1975-02-24');
53 INSERT INTO versao VALUES
54 (658431778950000, 23, 3, 'vinil', 'remasterizada', 70.0, 0, 2,
,→ FALSE, '1980-07-25');
55 INSERT INTO versao VALUES
56 (248764757003487, 24, 2, 'cd', 'aniversário', 40.0, 10, 10, TRUE,
,→ '2014-04-22');
57 INSERT INTO versao VALUES
58 (11887643480000, 25, 4, 'cd', 'original', 35.0, 5, 15, FALSE,
,→ '2014-05-16');
59 INSERT INTO versao VALUES
60 (077082073048054057, 26, 6, 'vinil', 'original', 325.75, 5, 20,
,→ FALSE, '1983-01-01');
61 INSERT INTO versao VALUES
62 (077082073055054057, 27, 6, 'vinil', 'original', 404.69, 5, 20,
,→ FALSE, '1984-01-01');
63 INSERT INTO versao VALUES
32
64 (05404805205105704504, 28, 7, 'vinil', 'original', 131.58, 5, 20,
,→ FALSE, '1986-02-21');
65 INSERT INTO versao VALUES
66 (05404805604905004504, 29, 7, 'vinil', 'original', 197.42, 5, 20,
,→ FALSE, '1988-09-06');
67 INSERT INTO versao VALUES
68 (05404904904905104505, 30, 7, 'cd', 'original', 6.78, 5, 20, FALSE,
,→ '1991-08-12');
69 INSERT INTO versao VALUES
70 (05404904904905104506, 31, 7, 'cassete', 'original', 45.67, 5, 20,
,→ FALSE, '1993-11-09');
71 INSERT INTO versao VALUES
72 (05404905705005104507, 32, 7, 'cd', 'original', 0.82, 5, 20, FALSE,
,→ '1996-05-04');
73 INSERT INTO versao VALUES
74 (05405004905005404508, 33, 7, 'cd', 'original', 4.94, 5, 20, FALSE,
,→ '1997-11-18');
75 INSERT INTO versao VALUES
76 (05405005205405104509, 34, 7, 'cd', 'original', 11.52, 5, 20,
,→ FALSE, '1999-11-23');
77 INSERT INTO versao VALUES
78 (05405005605305104510, 35, 8, 'vinil', 'original', 164.52, 5, 20,
,→ FALSE, '2003-01-01');
79 INSERT INTO versao VALUES
80 (00602517737266, 36, 8, 'vinil', 'original', 164.52, 5, 20, FALSE,
,→ '2008-09-09');
81 INSERT INTO versao VALUES
82 (0660760670750780680, 37, 9, 'cd', 'original', 26.29, 5, 20, FALSE,
,→ '2012-01-01');
83 INSERT INTO versao VALUES
84 (066076067075078068, 38, 9, 'cd', 'original', 26.29, 5, 20, FALSE,
,→ '2014-01-28');
85 INSERT INTO versao VALUES
86 (053052055056053055, 39, 9, 'cd', 'original', 26.29, 5, 20, FALSE,
,→ '2016-01-01');
87 INSERT INTO versao VALUES
88 (066076067075078068, 40, 9, 'cd', 'original', 26.29, 5, 20, FALSE,
,→ '2016-01-01');
B.5 Gravações
33
6 (3,4);
7 INSERT INTO gravacao VALUES
8 (4,2);
9 INSERT INTO gravacao VALUES
10 (5,6);
11 INSERT INTO gravacao VALUES
12 (5,7);
13 INSERT INTO gravacao VALUES
14 (6,3);
15 INSERT INTO gravacao VALUES
16 (7, 2);
17 INSERT INTO gravacao VALUES
18 (8, 2);
19 INSERT INTO gravacao VALUES
20 (9, 2);
21 INSERT INTO gravacao VALUES
22 (10, 2);
23 INSERT INTO gravacao VALUES
24 (11, 2);
25 INSERT INTO gravacao VALUES
26 (12, 2);
27 INSERT INTO gravacao VALUES
28 (13, 2);
29 INSERT INTO gravacao VALUES
30 (14, 2);
31 INSERT INTO gravacao VALUES
32 (15, 2);
33 INSERT INTO gravacao VALUES
34 (16, 2);
35 INSERT INTO gravacao VALUES
36 (17, 2);
37 INSERT INTO gravacao VALUES
38 (18, 2);
39 INSERT INTO gravacao VALUES
40 (19, 2);
41 INSERT INTO gravacao VALUES
42 (20, 2);
43 INSERT INTO gravacao VALUES
44 (21, 8);
45 INSERT INTO gravacao VALUES
46 (22, 9);
47 INSERT INTO gravacao VALUES
48 (23, 10);
49 INSERT INTO gravacao VALUES
50 (24, 11);
51 INSERT INTO gravacao VALUES
34
52 (25, 12);
53 INSERT INTO gravacao VALUES
54 (26, 6);
55 INSERT INTO gravacao VALUES
56 (27, 6);
57 INSERT INTO gravacao VALUES
58 (28, 6);
59 INSERT INTO gravacao VALUES
60 (29, 6);
61 INSERT INTO gravacao VALUES
62 (30, 6);
63 INSERT INTO gravacao VALUES
64 (31, 6);
65 INSERT INTO gravacao VALUES
66 (32, 6);
67 INSERT INTO gravacao VALUES
68 (33, 6);
69 INSERT INTO gravacao VALUES
70 (34, 6);
71 INSERT INTO gravacao VALUES
72 (35, 6);
73 INSERT INTO gravacao VALUES
74 (36, 6);
75 INSERT INTO gravacao VALUES
76 (37, 6);
77 INSERT INTO gravacao VALUES
78 (38, 6);
79 INSERT INTO gravacao VALUES
80 (39, 6);
81 INSERT INTO gravacao VALUES
82 (40, 6);
B.6 Contratos
35
C Código das consultas em SQL
36
41 TABLE (
42 cod_barras bigint,
43 nome varchar(40),
44 preco numeric
45 )
46 AS
47 $func$
48 BEGIN
49 RETURN QUERY
50 WITH t1 AS (SELECT versao.cod_barras, gravacao.cod_album,
,→ versao.preco FROM
51 gravacao NATURAL JOIN versao WHERE cod_banda =
,→ banda)
52 SELECT tf.cod_barras, tf.nome, tf.preco FROM
53 (t1 NATURAL JOIN album) AS tf
54 WHERE tf.preco = (SELECT MAX(t1.preco) FROM t1);
55 END
56 $func$ LANGUAGE plpgsql;
57
37
81 TABLE (
82 cod_barras bigint,
83 preco numeric
84 )
85 AS
86 $func$
87 BEGIN
88 RETURN QUERY
89 SELECT versao.cod_barras, versao.preco FROM
90 versao
91 WHERE cod_album = album AND promocao = TRUE;
92 END
93 $func$ LANGUAGE plpgsql;
94
38
123 SELECT album.cod_album, album.nome FROM
124 album
125 WHERE genero1 = genero OR genero2 = subgenero;
126 END
127 $func$ LANGUAGE plpgsql;
128
39
167 CREATE OR REPLACE FUNCTION get_by_type(banda int, tipo varchar(40))
,→ RETURNS
168 TABLE (
169 cod_barras bigint,
170 nome varchar(40),
171 preco numeric
172 )
173 AS
174 $func$
175 BEGIN
176 RETURN QUERY
177 SELECT tf.cod_barras, tf.nome, tf.preco FROM
178 (versao
179 NATURAL JOIN (SELECT t1.cod_album, album.nome FROM
180 (SELECT cod_album FROM
181 gravacao
182 WHERE cod_banda = banda) as t1
183 NATURAL JOIN album) AS t2) AS tf
184 WHERE tf.tipo_versao = tipo;
185 END
186 $func$ LANGUAGE plpgsql;
187
40
D Código do trigger em SQL
15 END IF;
16
17 END IF;
18 RETURN NEW;
19 END;
20 $$ LANGUAGE plpgsql;
21
41