Banco de dados Relacional vs NOSQL uma abordagem conceitual

Bancos de dados baseados no modelo relacional, tem como base dois conceitos, sendo eles entidade e relacionamento. Uma entidade é um elemento formado por dados que geram os registros, também conhecido vulgarmente como tabela. Uma tabela por sua vez, é formada por uma ou mais colunas. O relacionamento se dá entre registros de tabelas distintas. No modelo relacional presenciamos fortemente a definição de tipos de dados nas colunas de cada tabela, assim como é o modelo de linguagens fortemente tipadas.

Bancos de dados não relacionais que utilizam o modelo orientado a documentos, como é o caso do MongoDB, contém um conjunto de coleções, estas coleções contém um conjunto de documentos e um conjunto de pares de valores-chaves.  Bancos de dados orientados a documentos também utilizam esquemas dinâmicos. Um esquema dinâmico parte do princípio que documentos na mesma coleção não precisam ter o mesmo conjunto de campos ou estruturas, e campos comuns em documentos de uma uma coleção podem conter tipos de dados diferentes.

Em termos de desenvolvimento de aplicações, tem-se disponíveis duas vertentes de linguagens de programação, aquelas que são fortemente tipadas, onde a declaração do tipo de uma variável é obrigatório. Java, C, C++ e C# são exemplos deste tipo de linguagem.

Do outro lado da vertente de linguagens de programação, temos as que são fracamente tipadas, estas por sua vez, possuem a característica que durante a execução do programa,  pode ser alterado o tipo do dado contido na variável. Neste caso não é necessário fazer conversões do tipo (cast). PHP, Javascript, Ruby e Python são exemplos deste tipo de linguagem.

Visto que o mapeamento do tipo de dados pode se tornar um problema na aplicação desenvolvida, alguns bancos não relacionais que utilizam o modelo orientado a documentos, como CouchDB e MongoDB, deixam o mapeamento de tipo para o desenvolvedor, não preocupando-se com o tipo do dado que está sendo armazenado. Bancos relacionais possuem a definição dos tipos dos dados que serão armazenados em cada coluna.

Em termos desenvolvimento de uma aplicação web baseada no padrão de desenvolvimento MVC, visando o suporte para as duas abordagens de armazenamento dos dados, linguagens fracamente tipadas levam vantagem, sendo possível manipular os dados de forma única para os dois modelos de banco de dados citados, relacional e não relacional. Sendo assim pode-se declarar os tipos de dados que serão armazenados no banco relacional e realizar o cast para esses dados. No caso do banco de dados não relacionais, essas definições podem ser descartadas, visto que o armazenamento não exige a padronização de tipos.

Utilizando como base a linguagem de programação PHP, caracterizada por ser uma linguagem fracamente tipada, tem-se disponíveis duas bibliotecas que facilitam a manipulação da camada de persistência em ambas as abordagens de banco de dados, sendo elas MongoClient para a utilização do banco de dados MongoDB e no caso de bancos relacionais, a biblioteca PDO que é caracterizada por dar suporte a múltiplos bancos relacionais, sendo eles MySQL, Oracle, PostgreSQL, SQL SERVER, entre outros.

Por padrão, geralmente utiliza-se o formato de dados JSON no caso do mongoDB, quando utiliza-se a linguagem de programação PHP, juntamente com a biblioteca MongoClient é possível utilizar o formato de dados Array que também é suportado pelo PDO, no caso de bancos relacionais. Sendo assim, a estrutura de dados por ser a mesma, sendo apenas necessário a conversão dos relacionamentos de tabelas distintas, para um único documento.