Você está na página 1de 44

Mestrado em Anlise de Dados e Sistemas de Apoio Deciso

Faculdade de Economia
Universidade de Porto



Bases de Dados e Programao
TRABALHO DE BASES DE DADOS



Manuel Jos Ferreira Monteiro



Fevereiro de 2006

NDICE
1. Introduo......................................................................................................................3
2. Ciclo de vida na criao de uma base de dados.............................................................5
3. Descrio do Negcio................................................................................................6
4. Modelo entidade-relacionamento ................................................................................11
4.1 Descrio do modelo Entidade-Relacionamento.................................................. 11
4.2 Identificao das principais Entidades e Relaes ............................................... 12
4.3 Construo do modelo ER.................................................................................... 13
5. Modelo relacional ........................................................................................................20
6. Normalizao...............................................................................................................29
7. Criao da Base de Dados em MYSQL......................................................................30
8. Consultas SQL.............................................................................................................39
9. Contedos Consultados ...............................................................................................43
Bases de Dados e Programao
MADSAD-FE-UP

3
1. Introduo
Este trabalho pretende abordar os conceitos estudados na disciplina de Bases de Dados
e Programao na componente de Bases de Dados.
Para aplicao dos mtodos e conhecimentos estudados utilizou-se um caso real onde a
soluo encontrada neste documento ser efectivamente aplicada.
Utilizaram-se os seguintes sistemas e ferramentas:
MYSQL

O MYSQL um sistema de gesto de bases de dados relacional
baseado em comandos SQL (Structured Query Language), sendo
actualmente um dos sistemas mais utilizados. Trata-se de um
sistema OpenSource.
Foi utilizado neste trabalho como sistema de base de dados.
Informaes e download em:
http://www.mysql.com/

DBDesigner 4

O DBDesigner 4 um sistema visual para desenho de bases de
dados que integra desenho de bases de dados, modelao, criao e
manuteno num nico ambiente. Foi desenvolvido e optimizado
para o MYSQL.
Foi utilizado neste trabalho para se criar o modelo ER.
Informaes e download em:
http://www.fabforce.net/dbdesigner4/

Bases de Dados e Programao
MADSAD-FE-UP

4

MYSQL Query

O MYSQL Query uma ferramenta disponibilizada no site do
MYSQL que permite de uma forma simples e visual criar e gerir
bases de dados MYSQL.
Em complemento com o DBdesigner, foi utilizado neste trabalho
para se criarem todas as tabelas e para se fazerem interrogaes
SQL.
Informaes e download em:
http://dev.mysql.com/downloads/query-browser/1.1.html

VISIO
O Microsoft Visio uma ferramenta visual adequada para a
elaborao de diagramas e outros esquemas baseados em objectos.
Foi utilizado neste trabalho para elaborao de todos os esquemas
representativos do modelo ER.
Informaes em:
http://office.microsoft.com/en-us/FX010857981033.aspx

Bases de Dados e Programao
MADSAD-FE-UP

5
2. Ciclo de vida na criao de uma base de dados
Os passos necessrios no desenvolvimento de uma base de dados podem resumidamente
ser os seguintes:
Passo 1: Analisar o sistema (negcio)
Nesta fase avalia-se o modelo de negcio. O analista ouve os utilizadores sobre a forma
como utilizam a informao. um processo cclico onde os utilizadores, conhecedores
profundos do negcio, explicam ao analista, que poder perceber pouco do modelo em
causa, todos os pormenores sobre como os dados circulam e so armazenados na
organizao e a informao que desejam obter.
Passo 2: Especificar a base de dados
Havendo um conhecimento inicial das necessidades do negcio em termos de
informao inicia-se a fase onde o analista descreve e esquematiza o modelo. Sendo o
utilizador final pouco conhecedor das metodologias e modelos utilizados na construo
de uma base de dados, pode-se complementar os modelos que sero construdos com
descries bsicas sobre o que a base de dados deve conter e como as partes se
interligam. Quando o analista descreve uma relao como, por exemplo Todos os
empregados emitem facturas, o utilizador final pode facilmente confirmar essa regra,
negar ou modificar a declarao para que se ajuste realidade.
Passo 3: Desenhar a base de dados
Assim que o modelo est preparado pode-se passar fase de construo da base de
dados propriamente dita. Nesta fase surgem normalmente novas oportunidades de
melhoria, tal como aconteceu com este trabalho. Convertendo os modelos obtidos para
tabelas relacionais e iniciando os testes SQL base de dados criada, surgiro sempre
novas oportunidades de optimizao da base de dados.
Bases de Dados e Programao
MADSAD-FE-UP

6
3. Descrio do Negcio
Apresentao
A FICTICIA uma empresa com actuao Internacional que oferece servios na rea da
Internet. O seu Core Business fundamentalmente a venda de servios de
WebHosting e Registo de Domnios.
Praticamente todos os clientes so angariados na Internet, que em qualquer altura do dia
(24 horas por dia e 7 dias por semana) podem realizar encomendas online ou solicitar
qualquer tipo de apoio administrativo ou tcnico.
Os produtos/servios vendidos esto padronizados sendo a empresa passvel de grande
automatizao.
A motivao
A empresa pretende reformular radicalmente o seu sistema de informao actual,
dotando-o de ferramentas que lhe possibilite obter de uma forma mais rpida e
automatizada a informao para gesto eficaz do negcio.
Trata-se de uma rea de negcio muito dinmica onde exigida uma resposta muito
rpida s solicitaes dos clientes. Estes pretendem ser rapidamente servidos em
qualquer uma das fases da relao fornecedor/cliente.
Principais problemas
Actualmente tem um sistema informtico que utiliza uma base de dados extremamente
simples que j no responde s necessidades de informao da empresa, num mercado
que extremamente competitivo.
A actual base de dados no est normalizada nem est dotada com dados teis ao
funcionamento da empresa.
Bases de Dados e Programao
MADSAD-FE-UP

7
Um esquema ER simplificado da actual Base de Dados:


O grande handicap da empresa o elevado ndice de incobrveis. Pretende-se com este
novo sistema de informao, aliado a algumas tcnicas de deteco de fraudes e
integrao de sistemas de pagamento online, minimizar consideravelmente as elevadas
perdas financeiras por encomendas no pagas.
Pressupostos gerais sobre a empresa
P1. A empresa lida com encomendas online, podendo ser essas encomendas de servios
de alojamento e/ou registo de domnios.
P2. O processo desde que realizada a encomenda at entrega do servio segue a
seguinte lgica:
Cliente:Encomenda ---> Empresa:Validao dos dados ----> Empresa:Envio de nota de
cobrana ---> Cliente:Pagamento ---> Empresa:Confirmao do pagamento --->
Empresa:Envio da factura (Normal ou Electrnica) ---> Empresa:Entrega do servio
FACTURAS
CLIENTES PRODUTOS
Paga
So Pagas
Utiliza
So
utilizados
Contem
Contidos
Bases de Dados e Programao
MADSAD-FE-UP

8
P3. O estado do processo ser monitorizado pela Empresa
P4. Os servios podem ser mensais ou anuais e tm associado um preo, que pode variar
no tempo.
P5. Os clientes podem ser de qualquer pas pelo que podero ter diferentes tratamentos
em termos de tributao do IVA e lingua nas respostas. A estes est associada uma
pessoa de contacto. Um cliente pode estar associado a muitos servios.
P6. s encomendas ficam associados alguns dados extrados da Internet, nomeadamente
o IP de origem da encomenda, o dia, hora e site de onde partiu a referncia (motores de
busca, caso exista), qual a palavra que deu origem referncia. Com estes dados
pretende-se saber o retorno dos investimento publicitrios, estatsticas sobre nmero de
encomendas dirias, mensais e anuais. Pretende-se igualmente avaliar outros
comportamentos associados ao processo da encomenda.
P7. A Empresa est associada a outras entidades que revendem os seus servios e com
os quais negociada uma margem que pode variar de revendedor para revendedor. Um
revendedor por norma igualmente um cliente.
P8. H clientes que tm igualmente um tratamento especial podendo ter preos
diferentes dos praticados ao pblico.
P9. Os clientes devem ser avisados por SMS e email quando os domnios esto prximo
de caducar para que possam proceder sua renovao. O cliente poder escolher com
que antecedncia pretende ser avisado. Poder haver alguns clientes que preferem que a
renovao do domnio seja automatizada.
P10. Os clientes podem pagar por Carto de Crdito (Visa, Master Card e outros),
Pagamento de Servios (apenas em Portugal), Cheque, Transferncia ou Depsito. Estas
opes aparecem ao cliente no acto de encomenda. No caso de pagamento por carto de
crdito os dados associados ao carto so armazenados temporariamente at que se
proceda ao pagamento. Por questes de segurana esses dados sero encriptados e
guardados em tabelas separadas.
Bases de Dados e Programao
MADSAD-FE-UP

9
P11. Os dados dos pagamentos realizados pelos clientes so guardados.
P12. O cliente pode optar por factura electrnica ou tradicional (por correio).
P13. Frequentemente os clientes fazem Upgrade (ou Downgrade) da conta de
alojamento que possuem. Essas mudanas devem ser guardadas para futura referncia.
P14. Os contactos de suporte tcnico ou administrativo realizados entre o cliente e a
4Ever devem ficar guardados para futura referncia.
P15. As ocorrncias tcnicas associadas a um domnio ou a um alojamento devem ficar
registadas.
P16. Uma conta de alojamento pertence a um servidor. Um servidor pode ter um ou
mais alojamentos.
P17. Um alojamento est sempre associado a pelo menos um domnio. Um domnio
pode existir sem estar associado a um alojamento.
P18. A Empresa orgulha-se do tempo mnimo que consegue entre o momento da
encomenda e a entrega do servio. Pretende por isso monitorizar essa diferena de
tempo.
P19. Os servios devem estar tabelados com PVP e Preo de custo para que se possam
fazer anlises de lucro bruto instantneo.
Outros pressupostos
P20. Pretende-se distinguir o processo online do processo offline. Assim dever haver
um processo de cobrana automatizado online. Em paralelo dever haver um sistema de
emisso de Recibo/facturas offline. Em termos prticos um conjunto de Recebimentos
online dar origem a uma ou mais facturas emitidas offline.
Bases de Dados e Programao
MADSAD-FE-UP

10
P21. Uma encomenda est associada apenas a um produto. Pelo histrico da empresa,
uma encomenda refere-se normalmente a uma conta de alojamento, um domnio ou um
alojamento com um domnio. Este ltimo caso, o mais usual, representar a emisso
de duas encomendas.
Bases de Dados e Programao
MADSAD-FE-UP

11
4. Modelo entidade-relacionamento
4.1 Descrio do modelo Entidade-Relacionamento
Com base nas informaes obtidas da empresa e com base em todos os pressupostos
descritos no ponto anterior passa-se fase da especificao do modelo da base de dados.
A metodologia ser fazer inicialmente uma descrio resumida das entidades mais
bvias encontradas e das respectivas relaes. Seguidamente elabora-se o modelo
Entidade-Relacionamento (ER).
O modelo ER foi originalmente proposto por Peter Chen em 1976 como um caminho
para unificar as relaes entre bases de dados. Desde essa altura o modelo evoluiu e nos
dias de hoje amplamente utilizado para o desenho de bases de dados.
Para o profissional que constri uma base de dados o modelo ER :
- Facilmente convertido em tabelas relacionais.
- simples e fcil de entender. Pode por isso ser utilizado pelo designer da base
de dados para facilmente comunicar a estrutura do modelo ao utilizador final.
- Pode servir como modelo para o desenvolvimento do sistema de informao.
O modelo ER v o mundo real como uma construo de entidades e associaes entre
entidades.
Entidades
As entidades so o objecto de dados principal num modelo ER. As entidades so
normalmente os conceitos mais evidentes, no abstractos, na anlise de um sistema.
As entidades so classificadas como independentes ou dependentes. Alguns autores
utilizam a terminologia entidade forte e entidade fraca.
Bases de Dados e Programao
MADSAD-FE-UP

12
Uma entidade independente toda a que no depende de outra para se identificar. Uma
entidade dependente toda a que necessita de outras para ser identificada.
Uma instncia uma ocorrncia individual na entidade.
Entidades especiais
Entidades associativas (ou entidades de intercepo) so entidades usadas para associar
duas ou mais entidades de forma a reconciliar uma relao muitos para muitos.
Relaes
Uma relao representa uma associao entre duas ou mais entidades. O exemplo de
uma relao no caso prtico estudado seria:
Clientes tm contactos
Atributos
Os atributos descrevem a entidade qual esto associados. No modelo relacional a
instncia de um atributo um valor. O domnio de um atributo a a coleco de todos
os valores possveis que o atributo pode assumir.
4.2 Identificao das principais Entidades e Relaes
No processo de anlise inicial identificaram-se as seguintes entidades: Clientes,
Produtos/Servios (adiante designada por Produtos), Encomendas, Pagamentos, Notas,
Servidor.
Principais relaes encontradas:
R1. Os Clientes realizam Encomendas
Bases de Dados e Programao
MADSAD-FE-UP

13
R2. Os Clientes realizam Pagamentos referentes a Encomendas
R3. As Encomendas so constitudas por Produtos
R4. Os Produtos podem ser Alojamentos, Domnios ou outros servios ou produtos.
R5. Cada Encomenda integra apenas um (1) produto

4.3 Construo do modelo ER

rea comercial (os Clientes)
Associados entidade CLIENTE encontraram-se os seguintes atributos: id_cliente,
Tipo_facturao, Tipo_cliente, Designacao, Morada, Cod_postal, Localidade, Pas,
Num_fiscal, Tel, Fax, Email, Web, data_angariacao, desconto, nome_contacto,
funo_contacto, Tel_contacto, Fax_contacto, Email_contacto, Skype_contacto,
Web_contacto, Obs,
Com uma anlise mais aprofundada verificamos que alguns desses atributos so
passveis de ser decompostos em sub-entidades, nomeadamente: Pas, Tipo_cliente,
Contacto (nome, funo, tel, fax, email, skype, web) e Tipo_facturao.
Assim ficaramos com o seguinte modelo ER (por questo de simplificao no se
incluram os atributos):
Bases de Dados e Programao
MADSAD-FE-UP

14


A destacar as seguintes relaes:
R1. Os TIPOS CLIENTES agrupam CLIENTES
R2. Os TIPOS FACTURAO aplica-se a CLIENTES
R3. Os CLIENTES tm um ou mais CONTACTOS
R4. Um CONTACTO pode relacionar-se com diversos CLIENTES (por exemplo um
Webdesigner pode ser o contacto de diversos clientes)
R5. Os CLIENTES pertencem a um PAS
rea das Vendas
TIPO FACTURAO
CLIENTES
CONTACTOS
TIPO CLIENTES
Agrupam
Agrupados
Utilizada
Escolhem
Tm
Relacionam-se
Funo/Relao
PASES
Albergam
Residem
Bases de Dados e Programao
MADSAD-FE-UP

15
O processo de vendas inclui as encomendas, as cobranas, os pagamentos e as
facturas. O modelo ER assume a forma:


A destacar as seguintes relaes:
R1. Os CLIENTES realizam ENCOMENDAS
R2. As ENCOMENDAS do origem a COBRANAS
R3. As COBRANAS so pagas pelos CLIENTES
R4. Uma COBRANA pode incluir mais do que uma ENCOMENDA
CLIENTES
ENCOMENDAS
COBRANAS
Fazem
So feitas
Pagam
Pagas
Originam
Referentes
FACTURAS/
RECIBOS
Originam
Referentes
Recebem
Emitida para
Bases de Dados e Programao
MADSAD-FE-UP

16
R5. Uma COBRANA paga d origem emisso de uma FACTURA(RECIBO)
R6. Uma FACTURA pode incluir diversas COBRANAS pagas
H um conceito importante a reter neste modelo, as encomendas so automaticamente
renovadas, caso o cliente tenha seleccionado essa opo. Assim, o sistema informtico a
desenvolver ir automaticamente, nas periodicidades escolhidas pelo cliente auto-
renovar a encomenda, adequando-a aos preos em vigor e fazendo despoletar as notas
de cobrana em conformidade.
rea do Produto/Servio
A componente dos produtos/servios oferecidos tem a particularidade de os produtos
terem diferentes preos mediante o tipo de cliente (PVP, Revenda, preos especiais,
preo de custo).
Originalmente ponderou-se a incluso de duas entidades para colocao de preos de
venda ao pblico e outra para preos de custo. Verificmos que se considerar-mos a
prpria empresa como sendo um cliente (cliente interno), poderemos com uma nica
entidade/relao armazenar os referidos preos.
O modelo ER assume o seguinte esquema:

Outras reas
Dos pressupostos inicialmente assumidos, verificmos que h alguns que no se
adequam realidade, nomeadamente a necessidade de armazenar os dados de cartes de
TIPO CLIENTES ENCOMENDAS PRODUTOS
So incluidos
Inclui
Preos
Valor Desde
Bases de Dados e Programao
MADSAD-FE-UP

17
crdito. Por anlise do sistema de comunicaes da SIBS e UNICRE verificmos que o
sistema realizado em tempo real, no sendo necessrio guardar este tipo de
informaes.
Incidentes/Notas
Para se armazenarem todos os contactos de pedido de suporte ou pedidos de alteraes,
desenvolveu-se uma entidade que permite de forma simples, armazenar todos estes
contactos para futura referncia. um ponto importante na recolha de informao, pois
o histrico de incidentes e actuaes na resoluo das diversas situaes que vo
aparecendo, constituem uma informao rica para o suporte tcnico quando aparecem
situaes semelhantes e mesmo na realizao de listas de FAQS.


Campanhas
Haver no modelo relacional a adoptar uma tabela para armazenar os dados e
investimentos nas campanhas publicitrias. Esta entidade campanhas no se relaciona
com nenhuma outra.
CLIENTES NOTAS
Referente
Originam
Bases de Dados e Programao
MADSAD-FE-UP

18
O modelo ER completo




TIPO FACTURAO
CLIENTES
CONTACTOS
TIPO CLIENTES
Agrupam
Agrupados
Utilizada
Escolhem
Tm
Relacionam-se
Funo/Relao
PASES
Albergam
Residem
ENCOMENDAS
COBRANAS
Fazem
So feitas
Pagam
Pagas
Originam
Referentes
PRODUTOS
FACTURAS/
RECIBOS
So incluidos
Inclui
Originam
Referentes
Recebem
Emitida para
Preos
Valor Desde
NOTAS
Referente
Originam
Bases de Dados e Programao
MADSAD-FE-UP

19
Outra representao do modelo
Com o DBdesigner 4 conseguimos facilmente obter o seguinte modelo, j mais
normalizado.


Bases de Dados e Programao
MADSAD-FE-UP

20
5. Modelo relacional
Obtido o modelo ER fcil construir o modelo relacional. O conceito de entidade e de
atributo tem uma clara correspondncia com o conceito de tabela.
Quando se transforma um modelo ER num conjunto de tabelas, por vezes necessrio
realizar alteraes na estrutura das tabelas, originadas pela observao de determinados
pormenores prticos que por vezes no so correctamente perceptveis no modelo ER.
Da mesma forma poder ser necessrio fazer alguns ajustes nas tabelas resultantes de
relaes no modelo ER.
O modelo relacional demonstra-se normalmente da seguinte forma:
PAISES(cod_pais:varchar(2),pais:varchar(50),lngua:varchar(50),imposto:bool)
Dada a dimenso grande de muitas das tabelas descrevem-se pormenorizadamente em
formato tabular o modelo relacional construdo com base no modelo ER.

rea Comercial
Clientes
Coluna Tipo de Dados Chave AutoInc
id_cliente INTEGER Sim Sim
Cod_Tipo_facturao VARCHAR(2)
Cod_pSims VARCHAR(2)
Cod_tipo_cliente VARCHAR(2)
Designacao VARCHAR(200)
Morada1 VARCHAR(200)
Bases de Dados e Programao
MADSAD-FE-UP

21
Morada2 VARCHAR(200)
Cod_postal VARCHAR(10)
Localidade VARCHAR(100)
Num_fiscal VARCHAR(15)
Tel VARCHAR(20)
Fax VARCHAR(20)
EmSiml VARCHAR(100)
Web VARCHAR(100)
data_angariacao DATETIME
desconto REAL


Clientes_tipo
Coluna Tipo de Dados Chave AutoInc
Cod_tipo_cliente VARCHAR(2) Sim
Tipo_cliente VARCHAR(15)


Paises
Coluna Tipo de Dados Chave AutoInc
Cod_pais VARCHAR(2) Sim
Pais VARCHAR(50)
Bases de Dados e Programao
MADSAD-FE-UP

22
lingua VARCHAR(50)
imposto BOOL


Tipo_facturacao
Coluna Tipo de Dados Chave AutoInc
Cod_Tipo_facturao VARCHAR(2) Sim
Tipo_facturacao VARCHAR(15)


Contactos
Coluna Tipo de Dados Chave AutoInc
id_contacto INTEGER Sim Sim
Nome VARCHAR(100)
Tel VARCHAR(15)
Fax VARCHAR(15)
EmSiml VARCHAR(50)
Skype VARCHAR(15)
Web VARCHAR(100)
Obs TEXT


Relacoes
Coluna Tipo de Dados Chave AutoInc
Bases de Dados e Programao
MADSAD-FE-UP

23
id_cliente INTEGER Sim
id_contacto INTEGER Sim
Relao VARCHAR(50)




Outros

Campanhas
Coluna Tipo de Dados Chave AutoInc
id_campanhas INTEGER Sim Sim
designao VARCHAR(50)
data_inicio DATE
data_fim DATE
valor_investido REAL
descrio TEXT


Notas
Coluna Tipo de Dados Chave AutoInc
id_suporte INTEGER Sim Sim
id_cliente INTEGER
Bases de Dados e Programao
MADSAD-FE-UP

24
data_hora_contacto DATETIME
titulo VARCHAR(100)
descrio_contacto TEXT
procedimento_adoptado TEXT
data_hora_resoluo DATETIME
tecnico VARCHAR(100)




rea de Produto/Servio

Produtos
Coluna Tipo de Dados Chave AutoInc
id_produto INTEGER Sim Sim
cod_tipo_produto VARCHAR(2)
designacao VARCHAR(200)
descricao TEXT
periodicidade INTEGER


Produtos_tipo
Coluna Tipo de Dados Chave AutoInc
Bases de Dados e Programao
MADSAD-FE-UP

25
cod_tipo_produto VARCHAR(2) Sim
Tipo_produto VARCHAR(200)


Precos
Coluna Tipo de Dados Chave AutoInc
id_produto INTEGER Sim
desde DATE Sim
Cod_tipo_cliente VARCHAR(2) Sim
Preo REAL
IVA REAL




rea de Vendas

Encomendas
Coluna Tipo de Dados Chave AutoInc
id_encomenda INTEGER Sim Sim
id_cliente INTEGER
id_produto INTEGER
id_estado VARCHAR(2)
Bases de Dados e Programao
MADSAD-FE-UP

26
Data_Hora_encomenda DATETIME
Data_Hora_entrega DATETIME
Pormenor1 VARCHAR(200)
Pormenor2 VARCHAR(200)
Obs TEXT
IP_origem TEXT
URL_origem VARCHAR(200)
palavra_pesquisa VARCHAR(200)
data_renovao DATE
aviso_sms BOOL
aviso_emSiml BOOL
renovao_auto BOOL


Estado
Coluna Tipo de Dados Chave AutoInc
id_estado VARCHAR(2) Sim
Estado VARCHAR(20)
Descrio VARCHAR(200)


Tipos_pagamento
Bases de Dados e Programao
MADSAD-FE-UP

27
Coluna Tipo de Dados Chave AutoInc
id_tipos_pagamento INTEGER Sim
tipo_pagamento VARCHAR(50)


Cobrancas_Pagamentos
Coluna Tipo de Dados Chave AutoInc
id_cobrana INTEGER Sim Sim
id_facturarecibo INTEGER
id_encomenda INTEGER
id_cliente INTEGER
id_tipos_pagamento INTEGER
estado_pagamento INTEGER
data_inicio_cobrana DATE
data_validade DATE
data_pagamento TEXT
valor REAL
observaes TEXT


FacturaRecibo
Coluna Tipo de Dados Chave AutoInc
Bases de Dados e Programao
MADSAD-FE-UP

28
id_facturarecibo INTEGER Sim Sim
id_cliente INTEGER
data_emisso DATE
valor_liquido REAL
IVA REAL
Total REAL




Bases de Dados e Programao
MADSAD-FE-UP

29
6. Normalizao
A normalizao um processo que consiste em estruturar a informao em tabelas na
forma que pode ser considerada mais adequada do ponto de vista das operaes a
executar sobre a informao armazenada, evitando redundncias desnecessrias e certos
problemas associados insero, eliminando e actualizao de dados.
O modelo relacional previa inicialmente a existncia de trs formas normais, a 1 Forma
Normal (1FN), a 2 Forma Normal (2FN) e a 3 Forma Normal (3FN).
Em pormenor:
1FN: Uma tabela encontra-se na 1FN se todos os seus atributos estiverem definidos em
domnios que contenham apenas valores atmicos.
2FN: Uma tabela encontra-se na 2FN se est na 1FN e se todos os atributos que no
pertencem chave, dependem da chave atravs da dependncia funcional elementar.
3FN: Uma tabela encontra-se na 3FN est na 2FN e se nenhum dos atributos que fazem
parte da chave pode ser funcionalmente dependente de qualquer combinao dos
restantes.
Na prtica, os procedimentos de normalizao consideram-se satisfatrios se as tabelas
atingirem a 3FN.
A normalizao foi aplicada neste trabalho quando se decomps a tabela de clientes em
sub-tabelas.
A tabela CLIENTES era constituda por atributos que continham conjuntos de
conjuntos, nomeadamente, os PAISES, o TIPO de FACTURAO, CLIENTE TIPO.
No caso da tabela CONTACTOS, originalmente integrada na tabela CLIENTES, a
opo foi possibilitar que um cliente tivesse mais de que um contacto.
Bases de Dados e Programao
MADSAD-FE-UP

30
7. Criao da Base de Dados em MYSQL
Seguem as instrues SQL para criao das tabelas no MYSQL.
PRODUTOS_TIPO
CREATE TABLE Produtos_tipo (
cod_tipo_produto VARCHAR(2) NOT NULL,
Tipo_produto VARCHAR(200) NULL,
PRIMARY KEY(cod_tipo_produto));


CONTACTOS
CREATE TABLE Contactos (
id_contacto INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
Nome VARCHAR(100) NULL,
Tel VARCHAR(15) NULL,
Fax VARCHAR(15) NULL,
Email VARCHAR(50) NULL,
Skype VARCHAR(15) NULL,
Web VARCHAR(100) NULL,
Obs TEXT NULL,
PRIMARY KEY(id_contacto));


PASES
CREATE TABLE Paises (
Cod_pais VARCHAR(2) NOT NULL,
pais VARCHAR(50) NULL,
lingua VARCHAR(50) NULL,
imposto BOOL NULL,
PRIMARY KEY(Cod_pais));
Bases de Dados e Programao
MADSAD-FE-UP

31

ESTADO
CREATE TABLE Estado (
id_estado VARCHAR(2) NOT NULL,
Estado VARCHAR(20) NULL,
Descrio VARCHAR(200) NULL,
PRIMARY KEY(id_estado));


TIPO_FACTURAO
CREATE TABLE Tipo_facturacao (
Cod_Tipo_facturao VARCHAR(2) NOT NULL,
Tipo_facturacao VARCHAR(15) NULL,
PRIMARY KEY(Cod_Tipo_facturao));


CAMPANHAS
CREATE TABLE Campanhas (
id_campanhas INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
designao VARCHAR(50) NULL,
data_inicio DATE NULL,
data_fim DATE NULL,
valor_investido REAL NULL,
descrio TEXT NULL,
PRIMARY KEY(id_campanhas));

Bases de Dados e Programao
MADSAD-FE-UP

32

TIPOS_PAGAMENTOS
CREATE TABLE Tipos_pagamento (
id_tipos_pagamento INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
tipo_pagamento VARCHAR(50) NULL,
PRIMARY KEY(id_tipos_pagamento));

CLIENTES_TIPO
CREATE TABLE Clientes_tipo (
Cod_tipo_cliente VARCHAR(2) NOT NULL,
Tipo_cliente VARCHAR(15) NOT NULL,
PRIMARY KEY(Cod_tipo_cliente));

PRODUTOS
CREATE TABLE Produtos (
id_produto INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
cod_tipo_produto VARCHAR(2) NOT NULL,
designacao VARCHAR(200) NULL,
descricao TEXT NULL,
periodicidade INTEGER UNSIGNED NULL,
PRIMARY KEY(id_produto),
FOREIGN KEY(cod_tipo_produto)
REFERENCES Produtos_tipo(cod_tipo_produto)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Bases de Dados e Programao
MADSAD-FE-UP

33

PREOS
CREATE TABLE Precos (
id_produto INTEGER UNSIGNED NOT NULL,
desde DATE NOT NULL,
Cod_tipo_cliente VARCHAR(2) NOT NULL,
Preo REAL NOT NULL,
IVA REAL NULL,
Preo_custo REAL NOT NULL,
PRIMARY KEY(id_produto, desde, Cod_tipo_cliente),
FOREIGN KEY(id_produto)
REFERENCES Produtos(id_produto)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(Cod_tipo_cliente)
REFERENCES Clientes_tipo(Cod_tipo_cliente)
ON DELETE RESTRICT
ON UPDATE CASCADE);

Bases de Dados e Programao
MADSAD-FE-UP

34

CLIENTES
CREATE TABLE Clientes (
id_cliente INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
Cod_Tipo_facturao VARCHAR(2) NOT NULL,
Cod_pais VARCHAR(2) NOT NULL,
Cod_tipo_cliente VARCHAR(2) NOT NULL,
Designacao VARCHAR(200) NULL,
Morada1 VARCHAR(200) NULL,
Morada2 VARCHAR(200) NULL,
Cod_postal VARCHAR(10) NULL,
Localidade VARCHAR(100) NULL,
Num_fiscal VARCHAR(15) NULL,
Tel VARCHAR(20) NULL,
Fax VARCHAR(20) NULL,
Email VARCHAR(100) NULL,
Web VARCHAR(100) NULL,
data_angariacao DATETIME NULL,
desconto REAL NULL,
PRIMARY KEY(id_cliente),
FOREIGN KEY(Cod_tipo_cliente)
REFERENCES Clientes_tipo(Cod_tipo_cliente)
ON DELETE RESTRICT
ON UPDATE CASCADE,
FOREIGN KEY(Cod_pais)
REFERENCES Paises(Cod_pais)
ON DELETE RESTRICT
ON UPDATE CASCADE,
FOREIGN KEY(Cod_Tipo_facturao)
REFERENCES Tipo_facturacao(Cod_Tipo_facturao)
ON DELETE RESTRICT
ON UPDATE CASCADE);

Bases de Dados e Programao
MADSAD-FE-UP

35

ENCOMENDAS
CREATE TABLE Encomendas (
id_encomenda INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
id_cliente INTEGER UNSIGNED NOT NULL,
id_produto INTEGER UNSIGNED NOT NULL,
id_estado VARCHAR(2) NOT NULL,
Data_Hora_encomenda DATETIME NULL,
Data_Hora_entrega DATETIME NULL,
Pormenor1 VARCHAR(200) NULL,
Pormenor2 VARCHAR(200) NULL,
Preo VARCHAR(200) NULL,
Preo_custo VARCHAR(200) NULL,
Obs TEXT NULL,
IP_origem TEXT NULL,
URL_origem VARCHAR(200) NULL,
palavra_pesquisa VARCHAR(200) NULL,
data_renovao DATE NULL,
aviso_sms BOOL NULL,
aviso_email BOOL NULL,
renovao_auto BOOL NULL,
PRIMARY KEY(id_encomenda),
FOREIGN KEY(id_cliente)
REFERENCES Clientes(id_cliente)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(id_estado)
REFERENCES Estado(id_estado)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(id_produto)
REFERENCES Produtos(id_produto)
ON DELETE NO ACTION
Bases de Dados e Programao
MADSAD-FE-UP

36
ON UPDATE NO ACTION);


FACTURA_RECIBO
CREATE TABLE FacturaRecibo (
id_facturarecibo INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
id_cliente INTEGER UNSIGNED NOT NULL,
data_emisso DATE NULL,
valor_liquido REAL NULL,
IVA REAL NULL,
Total REAL NULL,
PRIMARY KEY(id_facturarecibo),
FOREIGN KEY(id_cliente)
REFERENCES Clientes(id_cliente)
ON DELETE RESTRICT
ON UPDATE RESTRICT);


NOTAS
CREATE TABLE Notas (
id_suporte INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
id_cliente INTEGER UNSIGNED NOT NULL,
data_hora_contacto DATETIME NULL,
titulo VARCHAR(100) NULL,
descrio_contacto TEXT NULL,
procedimento_adoptado TEXT NULL,
data_hora_resoluo DATETIME NULL,
tecnico VARCHAR(100) NULL,
PRIMARY KEY(id_suporte),
FOREIGN KEY(id_cliente)
REFERENCES Clientes(id_cliente)
ON DELETE RESTRICT
Bases de Dados e Programao
MADSAD-FE-UP

37
ON UPDATE CASCADE);


RELAES
CREATE TABLE Relacoes (
id_cliente INTEGER UNSIGNED NOT NULL,
id_contacto INTEGER UNSIGNED NOT NULL,
Relao VARCHAR(50) NULL,
PRIMARY KEY(id_cliente, id_contacto),
FOREIGN KEY(id_cliente)
REFERENCES Clientes(id_cliente)
ON DELETE RESTRICT
ON UPDATE CASCADE,
FOREIGN KEY(id_contacto)
REFERENCES Contactos(id_contacto)
ON DELETE RESTRICT
ON UPDATE CASCADE);

Bases de Dados e Programao
MADSAD-FE-UP

38

COBRANAS_PAGAMENTOS
CREATE TABLE Cobrancas_Pagamentos (
id_cobrana INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
id_facturarecibo INTEGER UNSIGNED NOT NULL,
id_encomenda INTEGER UNSIGNED NOT NULL,
id_cliente INTEGER UNSIGNED NOT NULL,
id_tipos_pagamento INTEGER UNSIGNED NOT NULL,
estado_pagamento INTEGER UNSIGNED NULL,
data_inicio_cobrana DATE NULL,
data_validade DATE NULL,
data_pagamento TEXT NULL,
valor REAL NULL,
observaes TEXT NULL,
PRIMARY KEY(id_cobrana),
FOREIGN KEY(id_cliente)
REFERENCES Clientes(id_cliente)
ON DELETE RESTRICT
ON UPDATE CASCADE,
FOREIGN KEY(id_tipos_pagamento)
REFERENCES Tipos_pagamento(id_tipos_pagamento)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(id_encomenda)
REFERENCES Encomendas(id_encomenda)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(id_facturarecibo)
REFERENCES FacturaRecibo(id_facturarecibo)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Bases de Dados e Programao
MADSAD-FE-UP

39
8. Consultas SQL
Seguem algumas instrues SQL para obteno de informaes:

Quantas encomendas por ano, ms?
SELECT year(data_hora_encomenda) as ano,month(data_hora_encomenda) as
mes,count(*) as total
FROM encomendas
GROUP BY ano,mes

Servios disponibilizados a determinado cliente?
SELECT produtos.designacao
FROM (encomendas, clientes, produtos)
WHERE encomendas.id_produto=produtos.id_produto and
encomendas.id_cliente=clientes.id_cliente and clientes.id_cliente=1

Lista de cobranas por pagar?
SELECT * FROM cobrancas_pagamentos where estado_pagamento=0

Encomendas pendentes?
SELECT * FROM encomendas where id_estado<3

Encomendas com status de "Em pagamento"?
SELECT * FROM encomendas where id_estado=2

Tempo mximo entre encomenda e entrega do servio?
SELECT id_encomenda, timediff(data_hora_entrega,data_hora_encomenda) as tempo
FROM encomendas e
Bases de Dados e Programao
MADSAD-FE-UP

40

Total de encomendas por fonte publicitria?
SELECT url_origem, count(*)
FROM encomendas group by url_origem

Total de encomendas por palavra de pesquisa?
SELECT palavra_pesquisa, count(*)
FROM encomendas group by palavra_pesquisa

Domnios sem conta de alojamento?
SELECT pormenor1, count(pormenor1) as total
FROM encomendas
GROUP BY pormenor1
HAVING total=1

Nota: No campo pormenor1 fica guardado o nome do domnio, quer seja a
encomenda de um domnio quer seja a encomenda de uma alojamento. Se houver
domnio + alojamento encontram-se dois registos com o mesmo domnio. Se for apenas
o domnio aparece apenas um registo.

Lucro bruto mensal?
SELECT concat(year(data_hora_encomenda) ,"-",right(concat("00",
month(data_hora_encomenda)),2)) as anomes, sum(preo-preo_custo) as lucro_bruto
FROM encomendas
GROUP BY anomes

Nota: Ao desenvolver esta instruo SQL constatou-se que para obter a diferena entre
o preo de venda e o preo de custo seria necessria a aplicao de uma estrutura
complexa de instrues SQL encadeadas. Por este motivo optou-se por adicionar mais
um atributo entidade Preos com o preo de custo associado a um produto. Desta
forma a obteno desta informao preciosa imediata e muito mais eficaz. Alterou-
se igualmente a tabela Encomendas de forma a incluir os dois preos referidos. Esta
alterao j se reflecte no modelo relacional apresentado nos pontos anteriores.
Bases de Dados e Programao
MADSAD-FE-UP

41

Domnios a renovar no prximo ms?
SELECT pormenor1
FROM encomendas, produtos
WHERE produtos.id_produto=encomendas.id_produto and cod_tipo_produto="D" and
month(date_add(now(),INTERVAL 1 Month))=month(data_renovao)

Domnios por extenso (".com", ".net", ".eu", etc)?
SELECT cod_tipo_produto, produtos.designacao, encomendas.pormenor1
FROM produtos, encomendas
WHERE encomendas.id_produto=produtos.id_produto
GROUP BY produtos.designacao, encomendas.pormenor1
HAVING cod_tipo_produto="D"


Lucro bruto por tipo de produto e por ano?
SELECT year(data_hora_encomenda) as ano, tipo_produto, sum(preo-preo_custo) as
lucro
FROM encomendas, produtos, produtos_tipo
WHERE encomendas.id_produto=produtos.id_produto and
produtos_tipo.cod_tipo_produto=produtos.cod_tipo_produto
GROUP BY ano, tipo_produto

Lista de revendedores?
SELECT *
FROM clientes
WHERE cod_tipo_cliente like 'R%'

Bases de Dados e Programao
MADSAD-FE-UP

42

Rentabilidade por revendedor por ano?
SELECT clientes.designacao, year(data_hora_encomenda) as ano, sum(preo-
preo_custo) as lucro
FROM encomendas, clientes
WHERE encomendas.id_cliente=clientes.id_cliente and clientes.cod_tipo_cliente like
"R%"
GROUP BY clientes.designacao, ano


Notas retiradas por Cliente?
SELECT Titulo, Descrio_contacto, Procedimento_adoptado
FROM clientes, notas
WHERE notas.id_cliente=clientes.id_cliente

Notas retiradas com determinada palavra?
SELECT Titulo, Descrio_contacto, Procedimento_adoptado
FROM notas
WHERE notas.titulo like %palavra% or notas.descriao_contacto like %palavra%
or notas.procedimento_adoptado like %palavra%

Nmero de Clientes por Pas?
SELECT pais, count(*) as total
FROM paises, clientes
WHERE paises.cod_pais=clientes.cod_pais
GROUP BY pais



Bases de Dados e Programao
MADSAD-FE-UP

43
9. Contedos Consultados

- Contedos da disciplina disponibilizados no MOODLE.

- Database Design Using Entity-Relationship Diagrams
by Sikha Bagui and Richard Earp ISBN:0849315484

- Desenho de bases de dados e linguagem SQL em Access
Edies CTI, Rui Carrio e Jos Carrio. ISBN.972-8401-48-5





Trabalho realizado por
Manuel Jos Ferreira Monteiro

Disciplina
Bases de Dados e Programao

Docente
Professor Doutor Luis Torgo

Mestrado
Anlise de Dados e Sistemas de Apoio Deciso
Faculdade de Economia - Universidade do Porto





17 de Fevereiro de 2006