1. Introdução
Neste trabalho iniciaremos o processo de implementação, na prática, do Protótipo de Aplicativo de Banco de Dados. Para tal, será utilizado o software Oracle 10g Spatial como instrumento para a implementação.
Esta lista de exercícios tem por objetivo a implementação da Terceira Forma Normal (3ªFN) do Protótipo de Aplicativo de Banco de Dados (BD) da temática de Portos, utilizando um Modelo de Dados Relacional em um Sistema Gerenciador de Banco de Dados (SGBD), visando reduzir o desperdício de rescursos nas futuras fases de integração e melhorar a eficiência operacional dos futuros Bancos de Dados Setoriais (BDS), Bancos de Dados Corporativo (BDC) e do Banco de Dados de Holding (BDH).
Além disso, esta lista também visa a pesquisa dos Modelos de Dados Hierárquico, Rede e Orientado a Objetos, e a conversão da 3ªFN do Protótipo de Aplicativo de BD no Modelo de Dados Relacional para os Modelos de Dados Hierárquico, Rede e Orientado a Objetos, visando identificar algumas das suas principais diferenças e características.
2. Conteúdo
Neste trabalho aplicaremos implementaremos a Terceira Forma Normal do Protótipo de Aplicativo de BD utilizando um Modelo de Dados Relacional em um SGBD, realizaremos testes de verificação e apresentaremos a Versão 1.0 do Sistema de Dicionário de Dados.
2.1. Implementação
A implementação foi realizada através da criação das tabelas e, posteriormente, da inserção de dados nas respectivas tabelas.
2.1.1. Criação das Tabelas
CREATE TABLE PORTO (
por_codigo VARCHAR(20) NOT NULL,
por_nome VARCHAR(255) NOT NULL,
por_endereco VARCHAR(255) NOT NULL
);
CREATE TABLE EMBARCACAO (
emb_codigo VARCHAR(20)NOT NULL,
emb_nome VARCHAR(255) NOT NULL,
emb_classe VARCHAR(20) NOT NULL,
emb_agencia VARCHAR(50) NOT NULL,
emb_bandeira VARCHAR(30) NOT NULL
);
CREATE TABLE ATRACACAO (
atr_codigo VARCHAR(20) NOT NULL,
por_codigo VARCHAR(20) NOT NULL,
emb_codigo VARCHAR(20) NOT NULL,
hor_codigo VARCHAR(20) NOT NULL,
atr_berco VARCHAR(20) NOT NULL,
atr_origem VARCHAR(50) NOT NULL,
atr_destino VARCHAR(50) NOT NULL
);
CREATE TABLE HORARIO (
hor_codigo VARCHAR(20) NOT NULL,
hor_prevchegada VARCHAR(20) NOT NULL,
hor_chegada VARCHAR(20) NOT NULL,
hor_saida VARCHAR(20) NOT NULL
);
CREATE TABLE EMPREGADO (
emp_cpf VARCHAR(20) NOT NULL,
emp_nome VARCHAR(255) NOT NULL,
emp_endereco VARCHAR(255) NOT NULL,
por_codigo VARCHAR(20) NOT NULL,
emp_cargo VARCHAR(50) NOT NULL
);
2.1.2. Definição das Chaves Primária e Estrangeira
ALTER TABLE PORTO ADD ( PRIMARY KEY (por_codigo));
ALTER TABLE EMBARCACAO ADD ( PRIMARY KEY (emb_codigo));
ALTER TABLE ATRACACAO ADD ( PRIMARY KEY (atr_codigo));
ALTER TABLE ATRACACAO ADD ( FOREIGN KEY (por_codigo) REFERENCES PORTO);
ALTER TABLE ATRACACAO ADD ( FOREIGN KEY (emb_codigo) REFERENCES EMBARCACAO);
ALTER TABLE ATRACACAO ADD ( FOREIGN KEY (hor_codigo) REFERENCES HORARIO);
ALTER TABLE HORARIO ADD ( PRIMARY KEY (hor_codigo));
ALTER TABLE EMPREGADO ADD ( PRIMARY KEY (emp_cpf));
ALTER TABLE EMPREGADO ADD ( FOREIGN KEY (por_codigo) REFERENCES PORTO);
2.1.3. Inserção das Tuplas
INSERT INTO PORTO VALUES ( '001', 'PORTO DE MANAUS', 'RUA MARQUES DE SANTA CRUZ, 25 CENTRO MANAUS-AM');
INSERT INTO PORTO VALUES ( '002', 'PORTO DE BELEM', 'AV PRESIDENTE VARGAS, 41 BELEM-PA);
INSERT INTO PORTO VALUES ( '003', 'PORTO DE MACAPA', 'RUA FILINTO MULLER, 1380 NOVO HORIZONTE MACAPA-AP');
INSERT INTO EMBARCACAO VALUES ( '1001', 'NORSUL', 'CARGA GERAL', 'WILSON SONS', 'GERMANY');
INSERT INTO EMBARCACAO VALUES ( '1002', 'TURIN EXPRESS', 'FULL CONTEINER', 'HAPAG LLOYD', 'ANTIGUA');
INSERT INTO EMBARCACAO VALUES ( '1003', 'CSAV PARANAGUA', 'FULL CONTEINER', 'LIBRA', 'BRAZIL');
INSERT INTO ATRACACAO VALUES ( '2001', '001', '1001', '3001', '11', 'BELEM', 'MACAPA');
INSERT INTO ATRACACAO VALUES ( '2002', '002', '1002', '3002', '12', 'MACAPA', 'PORTO VELHO');
INSERT INTO ATRACACAO VALUES ( '2003', '003', '1003', '3003', '13', 'MANAUS', 'SANTAREM');
INSERT INTO HORARIO VALUES ( '3001', '27/02/07 - 19H00', '27/02/07 - 19H00', '12/03/07 - 21H00');
INSERT INTO HORARIO VALUES ( '3002', '10/03/07 - 10h00', '10/03/07 - 10h20', '13/03/07 - 12h00');
INSERT INTO HORARIO VALUES ( '3003', '25/01/07 - 12h00', '25/01/07 - 12h30', '10/03/07 - 23h00');
INSERT INTO EMPREGADO VALUES ( '31302002998', 'JOAO DA SILVA', 'RUA DOS CARIJOS 32 MANAUS-AM', '001', 'ASSISTENTE');
INSERT INTO EMPREGADO VALUES ( '00393843837', 'MARCOS DE OLIVEIRA MELLO', 'RUA DAS FLORES, 555 BELEM-PA', '002', 'OPERADOR DE MAQUINAS');
INSERT INTO EMPREGADO VALUES ( '39394942298', 'EDUARDO BRAZAO', 'AV JOAO MAURICIO, 394 MACAPA-AP', '003', 'FAXINEIRO');
INSERT INTO EMPREGADO VALUES ( '33849399303', 'EMILIO SANTIAGO', 'RUA MAOME,31 MANAUS-AM', '001', 'GERENTE');
2.2. Testes de Verificação
Inicialmente, foram realizadas algumas consultas simples para verificar o sucesso da criação das tabelas.
SELECT *
FROM PORTO
POR_CODIGO |
POR_NOME |
POR_ENDERECO |
001 |
PORTO DE MANAUS |
RUA MARQUES DE SANTA CRUZ, 25 CENTRO MANAUS-AM |
002 |
PORTO DE BELEM |
AV PRESIDENTE VARGAS, 41 BELEM-PA |
003 |
PORTO DE MACAPA |
RUA FILINTO MULLER, 1380 NOVO HORIZONTE MACAPA-AP |
|

|
SELECT *
FROM EMBARCACAO
EMB_CODIGO |
EMB_NOME |
EMB_CLASSE |
EMB_AGENCIA |
EMB_BANDEIRA |
1001 |
NORSUL |
CARGA GERAL |
WILSON SONS |
GERMANY |
1002 |
TURIN EXPRESS |
FULL CONTEINER |
HAPAG LLOYD |
ANTIGUA |
1003 |
CSAV PARANAGUA |
FULL CONTEINER |
LIBRA |
BRAZIL |
|
|
|
SELECT *
FROM ATRACACAO
_CODIGO |
POR_CODIGO |
EMB_CODIGO |
HOR_CODIGO |
ATR_BERCO |
ATR_ORIGEM |
ATR_DESTINO |
2001 |
001 |
1001 |
3001 |
11 |
BELEM |
MACAPA |
2002 |
002 |
1002 |
3002 |
12 |
MACAPA |
PORTO VELHO |
2003 |
003 |
1003 |
3003 |
13 |
MANAUS |
SANTAREM |
|

|
SELECT *
FROM HORARIO
HOR_CODIGO |
HOR_PREVCHEGADA |
HOR_CHEGADA |
HOR_SAIDA |
3001 |
27/02/07 - 19H00 |
27/02/07 - 19H00 |
12/03/07 - 21H00 |
3002 |
10/03/07 - 10h00 |
10/03/07 - 10h20 |
13/03/07 - 12h00 |
3003 |
25/01/07 - 12h00 |
25/01/07 - 12h30 |
10/03/07 - 23h00 |
|
|
SELECT *
FROM EMPREGADO
EMP_CPF |
EMP_NOME |
EMP_ENDERECO |
POR_CODIGO |
EMP_CARGO |
31302002998 |
JOAO DA SILVA |
RUA DOS CARIJOS 32 MANAUS-AM |
001 |
ASSISTENTE |
00393843837 |
MARCOS DE OLIVEIRA MELLO |
RUA DAS FLORES, 555 BELEM-PA |
002 |
OPERADOR DE MAQUINAS |
39394942298 |
EDUARDO BRAZAO |
AV JOAO MAURICIO, 394 MACAPA-AP |
003 |
FAXINEIRO |
33849399303 |
EMILIO SANTIAGO |
RUA MAOME,31 MANAUS-AM |
001 |
GERENTE |
|
|
2.2.1. 1ª Consulta
“Listar todas as informações do Porto de Manaus”.
SELECT *
FROM PORTO
WHERE por_nome=’PORTO DE MANAUS’
POR_CODIGO |
POR_NOME |
POR_ENDERECO |
001 |
PORTO DE MANAUS |
RUA MARQUES DE SANTA CRUZ, 25 CENTRO MANAUS-AM |
|

|
2.2.2. 2ª Consulta
“Listar os horários de chegada das embarcações em cada berço.”
SELECT ATRACACAO.atr_berco, HORARIO.hor_chegada
FROM ATRACACAO INNER JOIN HORARIO
ON ATRACACAO.hor_codigo=HORARIO.hor_codigo;
ATR_BERCO |
HOR_CHEGADA |
11 |
27/02/07 - 19H00 |
12 |
10/03/07 - 10h20 |
13 |
25/01/07 - 12h30 |
|

|
|
|
2.2.3. 3ª Consulta
“Listar o código, nome e bandeira da embarcação, o código da atracação e o código e o nome do porto cuja embarcação possui como destino Macapá.”
SELECT EMBARCACAO.emb_codigo, EMBARCACAO.emb_nome, EMBARCACAO.emb_bandeira, ATRACACAO.atr_codigo, PORTO.por_codigo, PORTO.por_nome
FROM ATRACACAO INNER JOIN EMBARCACAO ON ATRACACAO.emb_codigo=EMBARCACAO.emb_codigo INNER JOIN PORTO
ON ATRACACAO.por_codigo=PORTO.por_codigo
WHERE ATRACACAO.atr_destino='MACAPA';
EMB_CODIGO |
EMB_NOME |
EMB_BANDEIRA |
ATR_CODIGO |
POR_CODIGO |
POR_NOME |
1001 |
NORSUL |
GERMANY |
2001 |
001 |
PORTO DE MANAUS |
|
|
|
|

|
|
2.3. Sistema de Dicionário de Dados
A versão 1.0 do Sistema de Dicionário de Dados do Protótipo de Aplicativo de BD da temática Portos está representada a seguir.
2.3.1. Dicionário de Dados
O Dicionário de Dados é composto pela descrição de Atributos, Entidades, Relacionamentos e Objetos associados.
PORTO: Esta tabela representa o cadastro dos portos e apresenta 3 atributos, descritos a seguir.
- #por_codigo: Chave primária, utilizado para identificar os portos. É do tipo VARCHAR(20) e não deve ser nulo. Sua exclusão implica na exclusão de todos os registros relacionados a ele.
- por_nome: Atributo que indica o nome do porto. É do tipo VARCHAR(200) e não pode ser nulo.
- por_endereco: Atributo que indica o endereço do porto. É do tipo VARCHAR(200) e não pode ser nulo.
Os dados somente podem ser inseridos ou alterados pelos operadores do Sistema Gerenciador de Banco de Dados e não há restrições quanto à sua integridade.
EMBARCACAO: Esta tabela representa o cadastro das embarcações e apresenta cinco atributos, descritos a seguir.
- #emb_codigo: Chave primária, usado para identificar as embarcações. É do tipo VARCHAR(20) e não pode ser nulo. Sua exclusão implica na exclusão de todos registros relacionados a ele.
- emb_nome: Atributo que indica o nome da embarcação. É do tipo VARCHAR(200) e não pode ser nulo.
- emb_classe: Atributo que indica a classe da embarcação, ou seja, indica qual o tipo da mesma. É do tipo VARCHAR(200) e não pode ser nulo.
- emb_agencia: Atributo que indica a agencia da embarcação. É do tipo VARCHAR(200) e não pode ser nulo.
- emb_bandeira: Atributo que indica a bandeira da embarcação, ou seja, indica o país de origem da mesma. É do tipo VARCHAR(200) e não pode ser nulo.
Os dados somente podem ser inseridos ou alterados pelos operadores do Sistema Gerenciador de Banco de Dados e não há restrições quanto à sua integridade.
ATRACACAO: Esta tabela representa os dados relativos à atracação da embarcação nos portos, possuindo referência às tabelas PORTO, EMBARCACAO e HORARIO. Apresenta sete atributos, descritos a seguir.
- #atr_codigo: Chave primária, usado para identificar as atracações das embarcações. É do tipo VARCHAR(20) e não pode ser nulo. Sua exclusão implica na exclusão de todos registros relacionados a ele.
- por_codigo: Chave estrangeira importada da tabela PORTO.
- emb_codigo: Chave estrangeira importada da tabela EMBARCACAO.
- hor_codigo: Chave estrangeira importada da tabela HORARIO.
- atr_berco: Atributo que indica o berço relativo à atracação. É do tipo VARCHAR(20) e não pode ser nulo.
- atr_origem: Atributo que indica o local de origem da embarçação. É do tipo VARCHAR(200) e não pode ser nulo.
- atr_destino: Atributo que indica o local de destino da embarçação. É do tipo VARCHAR(200) e não pode ser nulo.
Os dados somente podem ser inseridos ou alterados pelos operadores do Sistema Gerenciador de Banco de Dados e não há restrições quanto à sua integridade.
HORARIO: Esta tabela representa as datas e horários relativos à atracação da embarcação. Apresenta quatro atributos, descritos a seguir.
- #hor_codigo: Chave primária, usado para identificar os horários. É do tipo VARCHAR(20) e não pode ser nulo. Sua exclusão implica na exclusão de todos registros relacionados a ele.
- hor_prevchegada: Atributo que indica o horário previsto de chegada da embarcação. É do tipo VARCHAR(20) e não pode ser nulo.
- hor_chegada: Atributo que indica o horário de chegada da embarcação. É do tipo VARCHAR(20) e não pode ser nulo.
- hor_prevsaida: Atributo que indica o horário previsto de saída da embarcação. É do tipo VARCHAR(20) e não pode ser nulo.
Os dados somente podem ser inseridos ou alterados pelos operadores do Sistema Gerenciador de Banco de Dados e não há restrições quanto à sua integridade.
EMPREGADO: Esta tabela representa o cadastro dos empregados dos portos e está relacionada a PORTO. Apresenta cinco atributos, descritos a seguir.
- #emp_cpf: Chave primária, usado para identificar os empregados. É do tipo VARCHAR(20) e não pode ser nulo. Sua exclusão implica na exclusão de todos registros relacionados a ele.
- emp_nome: Atributo que indica o nome do empregado. É do tipo VARCHAR(255) e não pode ser nulo.
- emp_endereco: Atributo que indica o endereço do empregado. É do tipo VARCHAR(255) e não pode ser nulo.
- por_codigo: Atributo que indica o código do porto o empregado trabalha. É do tipo VARCHAR(20) e não pode ser nulo.
- emp_cargo: Atributo que indica o cargo ocupado pelo empregado. É do tipo VARCHAR(50) e não pode ser nulo.
Os dados somente podem ser inseridos ou alterados pelos operadores do Sistema Gerenciador de Banco de Dados e não há restrições quanto à sua integridade.
2.3.2. Diretório de Dados
O Diretório de Dados descreve os processos associados às entidades.
- A entidade PORTO está relacionada com a entidade ATRACACAO através da chave primária por_codigo. Cada PORTO pode ter mais de uma ATRACACAO, enquanto que cada ATRACACAO só pode ocorrer em um PORTO.
- A entidade EMBARCACAO está relacionada com a entidade ATRACACAO através da chave primária emb_codigo. Cada EMBARCACAO pode ter mais de uma ATRACACAO, enquanto que cada ATRACACAO somente pode estar relacionada a uma EMBARCACAO.
- A entidade HORARIO está relacionada com a entidade ATRACACAO através da chave primária hor_codigo. Cada HORARIO pode ocorrer em mais de uma ATRACACAO, enquanto que cada ATRACACAO somente pode ocorrer em um HORARIO.
- A entidade PORTO está relacionada com a entidade EMPREGADO através da chave primária por_codigo. Cada PORTO pode ter mais de um EMPREGADO, enquanto que cada EMPREGADO pode trabalhar somente em um PORTO.
2.3.3. Dicionarização de Recurso de Dados
SGBD: Oracle 10g Spatial
Address: http://seti.fcmf.ita.br/
Alias: Orcl
Projeto: Protótipo de Aplicativo de Banco de Dados
SO: Windows XP Media Center Edition Version 2002 Service Pack 2
Memória RAM: 1GB
2.3.4. Dicionário de Metadados

Figura 1 – Dicionário de Metadados do Protótipo de Aplicativo de BD
2.3.5. Conversão do Aplicativo de Banco de Dados
2.3.5.1. Modelo de Dados Hierárquico
Figura 2 – Modelo de Dados Hierárquico
2.3.5.2. Modelo de Dados Rede

Figura 3 – Modelo de Dados Rede
2.3.5.3. Modelo Orientado a Objeto

Figura 4 – Modelo Orientado a Objetos
3. Conclusão
Nesta lista de exercícios foi implementada a Terceira Forma Normal do Protótipo de Aplicativo de Banco de Dados da temática de Portos, do Setor de Transportes. Também foi realizada conversão da 3ªFN do Protótipo de Aplicativo de BD no Modelo de Dados Relacional para os Modelos Hierárquico, Rede e Orientado a Objetos.
Através desses procedimentos, resultamos na Versão 1.0 do Sistema de Dicionário de Dados e nos Modelos de Dados Relacional, Hierárquico, Rede e Orientado a Objetos. Dessa forma, o Protótipo de Aplicativo de BD já é passível de ser integrado às demais temáticas do Setor de Transportes, que são as temáticas de Rotas, Embarcações e Cargas.
|