Académique Documents
Professionnel Documents
Culture Documents
Os modelos de dados são ferramentas que permitem demonstrar como serão construídas as estruturas
de dados que darão suporte aos processos de negócio, como esses dados estarão organizados e quais os
relacionamentos que pretendemos estabelecer entre eles.[1]
A abordagem que se dispensa ao assunto normalmente atende a três perspectivas:
Modelagem Conceitual: é usada como representação de alto nível e considera exclusivamente o ponto de
vista do usuário criador dos dados;
Modelagem Lógica: agrega mais alguns detalhes de implementação.
Modelagem Física: demonstra como os dados são fisicamente armazenados.
Modelagem Dimensional
Os dados normalizados estão na terceira forma normal, utilizada em banco de dados relacional. Se você
fez alguma faculdade em TI, provavelmente aprendeu sobre esse tipo de modelagem.
Eles permitem um armazenamento consistente e acesso eficiente aos dados. Essa forma reduz a
redundância de dados e as chances de inconsistência. Esse estilo de banco tem como foco inserir, alterar e
deletar os dados.
Em um banco normalizado, ou relacional, temos diversas tabelas, cada uma com sua chave primária e
informações. Por exemplo, temos uma tabela “cidade” com o ID da cidade e o nome dela, e outra tabela “cliente”
com o ID do cliente, o nome dele e a cidade onde mora. Mas nesse último item, ao invés de termos o nome da
cidade registrado, temos o ID referente àquela cidade na tabela “cidade”.
Isso serve para evitar a redundância, evitando a repetição do mesmo nome diversas vezes e garantindo
que o nome da cidade estará escrito sempre da mesma forma para todos os clientes.
No caso dos dados desnormalizados, nós temos o nome da cidade registrado na tabela de clientes, uma
vez para cada cliente que morar naquela mesma cidade, o que aumenta muito o tamanho do banco e não garante
tanta consistência dos dados.
Num modelo transacional, ou sistema operacional, você tem que ter integridade dos dados, eles não
podem se repetir. Já no modelo dimensional, eles podem. Na verdade, eles devem.
Os mesmos dados se repetem em vários lugares, porque nesse caso ele é desenhado para melhorar o
desempenho das consultas, porque o Data Warehouse é feito para consulta, enquanto o operacional é feito para
transação.
Star schema ou esquema estrela, idealizado por Ralph Kimball, é o modelo mais utilizado
na modelagem dimensional para dar suporte à tomada de decisão e melhorar a performance de
sistemas voltados para consulta.
O esquema estrela é composto no centro por uma tabela fato, rodeada por tabelas de dimensão,
ficando parecido com a forma de uma estrela. A ideia é propor uma visão para modelagem de base
de dados para sistemas de apoio à decisão, que é o caso do Data Warehouse.
As metodologias usadas para criação de Data Warehouse são Star Schema e Snowflake, que é
defendido pelo Bill Inmon.
O Snowflake também é projetado para suportar tomada de decisão, mas economizando espaço
em disco. Para o Star Schema, o Snowflake é apenas mais um tipo de dimensão.
Embora o Star Schema ocupe mais espaço em disco, ele é mais fácil de implementar e acabou
sendo mais utilizado porque além de hoje em dia o espaço ser muito barato, ele permite entregar
projetos por pedacinhos. Você pode criar um assunto ou departamento em uma estrela para só depois
projetar outro, e assim por diante.
Na maioria esmagadora dos projetos, Star Schema é uma excelente escolha.
Tabela Fato
A tabela fato armazena o que ocorreu, é o fato propriamente dito, por isso ela tem esse
nome, porque é o fato ocorrido. A tabela fato está sempre ligada a duas ou mais dimensões, não existe
tabela fato com menos de duas dimensões.
A fato é a principal tabela do Data Warehouse, e você pode ter uma ou mais tabelas fato.
Essa tabela armazena 2 coisas:
Os fatos ocorridos, ou seja, as métricas
As chaves para as dimensões
Ou seja, a fato é composta por alguma métrica e os códigos das dimensões.
E o que é métrica?
Métrica é também chamada de quantificador ou medida. Alguns chamam de KPI, mas KPI
também pode ser considerado um cálculo entre duas métricas.
Elas são utilizadas para metrificar algo e sempre são números, porque precisam ser
contáveis. Esses números são provenientes de transações da empresa.
Por exemplo:
Hoje eu tomei 5 cafés
Dá para fazer uma análise com ela, por exemplo, no tempo: nos últimos 30 dias, que dias eu tomei
mais café?
Tudo que a empresa for mensurar é uma métrica. Na maioria das vezes, a métrica vai ser o que o
usuário quer medir.
Pergunta para o usuário: o que tu quer medir, que informação quer ver na tela?
Normalmente o cara vai responder: quero ver as vendas, meus seguidores no twitter, quanto que a
gente tem de fluxo de caixa etc…
Você identifica muito fácil quais são as métricas só com essas perguntas.
Tabela dimensão
Dimensão, também chamado de qualificador, descreve o fato ocorrido, ela contém as características
do evento.
Por exemplo, quando eu faço uma venda, quero saber por onde a venda foi feita, que produto foi
vendido ou para quem.
Elas vão qualificar, classificar ou descrever os dados que estão nas fatos, ou seja, as métricas.
Para identificar as dimensões, normalmente perguntamos pelo que o usuário quer mensurar uma
informação. Elas vão ser todas e qualquer informação que qualifique uma métrica ou medida.
Por exemplo:
Preciso medir as vendas.
Ótimo, mas pelo quê?
Pela empresa / pelo produto / pelas filiais / por dia
Você também pode usar a pergunta de quais filtros o usuário gostaria de ter naquela visão.
Por que filtros?
Imagina que você tem uma tela com um menuzinho e o usuário pode escolher: eu quero um relatório
por produto.
Aí ele clica naquela setinha e tem a lista de todos os produtos. Ele seleciona um deles e mostra um
gráfico com as vendas só de tênis, por exemplo.
Esses filtros na maioria dos casos vão ser as dimensões. E embora nem todo filtro seja uma dimensão,
podem ser dimensões candidatas, que ainda não foram colocadas no modelo mas são candidatas a se
tornar dimensões.
O quê?
Para ser rápida, a fato só armazena os número brutos. O atributo é o que qualifica as métricas, porque
elas jogadas lá na fato sozinhas não servem de nada, não dá para tomar decisão nenhuma.
Os atributos podem ser campos como cidade, estado, país etc.
Quanto às chaves, a Surrogate Key é uma Primary Key na dimensão. É uma chave artificial auto
incremental, ou seja, toda vez que ela é chamada, adiciona um número e vai somando.
Já a Natural Key é a Primary Key daquele dado na origem ou legado, é o que você vai usar para
identificar de onde aquele dado veio.
Hierarquia é o conjunto de atributos que possui uma ordem lógica do maior ao menor nível.
A hierarquia balanceada, que é a mais utilizada, é qualquer classificação que tenha como base as
relações entre superiores e dependentes.
Por exemplo, do avô ao neto ou do general ao soldado.
Ela requer sempre uma relação de pai-filho, onde o superior pode ter zero, um ou muitos dependentes,
mas os dependentes devem ter um e um único superior.
A hierarquia existe apenas nas dimensões, porque a métrica é só um valor, e quem vai dizer se esse
valor está correspondendo a um determinado nível da hierarquia é o atributo.
O comum é existir apenas uma hierarquia por dimensão, mas pode existir múltiplas se for necessário.
Grão
O grão, também chamado de detalhe, é o menor nível da hierarquia da dimensão. É a informação
base, o menor detalhe da informação.
É extremamente importante entender o que é o grão e como definir ele, porque se for mal planejado,
vai acabar com todo o projeto.
Mas o que é esse grão?
Em uma dimensão de tempo, nós podemos ter uma hierarquia com ano, mês e dia. O dia é o menor
nível, isso é o grão.
Em uma dimensão com diretoria, gerência, departamento e pessoa, a pessoa é o menor nível de
detalhamento.
E por que é tão importante?
Ele é o nível mais atômico, o mais detalhado, e é no nível mais atômico em que será armazenada a
informação, sem a oportunidade de “descer” mais um nível.
Imagina que o mês seja meu grão. Nesse caso, só posso contemplar ano e mês. Se depois lá na frente
perceber que preciso descer para dia, não vai dar.
Aí precisa mexer em tudo, refazer as cargas e rever todo o modelo, porque o grão parou no mês.
Você precisa identificar qual o menor dado necessário, porque quanto menor for o nível do grão, mais
ETL terá para fazer e mais demorado será, então não adianta colocar sempre o menor possível para
tentar evitar o erro.
Depois que você definiu suas dimensões, vai fazer um join com a tabela fato. É nesse momento
que a Foreign Key da fato vai lá e conecta na Surrogate Key da dimensão.
Fica assim:
Agora você sabe que aquele “200,00”, que é a métrica, pertence ao produto de chave “2” na dimensão
de produto.
E assim você vai pegando as Surrogate Keys de todas as dimensões e dando sentido àquela métrica
na tabela fato.
É importante você entender todos esses conceitos antes de começar a pôr a mão na massa, pois mesmo
utilizando ferramentas, você ainda vai precisar entender a teoria para modelar o Star Schema.
Então primeiro entende bem essa parte que no próximo post vou aprofundar um pouco mais no
assunto e trazer um passo a passo para a criação do Data Warehouse.
O Agile Data Warehouse Design é uma metodologia de desenvolvimento ágil para criação
de Data Warehouse.
A ideia é diminuir as horas e horas de reuniões improdutivas e focar no que realmente
precisamos levantar para desenhar o Data Warehouse.
Mas vamos por partes.
Hoje em dia mais ninguém tem tempo para esperar. E se para nós é assim, imagina para o
cliente que precisa tomar uma decisão e não tem os benditos dados que precisa?
1. O cara não está disposto a esperar 1 ano até o Data Warehouse estar pronto
2. Ele não vai ter tempo para fazer todas as milhares de reuniões que você precisa
Fica assim:
A aparência é amigável e com perguntas que os Key Users estão acostumados a ver no dia
a dia.
Lembra sempre que a obrigação da tomada de decisão correta é sua. Embora o cliente deva
saber o que ele quer, você, como consultor, tem que saber extrair as melhores respostas.
Por mais que a criação de um Data Warehouse pareça simples ou cotidiana para você, para
o cliente não é, então ele nem sempre vai saber te dar as melhores respostas.
Eu sempre compartilho o próprio mapa mental online com o cliente, assim não precisa estar
todo mundo junto naquelas benditas reuniões que é sempre difícil de colocar todo mundo
no mesmo lugar no mesmo horário.
A sacada é que as pessoas recebam esse mapa primeiro, antes da reunião, para começar a
entender o que você precisa. Assim, elas mesmas já podem começar a preencher algumas
informações direto no mapa mental.
Vai tentar pegar o tempo do VP, diretor financeiro ou gerentes, os caras estão sempre
correndo. Aí você compartilha uma ferramenta assim, bem simples. Já peguei vários clientes
que entre uma reunião e outra abriam o aplicativo, davam uma olhada, comentavam alguma
coisa e viam o que o resto do time já tinha colocado.
Então todo mundo estava olhando a mesma coisa e sem nenhuma reunião até agora.
Quando você finalmente for fazer a reunião, pode abrir esse mesmo mapa mental que já
está com as respostas do pessoal e começar a bater as perguntas. E mesmo que não dê
tempo de todos preencherem tudo, pelo menos já vão saber do que se trata, não vão estar
tão confusos na reunião. A gente trabalha com pessoas, precisamos entender isso. Aí na
reunião você começa a passar as perguntas uma a uma.
Eu coloquei as perguntas na ordem que eu prefiro fazer, porque foi a ordem que identifiquei
ser a melhor nos projetos que usei essa estratégia. Mas é claro, você pode trocar para como
fizer mais sentido no seu projeto.
Algumas perguntas não fazem sentido para determinados tipos de negócio e vai ter outras
que o cliente realmente não quer porque não interessa para ele, então tem coisas que você
pode pular sem problema nenhum.
#2 When – quando?
Template: Aconteceu _________. Quando?
Aconteceu uma venda. Quando? 31/02/2017
#3 Where – onde?
Template: Aconteceu _________. Onde?
Aconteceu uma venda. Onde? Na loja de São Paulo
#4 Who – quem?
Nesse podemos ter várias interpretações. Você precisa entender o conceito e então ir
colocando de acordo com o negócio em questão. “Quem” é a pessoa envolvida, e ela
pode estar envolvida com o fato em papéis diferentes.
Alguns exemplos:
Template:
Aconteceu _________. Para quem?
Aconteceu _________. Quem fez?
Aconteceu _________. Quem entregou?
Para quem foi a venda? Pro Piton
Quem fez a venda? Vendedora Joana
Quem entregou? TNT Transportadora Mercúrio
#5 How – como?
Aqui a frequência é diferente da data, porque a data é quando cada uma das vendas
aconteceu, e a frequência mostra o espaço de tempo entre elas.
Com a frequência, a gente consegue saber qual a periodicidade da carga, com que
frequência vai precisar carregar os dados.
E OS OUTROS 20%?
Agora você precisa definir as dimensões e seus atributos.
Mas é muito simples fazer isso já tendo o mapa preenchido dessa forma. É diferente de
quando você começa um projeto e vai pensando em dimensão por dimensão e perdendo
um baita tempo em entrevistas.
Agora imagina que você já tem todas essas informações e os envolvidos do fato que
aconteceu presentes.
Quando aconteceu uma venda, quem são os envolvidos na venda? O time de
marketing, time de vendas, talvez o time financeiro também faça alguma parte.
Agora, sua missão é: depois que toda essa galera estiver reunida e entender o conceito
desse mapa mental, cada um pode colocar o que entende disso para então chegar em um
consenso.
MÉTRICA ADITIVA
São as métricas que permitem operações matemáticas como soma e subtração por todas as dimensões.
Dentro da fato há diversas linhas, e as métricas aditivas devem poder somar todas elas. É obvio,
todas podem ser somadas se eu quiser, mas ela precisa fazer sentido.
MÉTRICA DERIVADA
É uma métrica calculada, uma métrica que você calcula para ter um segundo número. Esse cálculo é
sempre em cima de métricas que já estão na fato, não no que está no legado.
São métricas que já estavam na fato e que são calculadas, criando uma nova métrica, que chamamos
de derivada.
Exemplo de métrica derivada:
Nesse exemplo, a métrica derivada é a multiplicação da quantidade da venda com o preço unitário da
dimensão de produto.
Ela pode ser armazenada diretamente na fato ou calculada em tempo de execução nos cubos, que
também vou fazer um post explicando o que são.
A diferença básica entre armazenar no Data Warehouse ou deixar para ser calculada em tempo de
execução, é o seguinte:
No Data Warehouse quem fará esse cálculo é o time de ETL, ou seja, na hora da integração, se
aquela métrica for derivada, já vai ser calculada antes de ser armazenada.
Quando você salva as métricas base, na hora de fazer as análises, o cálculo é feito em tempo de
execução.
Qual a diferença na prática?
O cálculo vai utilizar recursos computacionais, de servidores e tudo mais. O cubo vai ter que calcular
isso para você. Quando está armazenada no Data Warehouse, esse procedimento já foi realizado.
E qual o melhor?
Não tem resposta certa, porque vai da estratégia de como você quer ver a informação e de como
chegar nela.
Por exemplo, eu já peguei casos que estava muito difícil para a ferramenta calcular em tempo de
execução, demorava muito porque era um cálculo bem complexo.
O que eu fiz? Fiz o cálculo no ETL. Antes de dar a carga final da fato, peguei a métrica que já tinha
sido carregada, que era uma aditiva, fiz o cálculo que tinha que ser feito e inseri de novo, aí ela virou
uma métrica derivada e aumentou muito a velocidade das consultas.
Uma coisa é você esperar 5 minutos no ETL e outra coisa é o usuário clicar no relatório e ele levar 5
minutos para abrir. Esse tipo de coisa você não pode deixar acontecer.
Então coloco tudo no Data Warehouse? Não.
Depende da estratégia, por isso que eu explico sempre o conceito, para você saber o que fazer. Nesse
caso que eu citei foi muito bom ter colocado no ETL, mas houveram casos que precisei deixar as
métricas para serem calculadas direto na ferramenta.
Por quê?
Métricas de negócio. Eram diversas, e tudo com base em métricas aditivas da fato venda. Na fato, eu
tinha quantidade de vendas, valor da venda, e acabou por aí.
As métricas derivadas que o negócio demandava eram mais de 30, então deixei que elas fossem
calculadas na ferramenta, porque a forma como o cliente queria analisar mudava, uma hora ele queria
analisar por tempo, outra hora por produto e outra por vendedor.
Quando você chumba uma métrica no Data Warehouse, precisa entender que também está chumbando
aquele cruzamento. Quando precisar de um novo valor em cima daquela métrica para um novo
cruzamento, vai ter que recalcular toda a fato no ETL.
Então quando são projetos muito complexos, a gente opta sempre por deixar as métricas derivadas
para as ferramentas do BI fazer.
Uma coisa muito importante que sempre faz a gente optar por colocar as métricas derivadas na
ferramenta de BI é que quando todas as métricas estão disponíveis limpinhas lá no cubo, o usuário de
negócio pode fazer um self-service BI e o gráfico em que ele está trabalhando vai se movendo
conforme ele faz as análises.
Essa possibilidade de ficar se movendo e mostrar os cálculos que estão acontecendo em tempo real é
porque a métrica derivada é calculada nas análises, ou seja, ficam prontas no cubo.
MÉTRICA SEMI-ADITIVA
Para exemplificar, fiz essa tabela de uma fato com saldo de conta corrente.
Uma visão geral sobre essa fato: temos a dimensão de tempo, de cliente e de agência. Também temos
algumas métricas: entrada, saída, saldo e a diferença percentual entre as entradas e saídas.
A entrada é uma métrica aditiva, ela pode somar todas as linhas, aí temos 14.620,00 de entradas. E
podemos cruzar esse dado com todas as dimensões. A saída é a mesma coisa, ela pode ser somada e
cruzada com todas as dimensões. E a métrica de saldo, que nesse caso é a entrada menos a saída.
Por exemplo:
No dia 1° de março, na conta do Piton, na agência ITAU-SP01, entrou R$1.500,00 e saiu R$300,00,
ficando com um saldo de R$1.200,00.
Nesse mesmo dia, na mesma conta, não entrou nada e saiu R$400,00. O saldo ficou R$800,00.
De novo no mesmo dia, saiu mais R$200,00 sem entrar nada, ficando com o saldo de R$600,00. Nesse
mesmo dia também aconteceram transações de outras pessoas. Na conta do Robson, entrou
R$2.500,00 e saiu R$700,00, ficando com o saldo de R$1.600,00.
Se somarmos todas as linhas, vamos ter um resultado de 14.420,00, mas isso não faz sentido, porque
no mesmo dia, tivemos várias transações em uma mesma conta, e o saldo do Piton não é a soma de
todos os valores. Se somarmos 1.200 + 800 + 600, vamos ter 2.400, enquanto o saldo real é 600.
Então o que faz sentido somar? A última movimentação de cada conta naquele dia, aí vou ter
12.420,00.
Resumidamente, o que isso quer dizer? Que métrica semi-aditiva pode ser somada por todas as
dimensões exceto a tempo.
Você só vai conseguir somar pela tempo se colocar um filtro que diga que ele só pegue o último
registro.
Saldo de estoque e saldo bancário, quando representado de forma monetária, são métricas semi-
aditivas bem comuns, porque são aditivas em todas as dimensões, exceto na tempo.
MÉTRICA NÃO-ADITIVA
São métricas tipo percentual, algum cálculo feito em tempo de execução, que não podem ser somadas
por nenhuma dimensão. O ideal é salvar as métricas que levam àquela não-aditiva e deixar para que
ela seja calculada na ferramenta de BI.
No exemplo lá de cima: No exemplo lá de cima:
Enquanto no saldo temos a diferença numérica, nessa temos a percentual. E qual a conta? A entrada
dividido pela saída.
Que leitura fazemos aqui? A entrada passou 500% da saída. Ou seja, tivemos 500% a mais de entrada
que de saída.
Normalização de dados
Primeira Forma Normal (ou 1FN). Nesta forma os atributos precisam ser atômicos, o que significa que as
tabelas não podem ter valores repetidos e nem atributos possuindo mais de um valor.
Exemplo:
CLIENTE = {ID + ENDEREÇO + TELEFONES}. Porém, uma pessoa poderá ter mais de um número
de telefone, sendo assim o atributo "TELEFONES" é multivalorado. Para normalizar, é necessário:
1. Identificar a chave primária e também a coluna que possui dados repetidos (nesse exemplo
"TELEFONES") e removê-los;
2. Construir uma outra tabela com o atributo em questão, no caso "TELEFONES". Mas não se
esquecendo de fazer uma relação entre as duas tabelas: CLIENTE = {ID + ENDEREÇO} e
TELEFONE (nova tabela) = {CLIENTE_ID (chave estrangeira) + TELEFONE}.
Segunda Forma Normal (ou 2FN). Primeiramente, para estar na 2FN é preciso estar também na 1FN. 2FN
define que os atributos normais, ou seja, os não chave, devem depender unicamente da chave primária da
tabela. Assim como as colunas da tabela que não são dependentes dessa chave devem ser removidas da
tabela principal e cria-se uma nova tabela utilizando esses dados.
Exemplo:
PROFESSOR_CURSO = {ID_PROF + ID_CURSO + SALARIO + DESCRICAO_CURSO} Como
podemos observar, o atributo "DESCRICAO_CURSO" não depende unicamente da chave primária
"ID_PROF", mas sim somente da chave "ID_CURSO". Para normalizar, é necessário:
Terceira Forma Normal (ou 3FN). Assim como para estar na 2FN é preciso estar na 1FN, para estar
na 3FN é preciso estar também na 2FN. 3FN define que todos os atributos dessa tabela devem ser
funcionalmente independentes uns dos outros, ao mesmo tempo que devem ser dependentes
exclusivamente da chave primária da tabela. 3NF foi projetada para melhorar o desempenho de
processamento dos bancos de dados e minimizar os custos de armazenamento.
Exemplo:
Forma Normal de Boyce-Codd (ou BCNF) requer que não exista nenhuma dependência funcional não trivial
de atributos em algo mais do que um superconjunto de uma chave candidata. Neste estágio, todos os
atributos são dependentes de uma chave, de uma chave inteira e de nada mais que uma chave (excluindo
dependências triviais, como A → A);
Quarta Forma Normal (ou 4FN) requer que não exista nenhuma dependência multi-valorada não trivial de
conjuntos de atributo em algo mais de que um superconjunto de uma chave candidata;
Quinta Forma Normal (ou 5FN ou PJ/NF) requer que não exista dependências de joins (associações) não
triviais que não venham de restrições chave;
Domain-Key Normal Form (ou DK/NF) requer que todas as restrições sigam os domínios e restrições chave.
Antes de falar sobre normalização, é necessário utilizar alguns termos a partir do modelo relacional e defini-
los na teoria de conjuntos. Estas definições muitas vezes serão simplificações de seus significados originais, uma
vez que somente alguns aspectos do modelo relacional são levados em consideração na normalização.
As notações básicas utilizadas no modelo relacional são nomes de relacionamentos e nomes de atributos,
representados por cadeias de caracteres tais como Pessoas e Nomes; geralmente são utilizadas variáveis
como r, s, t,… e a, b, c para o conjunto dados definido sobre eles. Outra notação básica é o conjunto de valores
atômicos que contém valores tais como números e cadeias de caracteres.
A primeira definição de interesse é a noção de tupla, que formaliza a noção de linha ou registro em uma
tabela:
Def. Uma tupla é uma função parcial de nomes de atributos para valores atômicos.
Def. Um cabeçalho é um conjunto finito de nomes de atributos.
Def. A projeção de uma tupla t em um conjunto finito de atributos A é t[A] = {(a, v): (a, v) ∈ t, a ∈ A}.
A próxima definição é a de relação na qual formaliza-se o teor de uma tabela como ele é definido no
modelo relacional.
Def. Uma relação é uma tupla (H, B) sendo H um cabeçalho e B o corpo, um conjunto de tuplas em que
possuem todas o domínio H.
Como uma relação corresponde definitivamente com aquela que é usualmente chamada de extensão de
um predicado em lógica de primeira ordem exceto que aqui nós identificamos os locais no predicado com nomes
de atributos. Geralmente no modelo relacional um esquema de banco de dados é dito consistir-se de um conjunto
de nomes relação, os cabeçalhos que são associados com esses nomes e as restrições que devem manter toda
instância do esquema de banco de dados. Para normalização nós nos concentraremos nas restrições que
indicam relações individuais, isto é, as restrições relacionais. O propósito destas restrições é descrever
o universo relacional, ou seja, o conjunto de todas as relações que são permitidas para serem associadas com
certos nomes de relação.
Def. Um universo relacional U sobre um cabeçalho H é um conjunto não vazio de relações com o
cabeçalho H.
Def. Um esquema relacional (H, C) consiste de um cabeçalho H e um predicado C(R) que é definido por
todas as relações R com o cabeçalho H.
Def. Uma relação satisfaz o esquema relacional (H, C) se possuir o cabeçalho H e satisfizer C.
Objetivos de normalização
Um objetivo básico da primeira forma normal, definida por Codd em 1970, era permitir dados serem
questionados e manipulados usando uma "sub-linguagem de dados universal" atrelada à lógica de primeira
ordem. Questionando e manipulando dados em uma estrutura de dados não normalizada, como a seguinte
representação não-1NF de transações de clientes de cartão de crédito, envolve mais complexidade do que seria
realmente necessário:
Wilson 2
Márcio 3
Note que a tabela é composta pelas colunas cliente e transação, sendo que essa última contém 3 informações:
identificador, data e valor.
Para cada cliente corresponde um grupo repetitivo de transações.
Cliente Cliente ID
João 1
Wilson 2
Márcio 3
Nessa nova estrutura, as chaves são {Cliente} e {Cliente ID} na primeira tabela e {Cliente ID, Tr. ID} na segunda.
Agora cada linha representa uma transação individual, e um SGBD pode obter a resposta, simplesmente
encontrando todas as linhas com data de outubro, somando então os valores.
Formas Normais
Primeira Forma Normal
Definição pelo Osório
'Uma tabela está na 1FN, se e somente se, todos os valores das colunas da tabela forem atômicos'
Assim, podemos dizer que os relacionamentos, como definidos acima, estão necessariamente na 1FN. Uma
relação está na 1FN quando todos os atributos da relação estiverem baseados em um domínio simples, não
contendo grupos ou valores repetidos.
Passagem à 1FN
Redundância;
Anomalias de Atual.
Conclusões
Uma relação R está na 3FN se ela estiver na 2FN e cada atributo não-chave de R não possuir
dependência transitiva, para cada chave candidata de R. Todos os atributos dessa tabela devem
ser independentes uns dos outros, ao mesmo tempo que devem ser dependentes exclusivamente da chave
primária da tabela.
Exemplo ilustrativo
A tabela a seguir não está na Terceira Forma Normal porque a coluna Total é dependente, ou é
resultado, da multiplicação das colunas Preço e Quantidade, ou seja, a coluna total tem dependência transitiva
de colunas que não fazem parte da chave primária, ou mesmo candidata da tabela. Para que essa tabela passe
à Terceira FN o campo Total deverá ser eliminado, a fim de que nenhuma coluna tenha dependência de qualquer
outra que não seja exclusivamente chave.
Aqui, após o atributo/coluna Total ser excluído da tabela, ela já na 3ª Forma Normal. Esse atributo pode ser
movido para outra tabela referenciando a antiga.
Itens do pedido
15 102 9,25 2
15 132 1,3 5
Passagem à 3FN
Conclusões
Passagem à 4FN
Resultado
Se uma relação é decomposta em várias relações e a reconstrução não é possível pela junção das outras
relações, dizemos que existe uma dependência de junção.
Existem tabelas na 4FN que não podem ser divididas em duas relações sem que se altere os dados originais.
Exemplo:
Sejam as relações R1(CodEmp, CodPrj) e R2(CodEmp, Papel) a decomposição da relação
ProjetoRecurso(CodEmp, CodPrj, Papel).
Exemplo
Exemplo:
De acordo com [1]Forma Normal Chave-Domínio é uma forma atualizada na normalização de banco de
dados que necessita que não haja restrições de domínio e chave dentro do banco de dados.
Esta forma[2] evita as restrições de dados que não são do domínio ou chaves com restrição. Muitos dos
Banco de dados podem fazer os teste com seus domínios e chaves restritas com os seus atributos.
Contudo a restrições necessitam da programação nesses bancos de dados.
Outras dependências[editar | editar código-fonte]
dependências encapsuladas;
dependências como blocos em lógica de primeira ordem.
Código do Vendedor;
Nome do Vendedor;
Região de Vendas.
Um vendedor cadastrado pode mudar sua área de vendas mas os dados de vendas antigas, realizadas em
regiões por onde trabalhou, devem ser mantidos no banco sem incoerência de dados. Assim, a
entidade Vendedor deve ser mantida desnormalizada para que os dados não se tornem inconsistentes.
Entidade Vendedor
Nesse caso fomos obrigados a utilizar uma chave primária para manter a integridade de dados de Vendedor, o
que mantém a entidade desnormalizada. Mas, ao optar pela desnomalização de dados devemos levar em conta
o custo da redundância de dados e o uso das anomalias de atualização, o que não é interessante para grandes
bancos de dados.
Arquitetura de dados
Administração de dados
Modelagem de dados
Banco de Dados