1. Objetivo
1) Implementar a Terceira Forma Normal (3ªFN) do seu
Protótipo de Aplicativo de Banco de Dados (BD) utilizando um
Modelo de Dados Relacional em um Sistema Gerenciador de Banco
de Dados (SGBD) previamente escolhido e testar a sua
funcionalidade, visando reduzir o desperdício de recursos 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 Holding (BDH); e
2) Pesquisar os Modelos de Dados Hierárquico, Rede e
Orientado a Objetos, e Converter a 3ªFN do seu 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. Procedimento
Parte 1)
Inicialmente vamos testar o BD desenvolvido em sua 3FN, para isso, inicialmente criamos
as TABLES no SGBD Oracle 10g Spatial, através da execução do seguinte script SQL:
CREATE TABLE EMBARCACAO (
emb_reg VARCHAR(20) NOT NULL,
emb_nome VARCHAR(40) NOT NULL,
tip_num VARCHAR(20) NOT NULL,
pro_num VARCHAR(20) NOT NULL,
loc_num VARCHAR(20) NOT NULL
);
CREATE TABLE DESCRICAO (
emb_reg VARCHAR(20) NOT NULL,
des_peso VARCHAR(20) NOT NULL,
des_largura VARCHAR(20) NOT NULL,
des_comprimento VARCHAR(20) NOT NULL,
des_altura VARCHAR(20) NOT NULL,
des_material VARCHAR(20) NOT NULL,
des_propulsao VARCHAR(20) NOT NULL
);
CREATE TABLE CARGA (
emb_reg VARCHAR(20) NOT NULL,
car_num VARCHAR(20) NOT NULL,
car_tipo VARCHAR(20) NOT NULL,
car_peso VARCHAR(20) NOT NULL,
car_perigo VARCHAR(20) NOT NULL
);
CREATE TABLE PROPRIETARIO (
pro_num VARCHAR(20) NOT NULL,
pro_nome VARCHAR(20) NOT NULL,
pro_CNPJ VARCHAR(20) NOT NULL,
pro_CPF VARCHAR(20) NOT NULL
);
CREATE TABLE TIPO (
tip_num VARCHAR(20) NOT NULL,
tip_nome VARCHAR(20) NOT NULL,
tip_proposito VARCHAR(20) NOT NULL
);
CREATE TABLE LOCALIAZCAO (
emb_reg VARCHAR(20) NOT NULL,
loc_georef MDSYS.SDO_GEOMETRY,
loc_origemdados VARCHAR(20) NOT NULL
);
ALTER TABLE EMBARCACAO
ADD ( PRIMARY KEY (emb_reg));
ALTER TABLE PROPRIETARIO
ADD ( PRIMARY KEY (pro_num));
ALTER TABLE TIPO
ADD ( PRIMARY KEY (tip_num));
ALTER TABLE CARGA
ADD ( PRIMARY KEY (car_num));
ALTER TABLE EMBARACACAO
ADD ( FOREIGN KEY (tip_num) REFERENCES TIPO);
ALTER TABLE EMBARACACAO
ADD ( FOREIGN KEY (pro_num) REFERENCES TIPO);
ALTER TABLE DESCRICAO
ADD ( FOREIGN KEY (emb_reg) REFERENCES EMBARCACAO);
ALTER TABLE CARGA
ADD ( FOREIGN KEY (car_num) REFERENCES EMBARCACAO);
ALTER TABLE LOCALIZACAO
ADD ( FOREIGN KEY (emb_reg) REFERENCES EMBARCACAO);
Prosseguimos então para a inserção da massa de dados para teste, que foi realizada com o seguinte script SQL:
INSERT INTO TIPO VALUES
('1','militar', 'patrulhamento');
INSERT INTO TIPO VALUES
('2','social', 'carregamento');
INSERT INTO TIPO VALUES
('3','social', 'turismo');
INSERT INTO PROPRIETARIO VALUES
('1','joao da silva','123123', '1111111111');
INSERT INTO PROPRIETARIO VALUES
('2','FAB','56796566', '1234567890');
INSERT INTO EMBARCACAO VALUES
('1','Mariner', '1','1');
INSERT INTO EMBARCACAO VALUES
('2','Patrul', '1','2');
INSERT INTO EMBARCACAO VALUES
('3', 'TOURISTER', '3', '1');
NSERT INTO DESCRICAO VALUES
('1','60 ton', '20','30','5','madeira','diesel');
INSERT INTO DESCRICAO VALUES
('2','19 ton', '4','2','1','fibra de vidro','remo');
INSERT INTO USER_SDO_GEOM_METADATA
(TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ('LOCALIZACAO', 'loc_georef', MDSYS.SDO_DIM_ARRAY
(MDSYS.SDO_DIM_ELEMENT('LONG', -73.994423393, -28.835883971, 5.0E-8), MDSYYS.SDO_DIM_ELEMENT('LAT', -33.752061377, 5.271806856, 5.0E-8)), NULL);
CREATE INDEX LOCALIZACAO_SDX ON LOCALIZACAO(loc_georef) INDEXTYPE IS
MDSYS.SPATIAL_INDEX PARAMETERS ('SDO_INDX_DIMS=2 LAYER_GTYPE="POINT"');
INSERT INTO LOCALIZACAO VALUES
('1', MDSYS.SDO_GEOMETRY(2001,NULL,MDSYS.
SDO_POINT_TYPE(-4.2,-35.3,50.0),NULL,NULL),'radar');
INSERT INTO LOCALIZACAO VALUES
('2', SDO_GEOMETRY(2001, 8307,
SDO_POINT_TYPE(-15.6754, 43.7, NULL), NULL, NULL),'GPS');
INSERT INTO LOCALIZACAO VALUES
('3', SDO_GEOMETRY(2001, 8307,
SDO_POINT_TYPE(5.70, -16.6789, NULL), NULL, NULL),'radar');
Prosseguimos então para a elaboração e criação da Queries para testes:
Query 1) Exibir todas as embarcações cadastradas
SELECT * FROM EMBARCACAO;
| EMB_REG |
EMB_NOME |
TIP_NUM |
PRO_NUM |
| 1 |
Mariner |
1 |
1 |
| 2 |
Patrul |
1 |
2 |
| 3 |
TOURISTER |
3 |
1 |
Query 2) Exibir o tipo da embarcação com o nome Mariner
SELECT * FROM EMBARCACAO
INNER JOIN TIPO ON EMBARCACAO.tip_num = TIPO.tip_num;
| EMB_REG |
EMB_NOME |
TIP_NUM |
PRO_NUM |
TIP_NUM |
TIP_NOME |
TIP_PROPOSITO |
| 1 |
Mariner |
1 |
1 |
1 |
militar |
patrulhamento |
| 2 |
Patrul |
1 |
2 |
1 |
militar |
patrulhamento |
| 3 |
TOURISTER |
3 |
1 |
3 |
social |
turismo |
Query 3) Mostrar a descrição das embarcações militares
SELECT EMBARCACAO.emb_nome, DESCRICAO.* FROM EMBARCACAO, DESCRICAO,TIPO
WHERE EMBARCACAO.tip_num = TIPO.tip_num and TIPO.tip_nome = 'militar' and DESCRICAO.emb_reg = EMBARCACAO.emb_reg;
| EMB_NOME |
EMB_REG |
DES_PESO |
DES_LARGURA |
DES_COMPRIMENTO |
DES_ALTURA |
DES_MATERIAL |
DES_PROPULSAO |
| Mariner |
1 |
60 ton |
20 |
30 |
5 |
madeira |
diesel |
| Patrul |
2 |
19 ton |
4 |
2 |
1 |
fibra de vidro |
remo |
Query 4) Exibir as distâncias entre as embarcações e a interseccao do Equador com Greenwich
SELECT EMBARCACAO.emb_nome, SDO_GEOM.SDO_DISTANCE(TELEFONE_MOVEL.tel_pos,MDSYS.SDO_GEOMETRY(2001,NULL,MDSYS.SDO_POINT_TYPE(0,0,0),NULL,NULL) AS distancia FROM EMBARCACAO;
| EMB_NOME |
DISTANCIA |
| Mariner |
8452917.82 |
| Patrul |
5085331.12 |
| TOURISTER |
1947928.95 |
Prosseguimos então para a publicação do dicionário de dados:
Dicionário de Dados
Nome |
Conteúdo |
Estrutura |
Integridade |
Segurança |
EMBARCACAO |
Entidade que contém os dados basicos da embarcação |
4 atributos |
|
Manipulação de dados (membros da equipe)
Exclusão (owner) |
emb_reg |
Registro da Embarcação |
VARCHAR(20) |
Primary Key |
NOT NULL |
tip_num |
Número do Tipo da Embarcação |
VARCHAR(20) |
Foreign Key |
NOT NULL |
pro_num |
Código do Proprietário da Embarcação |
VARCHAR(20) |
Foreing Key |
NOT NULL |
emb_nome |
Nome da Embarcação |
VARCHAR(40) |
|
NOT NULL |
PROPRIETÁRIO |
Entidade que contém os proprietários de embarcações |
4 atributos |
|
Manipulação de dados (membros da equipe)
Exclusão (owner) |
pro_num |
Código único de proprietário |
VARCHAR(20) |
Primary Key |
NOT NULL |
pro_nome |
Nome do proprietário |
VARCHAR(30) |
|
NOT NULL |
pro_CPF |
CPF do proprietário |
VARCHAR(20) |
|
|
pro_CNPJ |
CNPJ do proprietário |
VARCHAR(2) |
|
|
CARGA |
Entidade que contém as Cargas. |
5 atributos |
|
Manipulação de dados (membros da equipe)
Exclusão (owner) |
emb_reg |
Registro da embarcação que a transporta. |
VARCHAR(20) |
Foreign Key |
NOT NULL |
car_num |
Código da Carga |
VARCHAR(20) |
Primary Key |
NOT NULL |
car_tipo |
Tipo da Carga |
VARCHAR(20) |
|
NOT NULL |
car_peso |
Peso da Carga |
VARCHAR(20) |
Primary Key |
NOT NULL |
car_perigo |
Perigo da Carga |
VARCHAR(50) |
|
NOT NULL |
DESCRICAO |
Entidade que contém a descrição básica da embarcaçao |
7 atributos |
|
|
emb_reg |
Código da Embarcação |
VARCHAR(20) |
Foreign Key |
NOT NULL |
des_peso |
Peso |
VARCHAR(20) |
|
NOT NULL |
des_largura |
Largura |
VARCHAR(20) |
|
NOT NULL |
des_comprimento |
Comprimento |
VARCHAR(20) |
|
NOT NULL |
des_altura |
Altura |
VARCHAR(20) |
|
NOT NULL |
des_material |
Material |
VARCHAR(20) |
|
NOT NULL |
des_propulsao |
Propulsão |
VARCHAR(20) |
|
NOT NULL |
TIPO |
Entidade que contém informações sobre o tipo da embarcação |
3 Atributos |
|
|
tip_num |
Código do Tipo |
VARCHAR(20) |
Primary Key |
NOT NULL |
tip_nome |
Nome do tipo |
VARCHAR(20) |
|
NOT NULL |
tip_proposito |
Propósito do tipo |
|
|
NOT NULL |
LOCALIZAÇÃO |
Entidade georeferenciada |
3 atributos |
|
|
emb_reg |
Registro da Embarcação |
VARCHAR(20) |
Foreign Key |
NOT NULL |
loc_pos |
Posicao da Embarcação |
MDSYS.SDO_GEOMETRY |
|
NOT NULL |
loc_origemdado |
Origem do Posicionamento |
VARCHAR(20) |
|
NOT NULL |
Diretório de Dados
Entidade |
Atributo |
Relacionamento |
Entidade-Relacionamento |
EMBARCACAO |
(FK) tip_num |
(PK) tip_num |
TIPO |
EMBARCACAO |
(FK) pro_num |
(PK) pro_num |
PROPRIETARIO |
CARGA |
(FK) emb_reg |
(PK) emb_reg |
EMBARCACAO |
LOCALIZADOR |
(FK) emb_reg |
(PK) emb_reg |
EMBARCACAO |
DESCRICAO |
(FK) emb_reg |
(PK) emb_reg |
EMBARCACAO |
Recursos de Dados
SGBD |
Oracle 10g Spatial |
Address |
seti.fcmf.ita.br |
Alias |
ORCL |
S. O. |
Windows 2000 Pro |
RAM |
1 GB |
Disponibilidade |
24 h/dia |
Dicionário de Metadados
Parte 2)
Converteu-se então o modelo acima para o modelo hierarquico:
Em seguida foi feito o modelo rede:
Foi feito também o modelo objeto-relacional:
 |
 |
 |
3. Conclusão
Concluimos que os modelos mais adequados ao banco de dados a ser desenvolvido são: Relacional e Objeto-relacional, que fornecem uma maneira mais propícia e organizada de se construir relações 1..n e n..1.
Aprendeu-se também ao longo dessa listex como funciona, na prática a programação de um aplicativo de banco de dados utilizando SQL e o SGBD Oracle 10g.. |