MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

alternatives mongoDB pour les contraintes de clé étrangère

MongoDB n'a pas de suppressions en cascade. Lorsque votre application supprime des données, elle est également responsable de la suppression de tous les objets référencés elle-même et de toutes les références au document supprimé. Mais généralement, lorsque vous utilisez on delete dans une base de données relationnelle, vous avez un cas de composition où un objet parent possède un ou plusieurs objets enfants, et les objets enfants n'ont aucun sens sans le parent. Dans cette situation, MongoDB encourage l'intégration plutôt que le référencement . Cela signifie que vous créez un tableau dans l'objet parent et placez les documents enfants complets dans ce tableau au lieu de les conserver dans une propre collection. De cette façon, ils seront supprimés avec le parent, car ils en font partie.

Bien que conserver plusieurs valeurs dans un champ soit absolument interdit en SQL, il n'y a rien de mal à cela dans MongoDB. En effet, le langage de requête MongoDB peut facilement fonctionner avec des tableaux et des objets intégrés. Vous pouvez même créer des index sur des champs de sous-documents dans des tableaux, de sorte que vous pouvez facilement rechercher des objets qui sont incorporés dans d'autres objets.

Lorsque vous souhaitez toujours référencer des objets d'une autre collection, vous pouvez soit utiliser un DBRef, soit utiliser tout autre identifiant unique (l'unicité est l'une des rares choses qui peuvent être appliquées par MongoDB. Pour ce faire, créer un index unique avec la commande createIndex ). Mais MongoDB n'applique pas la cohérence dans ce cas. Vous pouvez créer des DBRef qui pointent vers des ObjectId inexistants et lorsque le document vers lequel pointe la DBRef est supprimé, rien ne se passe. L'application est chargée de s'assurer que lorsqu'elle supprime un document, tous les documents qui y font référence sont mis à jour.

Les contraintes ne peuvent pas non plus être appliquées par MongoDB. Il ne peut même pas appliquer un type spécifique pour un champ, en raison de la nature sans schéma de MongoDB. Encore une fois, votre application est responsable de s'assurer que les données qu'elle met dans mongodb suivent des spécifications spécifiques. Lorsque vous souhaitez automatiser cela, il existe des frameworks de mappage objet-relationnel pour MongoDB pour de nombreux langages de programmation disponibles.

Pour conclure : MongoDB n'est pas aussi "intelligent" que les bases de données SQL. Il ne fait pas grand chose tout seul. Il fait ce que l'application lui dit de faire, ni plus ni moins. Mais c'est la raison pour laquelle il est si rapide (pas de contrôles de cohérence coûteux) et flexible (aucune modification de la base de données nécessaire pour implémenter de nouvelles fonctionnalités).