Bancos de dados orientados a grafos (graph DBMS)

A teoria matemática dos grafos envolta nos bancos orientados a grafos tem como base vértices e arestas para a significação e a representação de um problema. Considere uma universidade em que os alunos podem cursar somente algumas matérias em um dado semestre. Qual abordagem orientada a grafos faria sentido nesse contexto?
R: A universidade teria ligação de aresta com os alunos; posteriormente, os alunos seriam ligados a um semestre; por fim, o semestre se ligaria às matérias.

Nos bancos relacionais, quando é necessário realizar a recuperação de dados, utiliza-se o comando Select seguido de outros parâmetros para a escolha dos dados. Dentro dos bancos orientados a grafos NoSQL, em comparativo com o Select dos bancos relacionais, qual é o comando necessário para a recuperação de dados e qual é a sua semântica dentro do Neo4j?
R: Comando Match: organiza um padrão de busca para que o engine recupere os nós e as relações de interesse; corresponde ao Select do banco de dados relacional. O padrão principal de um Match é ()-[]-(), ou seja, (um nó)-[relacionado]->(com outro nó).

Ao utilizar o banco de dados orientado a grafos Neo4j, temos diversos comandos para a criação de nós e a recuperação deles. Considere que um administrador de banco de dados realizou os seguintes comandos:

CREATE (u1:Usuário {Nome: “Marcos Manoel”, Id: 1, profissao: “Contador” })
CREATE (u2:Usuário {Nome: “Meire Peres”, Id: 2, profissao: “Vendedora” })
CREATE (s1:Sistema {Nome: “Contábil”})
CREATE (s2:Sistema {Nome: “Compras”})
CREATE (u1)-[r1:PosssuiPermissao {Permissao: “escrita”}]->(s1)
CREATE (u1)-[r2:PosssuiPermissao {Permissao: “leitura”}]->(s1)
CREATE (u2)-[r3:PosssuiPermissao {Permissao: “administrador”}]->(s2)

Ao realizar o próximo comando, qual será o retorno da busca?

MATCH (u:Usuário{Id: 1}), (m:Sistema) return *

R: O banco retornará somente o usuário Marcos Manoel e os sistemas a que ele tem acesso.

Em bancos orientados a grafos, temos entidades chamadas de vértices (nós) relacionadas por meio de arestas (relacionamentos). Cada elemento pode guardar dados entre os relacionamentos e cada relacionamento pode ter uma direção.

Considere que o seguinte grafo foi criado dentro do banco de dados Neo4j:

CREATE (u1:Pessoa {Nome: “Luiz Calaça”, Id: 1 })
CREATE (u2:Pessoa {Nome: “Alexandre Calaça”, Id: 2 })

CREATE (m1:fruta {Nome: “Pera”})
CREATE (m2:fruta {Nome: “Maça”})

CREATE (m3:fruta {Nome: “Melancia”})

CREATE (m4:fruta {Nome: “Kiwi”})
CREATE (m5:fruta {Nome: “Banana”})

CREATE (u1)-[r1:GostaForma {Forma: “suco”}]->(m1)
CREATE (u1)-[r2:GostaForma {Forma: “comer fruta”}]->(m3)
CREATE (u2)-[r3:GostaForma {Forma: “em salada de frutas”}]->(m5)
CREATE (u2)-[r4:GostaForma {Forma: “fatiada”}]->(m2)

O que se pode afirmar sobre a semântica em relação à teoria dos grafos e às direções de nó para nó?

R: Alexandre Calaça gosta de bananas em salada de fruta, bem como de maçã fatiada.

No contexto dos bancos relacionais, a cardinalidade entre as entidades impacta diretamente o banco. Isso ocorre pois uma entidade de 1 para N terá sua chave primária referenciada em uma chave estrangeira em uma tabela.

Considere os seguintes registros de uma relação de 1 para N em um banco relacional:
R: Poderia ser criado um nó com as informações das pessoas e um relacionamento tem_vestidos o ligando ao nó das informações de cada vestido.

 

Deixe um comentário