Hoje vamos falar um pouco sobre DER ou do inglês ERD Entity Relationship Model.
Afinal você sabe o que é? Para que serve? Qual a finalidade? E por que ele te ajuda?
Vamos trilhar o caminho do conhecimento e juntos descobrir mais sobre o DER.
Representação gráfica de fatos, fenômenos, pensamentos, etc... Um esquema que utiliza gráfico para entender fatos, fenômenos ou idéias.
Aquilo que constituí a existência de algo real; essência.
Ação de se relacionar ou em outras palavras estabelecer relação ou analogia entre coisas diferentes.
E quando juntamos tudo isso o que temos?
Estabelecimento de relações ou analogias entre entidade “essência de algo real” representado em gráficos de fatos, fenômenos e afins.
É feito entrevistas com usuários para entender o funcionamento do negócio e documentar os requisitos de dados de maneira completa e detalhada.
Exemplo
Você foi convidado para participar dum projeto para a captura de subscribers em um sistema de landing pages já existentes.
Nessa etapa é construído projeto ou esquema conceitual de alto nível a partir dos requisitos levantados na etapa anterior, que já contém principais objetos e relacionamentos entre eles.
No DER conceitual existem três elementos essenciais: entidades, relacionamentos e atributos.
Entidades
São representadas por um retângulo, e representa como dito anteriormente essência de algo que existe, no nosso caso por exemplo subscribers seria uma entidade.
Relacionamentos
Relação ou analogia entre coisas diferentes.
Representado por um losango no DER conceitual, ligado as entidades.
Atributos
Os atributos são representados por pequenas bolinhas, quando preenchida representa a chave primária da tabela.
O modelo conceitual garante que toda a estrutura necessária e o entendimento da mesma seja garantido, quando bem feito a conversão para o modelo lógico é extremamente simples, porém em alguns casos é possível utilizar atributos n-ários no conceitual que eventualmente se torna uma tabela no modelo lógico.´
O projeto físico engloba detalhes do banco de dados, como tipos de atributos, chaves primária, estrangeira, indexes e afins.
Ao iniciar o modelo físico deve-se preocupar com o banco de dados a ser utilizado, uma vez que por mais que hoje tem muitas similaridades, mas sempre tem diferenças e estruturas singulares que funcionam somente em um e no outro não e afins.
O modelo conceitual anterior se torna um modelo como esse já regras formais, virando o seguinte código SQL.
CREATE TABLE landing_page
(
id INT PRIMARY KEY,
);
CREATE TABLE campaign
(
id INT PRIMARY KEY,
title VARCHAR(n) NOT NULL DEFAULT '100',
);
CREATE TABLE subscribers
(
id INT PRIMARY KEY,
name VARCHAR(n) NOT NULL DEFAULT '60',
email VARCHAR(n) NOT NULL DEFAULT '60',
idlanding_page INT,
);
CREATE TABLE landing_page_campaign
(
idcampaign INT,
idlanding_page INT,
);
ALTER TABLE subscribers ADD FOREIGN KEY(idlanding_page) REFERENCES landing_page (idlanding_page)
ALTER TABLE landing_page_campaign ADD FOREIGN KEY(idcampaign) REFERENCES campaign (idcampaign)
ALTER TABLE landing_page_campaign ADD FOREIGN KEY(idlanding_page) REFERENCES landing_page (idlanding_page)
O banco de dados está na primeira forma normal se e somente se todos os atributos contiverem apenas dados atômicos. Atributos normalmente conhecidos como colunas em tabelas, deve conter somente dados atômicos evitando-se utilização de armazenamento em JSON e afins, especialmente em banco de dados que não suporta, porém mesmo aqueles cujos quais o suportam deve-se agir com bastante cautela uma vez que um JSON em uma tabela pode se tornar um verdadeiro pesadelo em desempenho e relações.
Para estar na Segunda forma normal é necessário estar na primeira forma normal e se somente se todos os atributos não chave primária puderem ser obtidos da combinação de todos os atributos que formam a chave primária.
Imagine uma tabela que simultaneamente fala sobre Banco e agência, e que para cada tuple “linha” tiver nome do banco e nome da agência simultaneamente com seus respectivos códigos, veja quando quiser resgatar somente o nome do banco com sua respectiva chave primária não seria possível uma vez que a tabela estaria desnormalizada, para normaliza-la seria necessário nesse exemplo criar 2 tabelas, uma que falasse sobre banco e outra que fala sobre agência.
Para estar na Terceira forma normal, precisa estar na segunda forma normal e se nenhuma coluna não-chave depender de outra coluna não chave.
Imagine uma coluna de produtos de uma venda onde você tem quantidade e valor, a multiplicar quantidade e valor e criar uma nova coluna, essa nova coluna está fora da terceira forma normal, em alguns casos a desnormatização é aceita pra incrementação de performance, um exemplo de desnormatização é quando se faz um datawarehouse usando formato estrela.
Existem outras formas normais como a quarta forma normal, a quinta forma normal e a forma normal de Boyce e Codd, mas explicarei sobre isso em outra oportunidade.
Indica que uma entidade se relaciona de alguma forma com outra entidade. Representa, portanto a forma como 2 entidades se relacionam.
Subscribers se relaciona de forma binária com a entidade landing_page.
Indica que uma entidade se relaciona de alguma forma com outras 2 entidades. Representa portanto, a forma como três entidades se relacionam.
Vamos supor que temos a entidade funcionário e a entidade empresa onde um funcionário pode pertencer a várias empresas, nesse caso teríamos uma terceira entidade relacionando ambas por exemplo funcionários_empresa.
O conceito de generalização / especialização atribuí outra propriedade as entidades.
A partir desse conceito é possível atribuir propriedades particulares a um subconjunto das ocorrências especializadas de uma entidade genérica.
Vou da um exemplo somente no mundo textual.
Imagine que você queira fazer um diagrama mais elaborado para Pessoa, focada somente no Brasil, você poderia ter uma entidade genérica chamada Pessoa, que nela tem o id, nome e qual sua especialização, e dados comuns, e especializar com 2 tabelas adjacentes, pessoa física e pessoa jurídica, cada uma recebendo seus atributos exclusivos como cpf, cnpj e afins, e herdando os dados genéricos que ambos podem ter da tabela pessoa.
O mundo relacional é extremamente extenso e complexo, esse é um artigo bem introdutório pra iniciarmos sobre esse mundo, em breve estarei trazendo mais informações sobre isso, trends no twitter e afins.
Deixem nos comentários sugestões para outros temas, se te ajudou compartilhe e ajude outros.
Agradeço desde já e nos vemos no próximo artigo.
Seja o primeiro a comentar o nosso artigo!