Você está na página 1de 11

RELATÓRIO TÉCNICO PROJETO DE BANCO DE DADOS NÃO ESTRUTURADO

LUIS ALEXANDRE DA SILVA

PROJETO:

Construção de um modelo de dados relacional (ORACLE) que atenda a realidade de


uma FINTECH, que será posteriormente passado para uma estrutura de um modelo
não relacional (MONGODB).

REQUISITOS:

A construção dos requisitos para o banco de dados, foram gerados a partir do


modelo de 3 artefatos, denominados extratos. Como segue a visualização das 3
variações, ilustrados pela Figura 1, Figura 2 e Figura 3.

-------------------------------

EXTRATO 1

-------------------------------

0001 BANCO DO BRASIL

1952 AGÊNCIA CENTRAL

BAURU – SP

-------------------------------

NÚMERO CONTA: 11123

-------------------------------

JOÃO SILVA MASCULINO

CPF: 111.111.111-11

-------------------------------

DATA DESCRIÇÃO VALOR

15/08/2022 10:00:00 DEPÓSITO 1000

17/08/2022 20:00:00 CINEMA -40

18/08/2022 13:00:00 PADARIA -10.55

-------------------------------

Figura 1 - ilustração do extrato 1.


-------------------------------

EXTRATO 2

-------------------------------

0001 BANCO DO BRASIL

1952 AGÊNCIA CENTRAL

BAURU – SP

-------------------------------

NÚMERO CONTA: 22234

-------------------------------

MARIA APARECIDA SOUZA FEMININO

CPF: 222.222.222-22

-------------------------------

DATA DESCRIÇÃO VALOR

-------------------------------

Figura 2 - ilustração do extrato 2.

-------------------------------

EXTRATO 3

-------------------------------

0345 BANCO ITAU

9386 AGÊNCIA DA PRAÇA

AGUDOS – SP

-------------------------------

NÚMERO CONTA: 19536

-------------------------------

JOÃO SILVA MASCULINO

CPF: 111.111.111-11
-------------------------------

DATA DESCRIÇÃO VALOR

20/10/2000 15:00:00 COMBUSTÍVEL -135

-------------------------------

Figura 3 - ilustração do extrato 3.

CONSTRUÇÃO DO MODELO DE DADOS:

Segue scripts de construção do modelo de dados relacional, através dos CREATE


TABLES:

DROP TABLE LANCAMENTO;


DROP TABLE CONTA;
DROP TABLE CLIENTE;
DROP TABLE AGENCIA;
DROP TABLE CIDADE;
DROP TABLE ESTADO;
DROP TABLE BANCO;

CREATE TABLE BANCO(


NUMBANCO NUMBER(4) PRIMARY KEY,
NOME VARCHAR2(120) NOT NULL,
CONSTRAINT UQ_NOME_BANCO UNIQUE (NOME)
);

CREATE TABLE ESTADO(


SIGLA CHAR (2) PRIMARY KEY,
NOME VARCHAR2(120) NOT NULL,
CONSTRAINT UQ_NOME_ESTADO UNIQUE (NOME)
);

CREATE TABLE CIDADE(


ID_CID NUMBER(4) PRIMARY KEY,
NOME VARCHAR2(120) NOT NULL,
SIGLA CHAR (2) NOT NULL,
CONSTRAINT FK_CIDADE_ESTADO FOREIGN KEY (SIGLA) REFERENCES
ESTADO(SIGLA)
);

CREATE TABLE AGENCIA(


NUM_AGENCIA NUMBER(4),
NUMBANCO NUMBER(4),
NOME VARCHAR2(120) NOT NULL,
ID_CID NUMBER(4) NOT NULL,
CONSTRAINT PK_AGENCIA PRIMARY KEY (NUMBANCO, NUM_AGENCIA),
CONSTRAINT FK_BANCO_AGENCIA FOREIGN KEY (NUMBANCO) REFERENCES
BANCO(NUMBANCO),
CONSTRAINT FK_CIDADE_AGENCIA FOREIGN KEY (ID_CID) REFERENCES
CIDADE(ID_CID)
);

CREATE TABLE CLIENTE(


CPF CHAR(14) PRIMARY KEY,
NOME VARCHAR2(120) NOT NULL,
GENERO CHAR(1) NOT NULL,
CONSTRAINT CK_GENERO_CLIENTE CHECK (GENERO IN ('M', 'F'))
);

CREATE TABLE CONTA(


NUM_AGENCIA NUMBER(4),
NUMBANCO NUMBER(4),
CPF CHAR(14) NOT NULL,
NUM_CONTA NUMBER(5),
CONSTRAINT PK_CONTA PRIMARY KEY (NUMBANCO, NUM_AGENCIA,
NUM_CONTA),
CONSTRAINT FK_CONTA_AGENCIA FOREIGN KEY (NUM_AGENCIA,NUMBANCO)
REFERENCES AGENCIA(NUM_AGENCIA,NUMBANCO),
CONSTRAINT FK_CONTA_CLIENTE FOREIGN KEY (CPF) REFERENCES
CLIENTE(CPF)
);

CREATE TABLE LANCAMENTO(


DESCRICAO VARCHAR2(120) NOT NULL,
VALOR NUMBER(10,2) NOT NULL,
DATA DATE,
NUM_AGENCIA NUMBER(4),
NUMBANCO NUMBER(4),
NUM_CONTA NUMBER(5),
CONSTRAINT PK_LANCAMENTO PRIMARY KEY (NUMBANCO, NUM_AGENCIA,
NUM_CONTA, DATA),
CONSTRAINT FK_LANCAMENTO_AGENCIA FOREIGN KEY (NUM_AGENCIA,NUMBANCO)
REFERENCES AGENCIA(NUM_AGENCIA,NUMBANCO),
CONSTRAINT FK_LANCAMENTO_CONTA FOREIGN KEY (NUMBANCO,
NUM_AGENCIA,NUM_CONTA) REFERENCES CONTA(NUMBANCO,
NUM_AGENCIA,NUM_CONTA)
);

INSERIR DADOS DENTRO DAS TABELAS:


Segue scripts de inserção dos dados dos extratos nas tabela INSERT INTO:

INSERT INTO BANCO (NUMBANCO, NOME) VALUES (1, 'BANCO DO BRASIL');


INSERT INTO BANCO (NUMBANCO, NOME) VALUES (345, 'BANCO ITAU');
COMMIT;
INSERT INTO ESTADO(SIGLA, NOME) VALUES ('SP', 'SÃO PAULO');
COMMIT;
INSERT INTO CIDADE (ID_CID, NOME, SIGLA) VALUES (1, 'BAURU', 'SP');
INSERT INTO CIDADE (ID_CID, NOME, SIGLA) VALUES (2, 'AGUDOS', 'SP');
COMMIT;
INSERT INTO AGENCIA (NUMBANCO, NUMAGENCIA, NOME, ID_CID)
VALUES (1, 1952, 'AGÊNCIA CENTRAL', 1);
INSERT INTO AGENCIA (NUMBANCO, NUMAGENCIA, NOME, ID_CID)
VALUES (345, 9386, 'AGÊNCIA DA PRAÇA', 2);
COMMIT;
INSERT INTO CLIENTE (CPF, NOME, GENERO)
VALUES ('111.111.111-11', 'JOÃO SILVA', 'M');
INSERT INTO CLIENTE (CPF, NOME, GENERO)
VALUES ('222.222.222-22', 'MARIA APARECIDA SOUZA','F');
COMMIT;
INSERT INTO CONTA(NUMBANCO, NUMAGENCIA, NUMCONTA, CPF)
VALUES(1, 1952, 11123, '111.111.111-11');
INSERT INTO CONTA(NUMBANCO, NUMAGENCIA, NUMCONTA, CPF)
VALUES(1, 1952, 22234, '222.222.222-22');
INSERT INTO CONTA(NUMBANCO, NUMAGENCIA, NUMCONTA, CPF)
VALUES(345, 9386, 19536, '111.111.111-11');
COMMIT;
INSERT INTO LANCAMENTO(NUMBANCO, NUMAGENCIA, NUMCONTA, DATA, DESCRICAO,
VALOR)
VALUES (1, 1952, 11123, TO_DATE('15/08/2022 10:00:00', 'DD/MM/YYYY
HH24:MI:SS'), 'DEPÓSITO', 1000);
INSERT INTO LANCAMENTO(NUMBANCO, NUMAGENCIA, NUMCONTA, DATA, DESCRICAO,
VALOR)
VALUES (1, 1952, 11123, TO_DATE('17/08/2022 20:00:00', 'DD/MM/YYYY
HH24:MI:SS'), 'CINEMA' , -40);
INSERT INTO LANCAMENTO(NUMBANCO, NUMAGENCIA, NUMCONTA, DATA, DESCRICAO,
VALOR)
VALUES (1, 1952, 11123, TO_DATE('18/08/2022 13:00:00', 'DD/MM/YYYY
HH24:MI:SS'), 'PADARIA' , -10.55);
INSERT INTO LANCAMENTO(NUMBANCO, NUMAGENCIA, NUMCONTA, DATA, DESCRICAO,
VALOR)
VALUES (345, 9386, 19536, TO_DATE('20/10/2000 15:00:00', 'DD/MM/YYYY
HH24:MI:SS'), 'COMBUSTÍVEL' , -135);
COMMIT;

SELECT QUE RETORNA TODOS OS REGISTROS:

Segue scripts do SELECT que retorna todos os dados dos 3 extratos:

SELECT B.NUMBANCO, B.NOME, A.NUMAGENCIA, A.NOME, CID.NOME, CID.SIGLA,


E.NOME, C.NUMCONTA, C.CPF, CLI.NOME, CLI.GENERO, TO_CHAR(L.DATA,
'DD/MM/YYYY HH24:MI:SS')AS DATA, L.DESCRICAO, L.VALOR
FROM BANCO B
INNER JOIN AGENCIA A
ON B.NUMBANCO = A.NUMBANCO
INNER JOIN CONTA C
ON A.NUMBANCO = C.NUMBANCO
AND A.NUMAGENCIA = C.NUMAGENCIA
INNER JOIN CLIENTE CLI
ON C.CPF = CLI.CPF
LEFT JOIN LANCAMENTO L
ON C.NUMBANCO = L.NUMBANCO
AND C.NUMAGENCIA = L.NUMAGENCIA
AND C.NUMCONTA = L.NUMCONTA
INNER JOIN CIDADE CID
ON A.ID_CID = CID.ID_CID
INNER JOIN ESTADO E
ON CID.SIGLA = E.SIGLA

TRANSFORMAÇÃO DOS EXTRATOS PARA JSON:


extrato 1

{
"numconta": 11123,
"banco": {
"numbanco": 1,
"nomebanco": "BANCO DO BRASIL",
"localizacao": "BAURU SP"
},
"agencia": {
"numagencia": 1952,
"nomeagencia": "AGÊNCIA CENTRAL",
"localizacao": "BAURU SP"
},
"cliente": {
"nomecliente": "JOÃO SILVA",
"cpf": "111.111.111-11",
"genero": "MASCULINO"
},
"lancamentos": [
{
"data": "15/08/2022 10:00:00",
"descricao": "DEPÓSITO",
"valor": 1000
},
{
"data": "17/08/2022 20:00:00",
"descricao": "CINEMA",
"valor": -40
},
{
"data": "18/08/2022 13:00:00",
"descricao": "PADARIA",
"valor": -10.55
}
]
}

extrato 2:

{
"numconta": 22234,
"banco": {
"numbanco": 1,
"nomebanco": "BANCO DO BRASIL",
"localizacao": "BAURU SP"
},
"agencia": {
"numagencia": 1952,
"nomeagencia": "AGÊNCIA CENTRAL",
"localizacao": "BAURU SP"
},
"cliente": {
"nomecliente": "MARIA APARECIDA SOUZA",
"cpf": "222.222.222-22",
"genero": "FEMININO"
}
}

extrato 3:

{
"numconta": 19536,
"banco": {
"numbanco": 345,
"nomebanco": "BANCO ITAU",
"localizacao": "BAURU SP"
},
"agencia": {
"numagencia": 9386,
"nomeagencia": "AGÊNCIA DA PRAÇA",
"localizacao": "AGUDOS – SP"
},
"cliente": {
"nomecliente": "JOÃO SILVA",
"cpf": "111.111.111-11",
"genero": "MASCULINO"
},
"lancamentos": [
{
"data": "20/10/2000 15:00:00",
"descricao": "COMBUSTÍVEL",
"valor": -135
}
]
}

EXPERIMENTAÇÃO DO MONGODB

Para experimentação utilizando o banco de dados MONGODB, será utilizada uma instância
gratuita, que pode ser criada no site: https://cloud.mongodb.com/. Por isso, é importante
estar com a instância criada e ativa, bem como ter baixado o cliente SHELL para sua
máquina.

Observação, tudo que tiver a > indica que o comando deve ser aplicado dentro do cliente
logado do MongoDB.

Mongodb LOCAL:

1- Abrir uma tela de terminal (CMD), redirecionar para a pasta mongodb, subpasta bin e
digitar o seguinte comando para iniciar o mongodb local:

c:\mongodb\bin>mongod --port 27017 --dbpath c:\mongodb\data\db

Comentário: a janela deve ficar aberta todo o tempo que for usar o
mongodb local.

2- Abrir uma segunda janela de terminal(CMD), redirecionar para a pasta mongodb,


subpasta bin e digitar o seguinte comando para usar o terminal de aplicação de comando do
mongodb.

c:\mongodb\bin>mongosh "mongodb://localhost:27017"

Comentário: todos os comandos devem ser aplicados nessa janela,


menos os comandos referente ao MONGOIMPORT

3- Abrir uma terceira janela(CMD), redirecionar para a pasta mongodb, subpasta bin e
digitar o seguinte comando para usar o MONGOIMPORT e carregar os arquivos json.
c:\mongodb\bin>./mongoimport --db banco --collection conta --type
json --file c:\mongodb\bin\Conta_1.json

c:\mongodb\bin>./mongoimport --db banco --collection conta --type


json --file c:\mongodb\bin\Conta_2.json

c:\mongodb\bin>./mongoimport --db banco --collection conta --type


json --file c:\mongodb\bin\Conta_3.json

Criando o banco

> use banco

switched to db banco

Comentários: Caso tenha dado certo terá a mesma resposta acima.

Criando a Collection

> db.createCollection("conta")

{ ok: 1 }

-Carregar os arquivos Conta_1.json,Conta_2.json e Conta_3.json via MongoImport

Para carregar os arquivos json será necessário fazer fora do cliente do MongoDB, utilizando
o comando mongoimport, diretamente do diretório bin do cliente.

>mongoimport--urimongodb+srv://
dbuser:Mongodb2023@cluster0.dvrplij.mongodb.net/banco --collection
conta --type json --file Conta_1.json

>mongoimport--urimongodb+srv://
dbuser:Mongodb2023@cluster0.dvrplij.mongodb.net/banco --collection
conta --type json --file Conta_2.json

>mongoimport--urimongodb+srv://
dbuser:Mongodb2023@cluster0.dvrplij.mongodb.net/banco --collection
conta --type json --file Conta_3.json

Deletar todos os arquivos .json

É o equivalente ao delete sem where do modelo relacional aplicado em uma tabela de


dados.

> db conta.remove({})

{ acknowledged: true, deletedCount: 3 }

Excluir por um determinado filtro:

Apagar filtrando o atributo número da conta igual a

> db.conta.deleteMany({“numconta”:19536})
{ acknowledged: true, deletedCount: 1 }

Apagar documentos pelo número da agência, que sejam iguais a 1952

> db.conta.deleteMany({“agencia.numagencia”:1952})

{ acknowledged: true, deletedCount: 2 }

> db.conta.deleteMany({“lancamentos.descricao”:”PADARIA”})

{ acknowledged: true, deletedCount: 0 }

Alterar o valor de um atributo com base em um filtro:

Alterar o valor do nome do cliente para Pedro José, filtrando pelo atributo número da conta
igual a 19536.

>db.conta.updateOne({numconta:19536},{$set:
{"cliente.nomecliente":'Pedro Jose'}})
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

Alterar a descrição do lançamento PADARIA para PANIFICADORA. Se existir mais de uma


descrição nos lançamentos modificar todos.

>db.conta.updateMany({"lancamentos.descricao":'PADARIA'},{$set:
{"lancamentos.$[elem].descricao":'PANIFICADORA'}},{arrayFilters:
[{"elem.descricao":"PADARIA"}]})

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

Pesquisar um determinado documento, ou determinados documentos por um filtro

Filtrar todos os documentos que tenham o atributo número da conta igual a 19536

>db.conta.find({"numconta":19536})

Pesquisar por um atributo ou por mais de um atributo usando and. Pesquisar os


documentos que tenham número da conta igual a 22234 e (and) o cpf do cliente igual a
222.222.222-22.

>db.conta.find ($and:[])

Adicionando um novo lançamento do documento sem lançamento


 No documento de número de conta igual a 22234, com valores
para data igual a 2022-05-29, descrição com valor a imposto e
com valor igual a 100.

Comparativo parcial entre comando do banco de dados relacional (ORACLE) e banco de


dados não relacional funcionamento em documentos (MONGODB)

AÇÃO BD Relacional BD Não Relacional Diferença/Comentários


Modelagem de Modelo de Entidade Modelo de Dados Divisão entre várias
Dados Relacionamento Agregado tabelas. Criação de
(MER) um documento no
formato JSON
Inserir
Alterar (atributo
normal)
Alterar (atributo em
lista)
Deletar (sem filtro
ou com filtro)
Pesquisar (um
atributo)
Pesquisar com AND
Adicionar um
elemento na lista
Lançamentos

Você também pode gostar