MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Alternativas do mongoDB para restrições de chave estrangeira


O MongoDB não possui exclusões em cascata. Quando seu aplicativo exclui dados, ele também é responsável por remover quaisquer objetos referenciados e quaisquer referências ao documento excluído. Mas geralmente quando você usa on delete em um banco de dados relacional, você tem um caso de composição em que um objeto pai possui um ou mais objetos filho e os objetos filho não têm sentido sem o pai. Nessa situação, o MongoDB incentiva a incorporação em vez de referência a> . Isso significa que você cria uma matriz no objeto pai e coloca os documentos filho completos nessa matriz em vez de mantê-los em uma coleção própria. Dessa forma, eles serão excluídos junto com o pai, pois fazem parte dele.

Embora manter mais de um valor em um campo seja absolutamente impossível no SQL, não há nada de errado com isso no MongoDB. Isso porque a linguagem de consulta do MongoDB pode trabalhar facilmente com arrays e objetos incorporados. Você pode até criar índices em campos de subdocumentos em arrays, para que possa pesquisar facilmente por objetos que estão embutidos em outros objetos.

Quando você ainda deseja referenciar objetos de outra coleção, você pode usar um DBRef, ou também pode usar qualquer outro identificador exclusivo (unicidade é uma das poucas coisas que podem ser impostas pelo MongoDB. Para fazer isso, crie um índice exclusivo com o comando createIndex ). Mas o MongoDB não impõe consistência neste caso. Você pode criar DBRefs que apontam para ObjectIds inexistentes e quando o documento para o qual o DBRef aponta for excluído, nada acontecerá. O aplicativo é responsável por garantir que, ao excluir um documento, todos os documentos que fazem referência a ele sejam atualizados.

As restrições também não podem ser impostas pelo MongoDB. Ele não pode nem impor um tipo específico para um campo, devido à natureza sem esquema do MongoDB. Novamente, seu aplicativo é responsável por garantir que os dados que ele coloca no mongodb estejam seguindo especificações específicas. Quando você deseja automatizar isso, existem estruturas de mapeamento objeto-relacional para MongoDB para muitas linguagens de programação disponíveis.

Para finalizar: O MongoDB não é tão "inteligente" quanto os bancos de dados SQL. Não faz muito por conta própria. Ele faz o que é dito para fazer pelo aplicativo, nem mais nem menos. Mas essa é a razão pela qual é tão rápido (sem verificações de consistência caras) e flexível (sem modificações de banco de dados necessárias para implementar novos recursos).