ProjetoDeBandoDeDadosCompleto CDs
ProjetoDeBandoDeDadosCompleto CDs
ProjetoDeBandoDeDadosCompleto CDs
1.1. Cenário
CD: indica um único cd mas pode ser indicado por vários cds (1...n).
E, é produzido por uma única GRAVADORA enquanto esta detém a
possibilidade de gravar um ou mais cds (cardinalidade 1...n);
AUTOR: escreve uma ou mais MUSICAS, que por sua vez pode ser
composta por um ou mais autores (cardinalidade m...n).
MUSICA: pode estar gravada em um ou mais CDs, enquanto CD
deve conter uma ou mais músicas (cardinalidade m...n).
3. Modelagem Lógica
Figura 2: Modelo Relacional "Catálogo de CDs" feito por meio do MySQL Workbenck
Para entendermos o processo de transformação do modelo ER da
Figura 1 para o modelo Relacional da Figura 2, precisamos conhecer as
principais regras analisadas a seguir.
Basicamente, cada entidade é traduzida para uma tabela. Neste
processo, cada atributo da entidade define uma coluna desta tabela. Os
atributos identificadores da entidade correspondem às colunas que compõem a
chave primária da tabela. Analogamente, observamos, então, por exemplo que
a entidade CD se tornou uma tabela, e seus atributos foram mapeados como
colunas.
Além dessa regra, Heuser afirma que há três possibilidades de
conversão em se tratando de relacionamento binários entre entidades. A
primeira é a fusão de tabelas, ou seja, a união de todos os atributos de duas
entidades em uma única tabela, formando suas colunas; esta regra se aplica a
relacionamentos de cardinalidade um para um. Conforme visto, não aplicamos
esta regra, porque não houve ocorrência deste tipo de cardinalidade.
A segunda se refere aos relacionamentos de cardinalidade de um para
muitos. A regra definida para este caso é que há uma adição de coluna na
tabela que expressa cardinalidade maior (n). Observamos isto, por exemplo, no
relacionamento entre as tabelas CD e GRAVADORA, conforme analisamos,
uma GRAVADORA pode produzir vários CDs e um CD só pode ser gravado
por uma GRAVADORA, verificamos na Figura 2 que a chave primária de
GRAVADORA (idgrav), que possui a menor cardinalidade (1) se apresentou
como nova coluna na tabela CD como chave estrangeira. Essa mesma regra
se aplicou também ao autorrelacionamento um para muitos da tabela CD por
meio da chave estrangeira "idcdind" referente à chave primária "idcd".
A terceira possibilidade de tradução se aplica aos relacionamentos de
muitos para muitos. Neste caso, ou seja, quando duas entidades possuem uma
relação de muitos para muitos, durante a transformação ocorre a adição de
uma tabela intermediária que conterá as chaves primárias das duas tabelas
que se relacionam. Esta regra se reflete em dois casos: o relacionamento entre
CD e MUSICA provendo a implementação da tabela FAIXA e entre MUSICA e
AUTOR, gerando a nova tabela MUSICA_AUTOR.
Após essa fase, convém que documentemos textualmente os modelos
criados, a seguir explicamos como isso deve ser feito.
4. Dicionário de Dados
GRAVADORA
Chave Nome Classe TipoDeDados NN1 UQ2 BIN3 UN4 ZF5 AI6 Observação
PK7 idgrav Determinante Int
nomegrav Simples Varchar(45)
endereco Composto Varchar(45)
fone Multivalorado Varchar(15)
url Simples Varchar(45)
contato Simples Varchar(45)
CD
Chave Nome Classe TipoDeDados NN UQ BIN UN ZF AI Observação
PK idcd Determinante Int
1
NN: NOT NULL - campo não nulo ou obrigatório digitação
2
UQ: UNIQUE - campo único, evita repetição de valor
3
BIN: BINARY - contém cadeias binárias em vez de strings
4
UN: UNSIGNED - não permite números negativos
5
ZF: ZEROFILL - preenche espaços vazios da coluna com o número zero. Por exemplo, uma coluna que
é declarada como int(4) com a opção zerofill, o valor “5” é recuperado como “0005”
6
AI: AUTO_INCREMENT - incrementa sequencialmente um valor inteiro de um atributo. Ex: id = 1, 2, 3...
7
PK: PRIMARY KEY - é a chave primária obrigatória existência em todas as tabelas do modelo Relacional
8
FK: FOREING KEY - é a chave estrangeira proveniente de outra tabela com quem tem relacionamento
MUSICA
Chave Nome Classe TipoDeDados NN UQ BIN UN ZF AI Observação
PK idmus Determinante Int
FAIXA
Chave Nome Classe TipoDeDados NN UQ BIN UN ZF AI Observação
FK idcd Determinante Int
FK idmus Determinante Int
tempo Simples Decimal(6,2)
AUTOR
Chave Nome Classe TipoDeDados NN UQ BIN UN ZF AI Observação
PK idautor Determinante Int
MUSICA_AUTOR
Chave Nome Classe TipoDeDados NN UQ BIN UN ZF AI Observação
FK idmus Determinante Int
FK idautor Determinante Int
Segundo Heuser, uma forma normal (FN) é uma regra que deve ser
obedecida por uma tabela para que esta seja considerada “bem projetada”. As
principais formas normais são denominadas primeira, segunda, terceira e
quarta forma normal, abreviadamente 1FN, 2FN, 3FN e 4FN.
De acordo com Celso Henrique de Oliveira no livro SQL Curso Prático,
um modelo de dados estável pode ser garantido quando atingimos a terceira
forma normal (3FN). A normalização de tabelas tem como objetivo diminuição
ou a eliminação de redundâncias no banco de dados, que em geral, se alcança
com a criação de novas tabelas.
Uma tabela se encontra na primeira forma normal (1FN) quando só
possui atributos monovalorados e não apresentar tabelas aninhadas. Para
deixar nesta forma normal, é preciso identificar a chave primária da tabela,
identificar a(s) coluna(s) que tem(êm) dados repetidos e removê-la(s), criar
uma nova tabela com a chave primária para armazenar o dado repetido e, por
fim, criar uma relação entre a tabela principal e a tabela secundária.
Na segunda forma normal (2FN), quando a tabela se encontra na 1FN
e não possui dependências parciais, ou seja, todos os atributos não chaves da
tabela devem depender unicamente da chave primária. Para deixar nesta forma
normal, é preciso identificar as colunas que não são funcionalmente
dependentes da chave primária da tabela e, em seguida, remover essa coluna
da tabela principal e criar uma nova tabela com esses dados.
E, por fim, uma tabela se encontra na 3FN quando se encontra na 2FN
e por não possuírem dependências transitivas, ou seja, os atributos não chave
de uma tabela devem ser mutuamente independentes. Para atingir essa forma
normal, é preciso identificar as colunas que são funcionalmente dependentes
das outras colunas não chave e extraí-las para outra tabela.
Compreendidas essas regras, agora podemos analisar as tabelas de
nosso modelo.
Analisemos as tabelas a seguir:
GRAVADORA
CD
MUSICA
FAIXA
MUSICA_AUTOR
9
O erro de integridade referencial ocorre quando se tenta criar uma tabela2 cuja chave estrangeira é
referente a uma tabela1 ainda não criada. Por exemplo, executar o código de CD antes de GRAVADORA.
6.4. Dados da tabela CD
INSERT INTO CD (idcd, idgrav, nomecd, preco, datalanc )
VALUES ( 1, 1, 'Mais do Mesmo', 15.00, '1998-10-01' );
UPDATE CD SET idcdind = 1 WHERE idcd = 1;
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (1, 13, 13);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (1, 14, 14);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (1, 15, 15);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (1, 16, 16);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 1, 17);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 2, 18);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 3, 19);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 4, 20);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 5, 21);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 6, 22);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 7, 23);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 8 ,24);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 9, 25);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 10, 26);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 11, 27);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 12, 28);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 13, 29);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (2, 14, 30);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (3, 1, 31);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (3, 2, 32);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (3, 3, 33);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (3, 4, 34);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (3, 5, 35);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (3, 6, 36);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (3, 7, 37);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (3, 8 ,38);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (3, 9, 39);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (3, 10, 40);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 1, 41);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 2, 42);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 3, 43);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 4, 44);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 5, 45);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 6, 46);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 7, 47);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 8 ,48);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 9, 49);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 10, 50);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 11, 51);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 12, 52);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 13, 53);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (4, 14, 54);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 1, 55);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 2, 56);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 3, 57);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 4, 58);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 5, 59);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 6, 60);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 7, 61);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 8 ,62);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 9, 63);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 10, 64);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 11, 65);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 12, 66);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (5, 13, 67);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (6, 1, 68);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (6, 2, 69);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (6, 3, 70);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (6, 4, 71);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (6, 5, 72);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (6, 6, 73);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (6, 7, 74);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (6, 8 ,75);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (6, 9, 76);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (6, 10, 77);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 1, 78);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 2, 79);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 3, 80);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 4, 81);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 5, 82);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 6, 83);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 7, 84);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 8 ,85);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 9, 86);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 10, 87);
INSERT INTO FAIXA (idcd, idmus, numero) VALUES (7, 11, 88);
6.8. Dados da tabela MUSICA_AUTOR
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 1, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 2, 5 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 2, 6 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 3, 4 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 3, 5 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 3, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 4, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 4, 4 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 5, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 6, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 7, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 8, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 9, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 9, 4 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 9, 5 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 10, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 10, 4 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 10, 5 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 11, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 11, 4 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 11, 5 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 12, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 12, 4 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 12, 5 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 13, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 13, 4 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 13, 5 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 14, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 14, 4 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 14, 5 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 15, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 15, 4 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 15, 5 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 16, 1 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 16, 4 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 16, 5 );
INSERT INTO MUSICA_AUTOR (idmus, idautor ) VALUES ( 17, 2 );