Estas preguntas son de base de datos relacional muy específica.
En CouchDB, o cualquier otro no RDBMS, no almacenaría sus datos de la misma manera que lo haría en un RDBMS, por lo que diseñar la relación de esta manera puede no ser el mejor. Pero, solo para darle una idea de cómo podría hacerlo, supongamos que tiene un documento para un proveedor y un montón de documentos para pedidos que necesitan "relacionarse" con el documento del proveedor.
No hay claves principales, los documentos tienen un _id que es un uuid. Si tiene un documento para un proveedor y está creando un documento nuevo para algo similar a un pedido, puede hacer referencia al _id del documento del proveedor.
{"type":"order","vendor-id":"asd7d7f6ds76f7d7s"}
Para consultar todos los pedidos de un proveedor particular que le tienes un mapa de vista algo como:
function(doc) { if (doc.type == 'order') {emit(doc['vendor-id'], doc)}}
_ID documento no va a cambiar, por lo que no es "integridad" allí, incluso si cambie otros atributos en el documento del proveedor, como su nombre o información de facturación. Si inserta el nombre del proveedor u otros atributos del documento del proveedor directamente en el documento de pedido, necesitará escribir un script si alguna vez quisiera cambiarlos a granel.
Espero que ayude un poco.
La integridad referencial es Do-it-yourself, en otras palabras. El programador debe recordar crear el documento del proveedor primero, luego escribir los elementos que hacen referencia a su ** _ id **, porque CouchDB no puede imponer eso para ellos. De manera similar, el programador luego de la eliminación debe recordarse a sí mismo para eliminar primero los pedidos asociados con un proveedor antes de eliminar al proveedor: CouchDB no hará eso por ellos. Así que CouchDB te permitirá entrar constantemente en estados inconsistentes; no hay soporte para la protección contra esto. –
No llamaría a un documento colgante sin referencia a él un "estado incoherente" ya que el estado en este caso es la referencia del otro documento que se eliminaría. Pero su caracterización de la semántica aquí es precisa. Las referencias son solo índices y eliminar un documento no implica una transacción más grande que borrará la referencia anterior, aunque limpiaría la referencia directa. – mikeal
Lo que es más importante, un servidor couchdb tiene la capacidad REST-3 (y puede construir la capacidad REST-4 si lo desea con los documentos de diseño). Aplicar el término "integridad referencial" no tiene más sentido para una base de datos documental que para un videojuego. No es una base de datos relacional y no pretende serlo. –