Baixe o app para aproveitar ainda mais
Prévia do material em texto
NÍVEL Graduação DISCIPLINA Banco de Dados PROFESSOR Martin José Fagonde Morães Conversa Inicial Olá! Seja bem-vindo ao quinto encontro da disciplina Banco de Dados! Na aula de hoje, iremos trabalhar com o chamado projeto lógico, no qual daremos enfoque para a implementação e manipulação dos dados, além de trabalharmos também com a abordagem direta, que envolverá o SGBD MySQL, entidades X tabelas, relacionamentos e cardinalidades. Pronto para começar? Vamos lá! Contextualizando É no projeto lógico que se organiza o resultado da modelagem conceitual, sob uma perspectiva que o SGDB entenda e possa trabalhar com os dados. O SGDB escolhido foi o MySQL, que é relacional. Sendo assim, o modelo lógico que for construído deve ser um modelo que atenda a abordagem relacional. Nesta unidade, vamos trabalhar a conversão do modelo conceitual apresentado no esquema a seguir (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. Pesquise Projeto Lógico e Abordagem Direta Tipos de dados - MySQL Vamos começar conhecendo os principais tipos de dados (domínios) disponibilizados no SGDB MySQL. Confira a seguir alguns termos importantes dos dados MySQL: 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 valores positivos. 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 em conjunto 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. Por exemplo: se a capacidade do domínio definido é de três casas e, o valor armazenado for de uma casa, as outras duas casas que estão à 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 campo que for definido com o tipo “serial” receberá as definições informando que o domínio será BIGINT, sem sinal, não pode ser null e o seu valor será automaticamente gerado e não se repetirá. Tabela resumo de inteiros A tabela a seguir mostra os principais domínios (tipos) inteiros do MySQL, com a respectiva capacidade. Tipos numéricos ponto flutuante Ao definir um campo do tipo numéricos de ponto flutuante deve indicar a precisão e a quantidade de casas decimais. A precisão é o total de casas, incluindo as decimais. M – Indica o número total 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: salário decimal (8,2). => 999999,99 Significa que salário 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. 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”. 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 Preste atenção no tipo TIMESTAMP, pois leva em consideração o UTC – Coordinated Universal Time, isto significa que a data e o horário armazenado serão convertidos conforme a configuração UTC da máquina em que está rodando. Confira a seguir uma tabela com os tipos de data e hora: Tipos String Os campos destes tipos armazenam todos os tipos de caracteres e 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, para os tipos binários representa a quantidade de bytes. Estudo de Caso: Rede de Mensagens Vamos converter o DER da modelagem 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 Erro! Fonte de referência não encontrada. 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 e os nomes de cada elemento são adequados às especificações dos caracteres aceitos. Observe a seguir os esquemas que demonstra a entidade usuário para a tabela usuário. 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 às 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 do modelo conceitual não é indicada 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”. Clique para conferir a exemplificação: O relacionamento entre Usuários e Mensagens O relacionamento “envia” que é realizado 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 com o objetivo de ser uma chave estrangeira referenciando o usuário que enviou a mensagem. Na figura que será apresentada no botão a seguir, 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 dacardinalidade que estamos usando é a notação “pé de galinha”. 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 em seus três estados, será aplicado “true” para gostou, “false” para não gostou e “null” para quando não houver manifestação. Relacionamentos com “comentariodo” Os relacionamentos e as cardinalidades se mantêm e seguem os mesmos princípios. Considerando que as duas cardinalidades máximas são 1:n, foram criados dois campos para serem chaves estrangeiras, uma para comentário e outra para o usuário que fez o comentário do comentário. Confira: Identificando os usuários do mesmo grupo O relacionamento entre usuários no qual um ou vários usuários podem estar relacionado à vários outros usuários nos dá um relacionamento com cardinalidade n:n, o mais indicado será a criação de uma nova tabela, a seguir, vamos criar a tabela “grupo”. Todo usuário tem a obrigatoriedade de estar em um grupo, ou seja, seu próprio grupo. Observe: Trocando ideias Agora, que você acabou de conferir a criação de um modelo lógico, converse com profissionais da área e identifique as notações de cardinalidade e os efeitos das chaves estrangeiras. Compartilhe com colegas, através do fórum da disciplina, as suas observações e conclusões quanto às chaves e cardinalidades nas situações que você identificou. Na Prática No material online, você poderá acompanhar as videoaulas preparadas pelo professor Martin, não deixe de conferir! Síntese O modelo lógico permite uma visualização clara e limpa, mantendo as representações das cardinalidades, os tipos de 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 utilizado ferramentas como MySQL WorkBench, muitos profissionais implementam a modelagem conceitual e lógica na mesma etapa, obtendo resultados muito bons! Até a próxima (e última) aula! Rota Referências HEUSER, C. A. (Org.). Projeto de Banco de Dados. 6. ed. Porto Alegre: Bookman, 2009. xii, p. 282. KROENKE, D. M. (Org.). Banco de Dados: Fundamentos, Projeto e Implementação. 6. ed. Rio de Janeiro: LCT, 1999.
Compartilhar