Comment concevoir un tel schéma dans MongoDB? Je pense qu'il n'y a pas de clés étrangères!
sql
mongodb
foreign-keys
nosql
Mark Pegasov
la source
la source
Réponses:
Vous pourriez être intéressé par l'utilisation d'un ORM comme Mongoid ou MongoMapper.
http://mongoid.org/docs/relations/referenced/1-n.html
Dans une base de données NoSQL comme MongoDB, il n'y a pas de «tables» mais des collections. Les documents sont regroupés dans les collections. Vous pouvez avoir n'importe quel type de document - avec n'importe quel type de données - dans une seule collection. Fondamentalement, dans une base de données NoSQL, c'est à vous de décider comment organiser les données et leurs relations, s'il y en a.
Ce que font Mongoid et MongoMapper est de vous fournir des méthodes pratiques pour établir des relations assez facilement. Consultez le lien que je vous ai donné et demandez n'importe quoi.
Éditer:
En mongoïde, vous écrirez votre schéma comme ceci:
Éditer:
Vous pouvez utiliser cet ObjectId pour établir des relations entre des documents.
la source
Tout d'abord, pour clarifier certaines conventions de dénomination. MongoDB utilise à la
collections
place detables
.Prenez le modèle suivant:
Il est clair que la liste de cours de Jane pointe vers des cours spécifiques. La base de données n'applique aucune contrainte au système ( c'est-à-dire: contraintes de clé étrangère ), il n'y a donc pas de "suppressions en cascade" ou de "mises à jour en cascade". Cependant, la base de données contient les informations correctes.
De plus, MongoDB dispose d'un standard DBRef qui permet de standardiser la création de ces références. En fait, si vous regardez ce lien, il a un exemple similaire.
Pour être clair, MongoDB n'est pas relationnel. Il n'y a pas de "forme normale" standard. Vous devez modéliser votre base de données en fonction des données que vous stockez et des requêtes que vous souhaitez exécuter.
la source
Nous pouvons définir ce que l'on appelle
foreign key
dans MongoDB. Cependant, nous devons maintenir l'intégrité des données PAR NOUS . Par exemple,Le
courses
champ contient_id
des cours. Il est facile de définir une relation un-à-plusieurs. Cependant, si nous voulons récupérer les noms de cours des étudiantsJane
, nous devons effectuer une autre opération pour récupérer lecourse
document via_id
.Si le cours
bio101
est supprimé, nous devons effectuer une autre opération pour mettre à jour lecourses
champ dans lestudent
document.Plus: Conception de schéma MongoDB
La nature de type document de MongoDB prend en charge des méthodes flexibles pour définir les relations. Pour définir une relation un-à-plusieurs:
Document intégré
Exemple:
Référencement enfant
Comme l' exemple
student
/course
ci-dessus.Référencement parent
Convient pour les one-to-squillions, tels que les messages de journal.
Pratiquement, a
host
est le parent de alogmsg
.host
Faire référence à l' id économise beaucoup d'espace étant donné que les messages du journal sont des squillions.Références:
la source
Tiré du petit livre MongoDB
Alors,
S'il s'agit d'une donnée d'API RESTful, remplacez l'ID de cours par un lien GET vers la ressource de cours
la source
Le but de ForeignKey est d'empêcher la création de données si la valeur du champ ne correspond pas à sa ForeignKey. Pour ce faire dans MongoDB, nous utilisons des middlewares Schema qui garantissent la cohérence des données.
Veuillez consulter la documentation. https://mongoosejs.com/docs/middleware.html#pre
la source