Buscar

AULA 05 – Projeto Lógico e Abordagem Direta

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Perfil: 
Martin José Fagonde Morães. 
Possui Mestrado em Engenharia de Produção pela Universidade Federal 
de Santa Catarina – UFSC (2001), graduado em Processamento de Dados 
(1997). Atua como professor nos componentes curriculares de desenvolvimento 
de sistemas há mais de 15 anos. Foi coordenador de cursos de graduação e de 
pós-graduação. Atuou na área de TI por mais de 18 anos como: coordenador de 
TI, consultor e desenvolveu e implementou sistemas diversos sistemas. 
Currículo Lattes: http://lattes.cnpq.br/2746554350570335 
 
AULA 05 – Projeto Lógico e 
Abordagem Direta 
 
Introdução: 
No projeto lógico, organiza-se o resultado da modelagem conceitual, na 
forma que o SGDB entenda, na forma com que ele deve trabalhar os dados. 
O SGDB escolhido foi o MySQL, é relacional. Sendo assim, o modelo 
lógico que for construído tem de ser um modelo que atenda a abordagem 
relacional. 
Nesta unidade vamos trabalhar a converção do modelo conceitual 
apresentado na Figura 1 DER - Rede de Mensagens. Vamos construir um 
diagrama com a ferramenta MySQL Workbench. O diagrama resultante 
apresenta todas as informações que constam em um DER e todas as 
informações necessárias para o modelo lógico. 
 
Vamos começar conhecendo os principais tipos de dados (domínios) 
disponibilizados no SGDB MySQL. 
Contextualizando 
 
Tipo de Dados - MySQL 
As informações apresentadas neste tópico foram extraídas da 
documentação oficial do MySQL ( ORACLE. MySQL 5.7 Reference Manual. 
Disponível em: <http://dev.mysql.com/doc/refman/5.7/en/>. Acesso em: 12 out. 
2015). 
Neste contexto aparecerá alguns termos que são muito significativos. 
Vamos conhecê-los: 
UNSIGNED: É uma instrução utilizada juntamente com os tipos de dados 
(domínios) numéricos, para definir que o campo em questão não armazenará 
valores negativos. Isto faz com que aumente a capacidade do campo em 
armazenar os valores positivos. 
(1,1) 
(0,n) 
*e-mail 
Usuários 
nome 
Endereço 
Data cadastro 
id senha 
Mensagens 
texto 
imagem 
vídeo 
id 
Envia Grupo 
pertence 
outros 
(1,n) (1,1) 
(1,n) 
(1,n) 
Comentários 
texto Gostou id 
Recebe Faz 
(0,n) 
(1,1) 
(0,n) 
(1,1) 
Comentário do 
comentário 
Faz 
Recebe 
texto Gostou id 
(0,n) 
(1,1) 
Figura 1 DER - Rede de Mensagens. 
SIGNED: Por padrão, todos os tipos (domínios) numéricos são signed, 
esta instrução indica que o campo armazenará valores negativos. 
ZEROFILL: É uma instrução utilizada juntamente com os tipos de dados 
(domínios) numéricos, para definir que o campo em questão terá as casas da 
esquerda preenchidas com zero. Ex.: se a capacidade do domínio definido é de 
três casas e o valor armazenado for de uma casa, as outras duas casas a 
esquerda serão preenchidas com zero. 
NULL: É uma instrução utilizada juntamente com os tipos de dados 
(domínios) para definir que o campo pode ficar sem receber um valor. 
NOT NULL: É uma instrução utilizada juntamente com os tipos de dados 
(domínios) para definir que o campo NÃO pode ficar sem receber um valor. 
 
Tipos numéricos inteiros 
SERIAL 
É um alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT 
UNIQUE. 
Um campo que for definido com o tipo “serial” ele receberá as definições 
que o domínio será BIGINT, sem sinal, não pode ser null, o seu valor será 
automaticamente gerado e não se repetirá. 
Tabela resumo de inteiros 
A Tabela 1 mostra os principais domínios (tipos) inteiros do MySQL, com 
a respectiva capacidade. 
Tabela 1 - Tipos inteiros. 
Tipo Armazenado Mínimo Máximo 
 (Bytes) (Signed/Unsigned) (Signed/Unsigned) 
TINYINT 
 
1 -128 127 
 0 255 
SMALLINT 
 
2 -32768 32767 
 0 65535 
MEDIUMINT 
 
3 -8388608 8388607 
 0 16777215 
INT 
 
4 -2147483648 2147483647 
 0 4294967295 
BIGINT 
 
8 -9223372036854775808 9223372036854775807 
 0 18446744073709551615 
 
Tipos numéricos ponto flutuante 
Ao definir um campo do tipo numérico de ponto flutuante tem de indicar 
a precisão e a quantidade de casas decimais. A precisão é o total de casas, 
incluindo as casas decimais. 
 M – Indica o número total de dígitos, precisão. 
 D – Indica a quantidade de casas decimais, ou seja, depois da vírgula. Se D for zero (0) 
não terá casas decimais. 
 
Exemplo: salario Decimal (8,2). => 999999,99 
 Significa que salario será um número com um valor no máximo de oito caracteres 
sendo que dois destes serão de casa decimais. 
 
 DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] 
O valor máximo de M é 65. Se omitido o valor padrão é 10. 
Valor máximo para D é 30. Se omitido o valor padrão é zero (0) 
 
São sinônimos para o tipo DECIMAL os tipos: 
 DEC[(M[,D])] [UNSIGNED] [ZEROFILL], 
 NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], 
 FIXED[(M[,D])] [UNSIGNED] [ZEROFILL] 
 
 FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 
Permite valores de 3.402823466E+38 a -1.175494351E-38. 
Se M e D forem omitidos será armazenado até a capacidade permitida 
pelo hardware. 
Precisão de 7 casas decimais, aproximadamente. 
 
 DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 
Permite valores de -1.7976931348623157E+308 a -
2.2250738585072014E-308. 
Se M e D forem omitidos será armazenado até a capacidade permitida 
pelo hardware. 
Precisão de 15 casas decimais, aproximadamente. 
São sinônimos para o tipo DECIMAL os tipos: 
 DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], 
 REAL[(M,D)] [UNSIGNED] [ZEROFILL] 
 
Data e Horas 
Chamamos a atenção para o tipo TIMESTAMP, pois o mesmo leva em 
consideração o UTC - Coordinated Universal Time, Isto significa que a data e o 
horário armazenado será convertido conforme a configuração UTC da máquina 
em que está rodando. 
 
Tabela 2 Tipos de data e hora. 
TIPO TAMANHO EXEMPLO INTERVALO 
DATE 3 bytes 'YYYY-MM-DD' '1000-01-01' a '9999-12-31' 
TIME 3 bytes 'HH:MM:SS' '-838:59:59' a '838:59:59' 
DATETIME 8 bytes 'YYYY-MM-DD HH:MM:SS' '1000-01-01 00:00:00' 
a '9999-12-31 23:59:59' 
TIMESTAMP 4 bytes time zone to UTC time zone to UTC 
YEAR 1 byte 'YYYY' de 1901 a 2155 ou 0000 
 
Tipos String 
Os campos destes tipos armazenam todos os tipos de caracteres. Não 
permitem operações aritméticas com seus conteúdos. 
L representa o tamanho em byte padrão para o tipo. 
M representa a quantidade de caracteres definida para a coluna e para 
os tipos não binários, já para os tipos binários representa a quantidade de bytes. 
 
Tabela 3 - Tipos STRING. 
Tipo de dado Tamanho para armazenamento 
CHAR(M) M × w bytes, 0 <= M <= 255, onde w é o número de bytes 
necessários para o tamanho máximo de armazenamento 
de um caractere. 
BINARY(M) M bytes, 0 <= M <= 255 
VARCHAR(M), VARBINARY(M) L + 1 bytes se requerido de 0 − 255 bytes, 
L + 2 bytes se requerido mais que 255 bytes 
TINYBLOB, TINYTEXT L + 1 bytes, para L < 28 
BLOB, TEXT L + 2 bytes, para L < 216 
MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, para L < 224 
LONGBLOB, LONGTEXT L + 4 bytes, para L < 232 
 
Tipo BOOL, BOOLEAN 
O tipo boolean é sinônimo para TINYINT(1). O valor zero (0) é 
considerado “false” e um valor diferente de zero (0) é considerado “true”. 
 
Estudo de Caso: Rede de Mensagens 
Vamos converter o DER da modelagem da Rede de Mensagens, Figura 
1 DER - Rede de Mensagens. em um modelo lógico utilizando a ferramenta 
MySQL Workbench. 
O diagrama que será gerado na criação do modelo lógico atende as 
especificações da abordagem ER e as especificações da abordagem relacional. 
Com frequência estes diagramas são referenciados também como DER. 
Os relacionamentos estão indicados com linhas e as cardinalidades com 
a notação de Martin e Finkelstein, denominada“pés de galinha”, veja a 
equivalência entre as notações de cardinalidade na Figura 2 Equivalência entre 
notações. 
 
Figura 2 Equivalência entre notações. 
Descrição Notação Peter Chen Notação Martin e Finkelstein 
Mín. e Máx.: 1 | 
Mínima: 0 o 
Máxima: N 
 
Na notação Martin e Finkelstein o símbolo mais próximo a tabela é a 
cardinalidade máxima e o símbolo mais interno é a cardinalidade mínima. 
 
Convertendo a entidade Usuário 
A entidade é convertida em tabela, os atributos em campos, o atributo 
identificador é convertido em campo chave. Os nomes de cada elemento são 
adequados as especificações dos caracteres aceitos. 
 
 
 
Convertendo a entidade Mensagem 
A entidade é convertida em tabela, os atributos em campos, o atributo 
identificador é convertido em campo chave. Os nomes de cada elemento são 
adequados as especificações dos caracteres aceitos. 
Os atributos imagem e vídeo serão armazenados no campo “iva”, um 
acrônimo para Imagem, Vídeo e Áudio. Na especificação, no modelo conceitual, 
não indica a utilização de áudio. Considerando que o tipo que definimos para o 
campo comporta qualquer tipo de arquivo, vamos considerar no acrônimo o “a”. 
*e-mail 
Usuários 
nome 
Endereço 
Data cadastro 
id 
Figura 3 Entidade Usuário para Tabela usuario.. 
 
 
O relacionamento entre Usuários e Mensagens 
O relacionamento “envia” entre usuário e mensagens indica uma 
cardinalidade máxima de 1:n, para esta situação a recomendação é adicionar 
uma coluna em mensagem, para ser uma chave estrangeira referenciando o 
usuário que enviou a mensagem. 
Veja na Erro! Fonte de referência não encontrada., foi criada a coluna 
“usuario_idusuario” com a indicação de chave estrangeira. A indicação do 
relacionamento está apresentada pela linha que liga as duas tabelas e a 
representação da cardinalidade que estamos usando é a notação “pé de 
galinha”. 
 
Figura 5 Relacionamento envia mensagem 
 
 
Comentários da mensagem 
Vamos converter a entidade Comentários na tabela “comentario”. Para 
o atributo “Gostou” definimos o campo “gostou” do tipo boolean. O tipo boolen 
Figura 4 Entidade Mensagens para Tabela mensagem. 
com os seus três estados, será aplicado “true” para gostou, “false” para não 
gostou e o “null” para sem manifestação. 
 
 
 
 
 
 
 
 
Relacionamentos com “comentario” 
No relacionamento da tabela mensagem com a tabela comentario a 
cardinalidade máxima é 1:n, o indicativo é a criação de mais um campo na tabela 
comentário, para ser a chave estrangeira com o referido registro na tabela 
mensagem. O campo criado foi mensagem_idmensagem. 
No relacionamento da tabela usuario com a tabela comentario a 
cardinalidade máxima, também é 1:n, o indicativo é a criação de mais um campo 
na tabela comentário, para ser a chave estrangeira com o referido registro na 
tabela mensagem. O campo criado foi usuario_idusuario. 
 
Figura 7 Relacionamentos com comentário. 
 
Figura 6 Entidade Comentários na tabela comentario. 
Comentário do Comentário 
A entidade “Comentário do comentário” vamos converter em tabela 
“comentariodo”. Os atributos seguem as mesmas considerações para a tabela 
comentário. 
 
 
 
Relacionamentos com “comentariodo” 
Os relacionamentos e as cardinalidades mantem-se, seguem os 
mesmos princípios. Considerando que as duas cardinalidades máximas são 1:n 
foram criados dois campos para serem chaves estrangeiras, um para comentário 
e outro para o usuário que fez o comentário do comentário. 
Figura 9 Relacionamentos do comentáriodo. 
 
Figura 8 Entidade comentário do comentário em tabela comentariodo. 
Identificando os usuários do mesmo grupo. 
O relacionamento de usuários com usuários, onde um usuário pode estar 
relacionado a vários outros usuários e que os outros usuários podem estar 
relacionados a vários usuários, nos dá um relacionamento com cardinalidade 
n:n, o indicado é a criação de uma nova tabela, vamos criar a tabela “grupo”. 
Todo novo usuário tem a obrigatoriedade de estar em um grupo, seu 
próprio grupo. 
Figura 10 Grupo usuários. 
 
 
 
Pesquisa 
Agora que acabou de ver a criação de um modelo lógico, identifique 
conversando com profissionais da área, representações de modelo lógico e 
identifique as notações de cardinalidade e os efeitos das chaves estrangeiras. 
Trocando Ideias 
Compartilhe com os colegas, através do fórum, suas observações e 
conclusões quanto as chaves estrangeiras e as cardinalidades nas situações 
que você identificou. 
Síntese 
O modelo lógico criado com estas notações, permite uma visualização 
clara e limpa, mantendo as representações das cardinalidades, os tipos dos 
dados para cada campo, as tabelas/entidades existentes e outros recursos 
fundamentais. Esta notação também permite uma visualização com as 
características de um DER. 
Os tipos de dados do MySQL são muito semelhantes a outros SGDB, 
com isto o modelo lógico construído pode ser implementado em diferentes 
SGDB. 
Com habilidades bem desenvolvidas e utilizando ferramentas como 
MySQL WorkBench, muitos profissionais implementam a modelagem conceitual 
e lógica na mesma etapa e obtendo resultados muito bons. 
Compartilhando 
Considere o contexto do ensino superior de matrículas, professores, 
componentes curriculares, períodos e etc., e utilizando o MySQL WorkBench 
faça a modelagem conceitual e lógica na mesma fase. Apresente-o para um 
colega e juntamente validem o modelo. 
 
Referências 
HEUSER, Carlos Alberto (Org.). Projeto de banco de dados. 6. ed. Porto Alegre (RS): Bookman, 
2009.xii, 282. 
KROENKE, David M. (Org.). Banco de Dados: Fundamentos, Projeto e Implementação. 6. ed. 
Rio de Janeiro - RJ: LCT, 1999.

Outros materiais