¿Cómo diseño un esquema como este en MongoDB? ¡Creo que no hay claves foráneas!
sql
mongodb
foreign-keys
nosql
Mark Pegasov
fuente
fuente
Respuestas:
Puede que le interese utilizar un ORM como Mongoid o MongoMapper.
http://mongoid.org/docs/relations/referenced/1-n.html
En una base de datos NoSQL como MongoDB no hay 'tablas' sino colecciones. Los documentos se agrupan dentro de Colecciones. Puede tener cualquier tipo de documento, con cualquier tipo de datos, en una sola colección. Básicamente, en una base de datos NoSQL depende de usted decidir cómo organizar los datos y sus relaciones, si las hay.
Lo que hacen Mongoid y MongoMapper es proporcionarle métodos convenientes para establecer relaciones con bastante facilidad. Mira el enlace que te di y pregunta cualquier cosa.
Editar:
En mongoid escribirás tu esquema así:
Editar:
Puede usar ese ObjectId para hacer relaciones entre documentos.
fuente
Primero, para aclarar algunas convenciones de nomenclatura. MongoDB usa en
collections
lugar detables
.Toma el siguiente modelo:
Claramente, la lista de cursos de Jane apunta a algunos cursos específicos. La base de datos no aplica ninguna restricción al sistema ( es decir, restricciones de clave externa ), por lo que no hay "eliminaciones en cascada" o "actualizaciones en cascada". Sin embargo, la base de datos contiene la información correcta.
Además, MongoDB tiene un estándar DBRef que ayuda a estandarizar la creación de estas referencias. De hecho, si echa un vistazo a ese enlace, tiene un ejemplo similar.
Para ser claros, MongoDB no es relacional. No existe una "forma normal" estándar. Debe modelar su base de datos de manera apropiada para los datos que almacena y las consultas que pretende ejecutar.
fuente
Podemos definir el llamado
foreign key
en MongoDB. Sin embargo, necesitamos mantener la integridad de los datos POR NOSOTROS MISMOS . Por ejemplo,El
courses
campo contiene_id
s de cursos. Es fácil definir una relación de uno a varios. Sin embargo, si queremos recuperar los nombres de los estudiantes del cursoJane
, necesitamos realizar otra operación para recuperar elcourse
documento a través de_id
.Si
bio101
se elimina el curso , debemos realizar otra operación para actualizar elcourses
campo en elstudent
documento.Más: MongoDB Schema Design
La naturaleza de tipo documento de MongoDB admite formas flexibles de definir relaciones. Para definir una relación de uno a varios:
Documento incrustado
Ejemplo:
Referencia infantil
Como el
student
/course
ejemplo anterior.Referencia de padres
Adecuado para uno a escuillones, como mensajes de registro.
Prácticamente, a
host
es el padre de alogmsg
. Hacer referencia a lahost
identificación ahorra mucho espacio dado que los mensajes de registro son millones.Referencias:
fuente
Del libro Little MongoDB
Entonces,
Si se trata de datos de la API RESTful, reemplace la identificación del curso con un enlace GET al recurso del curso
fuente
El propósito de ForeignKey es evitar la creación de datos si el valor del campo no coincide con su ForeignKey. Para lograr esto en MongoDB, usamos middlewares Schema que aseguran la consistencia de los datos.
Consulte la documentación. https://mongoosejs.com/docs/middleware.html#pre
fuente