{"id":1589,"date":"2014-12-16T17:31:23","date_gmt":"2014-12-16T17:31:22","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1589"},"modified":"2023-06-28T01:30:06","modified_gmt":"2023-06-28T08:30:06","slug":"data-modelling-when-embed-or-refer","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/data-modelling-when-embed-or-refer\/","title":{"rendered":"Modelizaci\u00f3n de datos: cu\u00e1ndo integrar, cu\u00e1ndo remitir"},"content":{"rendered":"<p>Una de las grandes cuestiones que se plantean en el modelado de bases de datos documentales es: \u00bfhasta d\u00f3nde puedo llegar con la desnormalizaci\u00f3n?<\/p>\n<p>Cuando trabajamos con bases de datos relacionales, estamos acostumbrados a normalizar estrictamente nuestros datos: tenemos una instancia can\u00f3nica, no duplicada, de cada dato. Eso nos da un margen casi ilimitado de consulta y hace que la coherencia sea pan comido.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/three-things-know-about-document-database-modelling-part-1\/\">En mi anterior post sobre modelizaci\u00f3n de datos<\/a>Hemos visto que las bases de datos de documentos adoptan un enfoque diferente. Las bases de datos de documentos optimizan el almacenamiento conjunto de los datos a los que accedemos juntos y, de ah\u00ed, se derivan otras muchas ventajas, como la velocidad, la distribuibilidad, la conservaci\u00f3n de la estructura de los documentos, etc.<\/p>\n<p>En ese post puse el ejemplo de un sistema de gesti\u00f3n de botines en el que un pedido se almacenar\u00eda como un documento JSON, en lugar de dividirse en varias tablas y luego reconstruirse cada vez mediante una consulta SQL.<\/p>\n<p>Ese modelo -de almacenamiento de agregados de datos- se desnormaliza de forma natural. Sin embargo, eso no significa que debamos crear documentos monol\u00edticos para cada contexto.<\/p>\n<p>En su lugar, debemos considerar dos opciones: podemos incrustar datos de varios lugares en un documento o podemos almacenar referencias a otros documentos.<\/p>\n<h2 id=\"key-value-document-access\">Acceso a documentos clave-valor<\/h2>\n<p>Con Couchbase tenemos un par de formas de acceder a nuestros datos: consultas de valores clave y vistas (\u00edndices secundarios generados autom\u00e1ticamente a partir de consultas map-reduce).<\/p>\n<p>En <a href=\"https:\/\/n1ql.couchbase.com\">N1QL<\/a> est\u00e9 disponible, ser\u00e1n tres.<\/p>\n<p>Todo lo que vamos a ver en este post se basa en b\u00fasquedas clave-valor.<\/p>\n<h2 id=\"a-quick-recap-of-our-example-system\">Un breve resumen de nuestro sistema de ejemplo<\/h2>\n<p>En mi entrada anterior vimos el ejemplo de un sistema de gesti\u00f3n de existencias para hacer un seguimiento del bot\u00edn de marca de Couchbase.<\/p>\n<p>Imaginemos que la ruta est\u00e1ndar es:<\/p>\n<ol>\n<li>Un cliente hace un pedido.<\/li>\n<li>Un preparador de pedidos recibe el pedido y empaqueta los art\u00edculos.<\/li>\n<li>Un expedidor env\u00eda el paquete a trav\u00e9s de un servicio de reparto.<\/li>\n<\/ol>\n<p>En el momento en que el cliente realiza un pedido, podemos elegir c\u00f3mo almacenar los datos del pedido en Couchbase:<\/p>\n<ul class=\"rteindent1\">\n<li>incluir toda la informaci\u00f3n del pedido en un documento<\/li>\n<li>o mantener una copia principal de cada registro implicado y hacer referencia a \u00e9l desde el documento de pedido.<\/li>\n<\/ul>\n<h2 id=\"embedding\">Inserci\u00f3n<\/h2>\n<p>Si elegimos incrustar todos los datos en un documento, podr\u00edamos acabar con algo como esto:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">\u00a0 {<br \/>\n\"orderID\": 200,<br \/>\n\"cliente\":<br \/>\n{<br \/>\n\"Nombre\": \"Steve Rothery\",<br \/>\n\"address\": \"11-21 Paul Street\",<br \/>\n\"ciudad\": \"Londres\"<br \/>\n},<br \/>\n\"productos\":<br \/>\n[<br \/>\n{<br \/>\n\"itemCode\": \"RedTShirt\",<br \/>\n\"itemName\": \"Camiseta roja Couchbase\",<br \/>\n\"proveedor\": \"empresa de camisetas\",<br \/>\n\"localizaci\u00f3n\": \"almac\u00e9n 1, pasillo 3, ubicaci\u00f3n 4\",<br \/>\n\"quantityOrdered\": 3<br \/>\n},<br \/>\n{<br \/>\n\"itemCode\": \"USB\",<br \/>\n\"proveedor\": \"Memorysticks Foreva\",<br \/>\n\"itemName\": \"Memoria USB negra de 8 GB con el logotipo rojo de Couchbase\",<br \/>\n\"localizaci\u00f3n\": \"almac\u00e9n 1, pasillo 42, ubicaci\u00f3n 12\",<br \/>\n\"quantityOrder\": 51<br \/>\n}<br \/>\n],<br \/>\n\"status\": \"pagado\"<br \/>\n}<\/div>\n<\/div>\n<p><span style=\"font-family: inherit;font-size: 1em;line-height: 1.4375em\">Aqu\u00ed, todo lo que necesitamos para cumplir el pedido se almacena en un solo documento.<\/span><\/p>\n<p>A pesar de tener documentos separados con el perfil del cliente y los detalles del art\u00edculo, replicamos parte de sus datos en el documento del pedido.<\/p>\n<p>Esto puede parecer un despilfarro o incluso peligroso, si vienes del mundo relacional.<\/p>\n<p>Sin embargo, es bastante normal para una base de datos de documentos. Como hemos visto antes, las bases de datos de documentos funcionan en torno a la idea de que un documento puede almacenar todo lo que necesitas para una situaci\u00f3n concreta.<\/p>\n<p>Sin embargo, incrustar datos de este modo tiene algunas desventajas.<\/p>\n<p>En primer lugar, veamos lo que es potencialmente malo:<\/p>\n<ul class=\"rteindent1\">\n<li>Incoherencia: si Steve quiere actualizar su direcci\u00f3n despu\u00e9s de hacer el pedido, nos basamos en:\n<ul>\n<li>que el c\u00f3digo de nuestra aplicaci\u00f3n sea lo suficientemente robusto como para encontrar cada instancia de su direcci\u00f3n en la base de datos y actualizarla.<\/li>\n<li>nada va mal en la red, en la base de datos o en cualquier otro lugar que impida que la actualizaci\u00f3n se complete por completo.<\/li>\n<\/ul>\n<\/li>\n<li>Consultabilidad: al hacer varias copias de los mismos datos, podr\u00eda ser m\u00e1s dif\u00edcil consultar los datos que replicamos, ya que tendremos que filtrar todas las copias incrustadas.<\/li>\n<li>Tama\u00f1o: puedes acabar teniendo documentos de gran tama\u00f1o compuestos por muchos datos duplicados.<\/li>\n<li>M\u00e1s documentos: no es un problema importante, pero podr\u00eda tener algunas repercusiones, como el tama\u00f1o de tu conjunto de trabajo en cach\u00e9.<\/li>\n<\/ul>\n<p>Entonces, \u00bfqu\u00e9 beneficios nos aporta la incrustaci\u00f3n? Principalmente, nos da:<\/p>\n<ul class=\"rteindent1\">\n<li>Rapidez de acceso: incrustar todo en un documento significa que s\u00f3lo necesitamos una consulta de la base de datos.<\/li>\n<li>Mayor tolerancia a fallos en el momento de la lectura: en una base de datos distribuida, los documentos a los que nos referimos estar\u00edan en varias m\u00e1quinas, por lo que al incrustarlos estamos introduciendo menos oportunidades de que algo vaya mal y estamos simplificando el lado de la aplicaci\u00f3n.<\/li>\n<\/ul>\n<h3 id=\"when-to-embed\">Cu\u00e1ndo incrustar<\/h3>\n<p>Es posible que desee incrustar datos cuando:<\/p>\n<ol>\n<li>Las lecturas superan ampliamente a las escrituras.<\/li>\n<li>Te sientes c\u00f3modo con el escaso riesgo de que los datos sean incoherentes en las m\u00faltiples copias.<\/li>\n<li>Est\u00e1s optimizando la velocidad de acceso.<\/li>\n<\/ol>\n<p>\u00bfPor qu\u00e9 nos preguntamos si el n\u00famero de lecturas supera al de escrituras?<\/p>\n<p>En nuestro ejemplo anterior, cada vez que alguien lee nuestro pedido tambi\u00e9n es probable que actualice el estado del pedido:<\/p>\n<ul class=\"rteindent1\">\n<li>alguien en el almac\u00e9n lee el documento de pedido y actualiza el estado a \"Recogido\", una vez que ha terminado<\/li>\n<li>un miembro de nuestro equipo de env\u00edos lee el documento y actualiza el estado a \"Enviado\" cuando el paquete est\u00e1 en manos del transportista<\/li>\n<li>cuando recibimos un aviso de entrega autom\u00e1tico del servicio de mensajer\u00eda, nuestra aplicaci\u00f3n actualiza el estado del documento a \"Entregado\".<\/li>\n<\/ul>\n<p>Por lo tanto, aqu\u00ed las lecturas y las escrituras suelen estar bastante equilibradas.<\/p>\n<p>Imaginemos, sin embargo, que a\u00f1adimos un blog a nuestro sistema de gesti\u00f3n de botines y escribimos un post sobre nuestro nuevo cargador USB con la marca Couchbase. Har\u00edamos dos, quiz\u00e1 tres, escrituras en el documento mientras afinamos nuestro post. Despu\u00e9s, durante el resto de la vida del documento, todo ser\u00edan lecturas. Si el post es popular, podr\u00edamos ver cien o mil veces m\u00e1s lecturas que escrituras.<\/p>\n<p>Como las ventajas de la incrustaci\u00f3n se producen en el momento de la lectura, y los riesgos sobre todo en el momento de la escritura, parece razonable incrustar todo el contenido de la p\u00e1gina de la entrada del blog en un documento en lugar de, por ejemplo, extraer los detalles del autor de un documento de perfil separado.<\/p>\n<p>Hay otra raz\u00f3n de peso para integrar datos:<\/p>\n<ul class=\"rteindent1\">\n<li>En realidad, lo que quieres es mantener copias de datos separadas y divergentes.<\/li>\n<\/ul>\n<p>En nuestro pedido de swag, utilizamos la direcci\u00f3n del cliente como direcci\u00f3n de env\u00edo. Al incrustar la direcci\u00f3n de env\u00edo, podemos ofrecer f\u00e1cilmente la opci\u00f3n de elegir una direcci\u00f3n de env\u00edo diferente para cada pedido. Tambi\u00e9n obtenemos un registro hist\u00f3rico del destino de cada pedido, incluso si el cliente cambia posteriormente la direcci\u00f3n almacenada en su perfil.<\/p>\n<h3 id=\"need-for-speed\">Necesidad de velocidad<\/h3>\n<p>Couchbase es r\u00e1pido.<\/p>\n<p>Todas las escrituras se realizan en la cach\u00e9 gestionada y, si dimensionamos nuestra RAM adecuadamente, nuestro conjunto de trabajo se sirve desde esa cach\u00e9.<\/p>\n<p>Eso cambia la ponderaci\u00f3n de las compensaciones que hacemos. Incrustar principalmente por velocidad es menos convincente con Couchbase.<\/p>\n<p>Con Couchbase el tiempo medio de una operaci\u00f3n de lectura\/escritura es de medio milisegundo, as\u00ed que no pasa nada cuando una sola consulta requiere tres o cuatro operaciones.<\/p>\n<h2 id=\"referring\">Remitir a<\/h2>\n<p>Otra forma de representar nuestro pedido ser\u00eda hacer referencia al documento de perfil de usuario y al documento de detalles de art\u00edculos de stock, pero sin extraer su contenido en el documento de pedido.<\/p>\n<p>Imaginemos que los perfiles de nuestros clientes est\u00e1n codificados por su direcci\u00f3n de correo electr\u00f3nico y los art\u00edculos de nuestras existencias por un c\u00f3digo de existencias. Podemos utilizarlos para referirnos a los documentos originales:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">\u00a0 \u00a0{<br \/>\n\"orderID\": 200,<br \/>\n\"cliente\": \"steve@gmail.com\",<br \/>\n\"productos\":<br \/>\n[<br \/>\n{<br \/>\n\"itemCode\": \"RedTShirt\",<br \/>\n\"quantityOrdered\": 3<br \/>\n},<br \/>\n{<br \/>\n\"itemCode\": \"USB\",<br \/>\n\"quantityOrder\": 51<br \/>\n}<br \/>\n],<br \/>\n\"status\": \"pagado\"<br \/>\n}<\/div>\n<\/div>\n<p>Cuando vemos el pedido de Steve, podemos completar los detalles con tres lecturas m\u00e1s: su perfil de usuario (introducido por la direcci\u00f3n de correo electr\u00f3nico) y los detalles de los art\u00edculos en stock (introducidos por sus c\u00f3digos de art\u00edculo).<\/p>\n<p>Requiere tres lecturas adicionales, pero nos aporta algunas ventajas:<\/p>\n<ul class=\"rteindent1\">\n<li>Coherencia: mantenemos una copia can\u00f3nica de la informaci\u00f3n del perfil de Steve y de los detalles de los art\u00edculos en stock.<\/li>\n<li>Consultabilidad: esta vez, cuando consultamos el conjunto de datos podemos estar m\u00e1s seguros de que los resultados son las versiones can\u00f3nicas de los datos y no copias incrustadas.<\/li>\n<li>Mejor uso de la cach\u00e9: dado que accedemos con frecuencia a los documentos can\u00f3nicos, \u00e9stos permanecer\u00e1n en nuestra cach\u00e9, en lugar de tener m\u00faltiples copias incrustadas a las que se accede con menos frecuencia y que, por tanto, desaparecen de la cach\u00e9.<\/li>\n<li>Uso m\u00e1s eficiente del hardware: al incrustar los datos obtenemos documentos m\u00e1s grandes con varias copias de los mismos datos, lo que ayuda a reducir el disco y la RAM que necesita nuestra base de datos.<\/li>\n<\/ul>\n<p>Tambi\u00e9n hay desventajas:<\/p>\n<ul class=\"rteindent1\">\n<li>M\u00faltiples b\u00fasquedas: esto se tiene en cuenta sobre todo en el caso de las p\u00e9rdidas de cach\u00e9, ya que el tiempo de lectura aumenta cada vez que tenemos que leer del disco.<\/li>\n<li>Se impone la coherencia: hacer referencia a una versi\u00f3n can\u00f3nica de un documento significa que las actualizaciones de ese documento se reflejar\u00e1n en todos los contextos en los que se utilice.<\/li>\n<\/ul>\n<h3 id=\"when-to-refer\">Cu\u00e1ndo remitir<\/h3>\n<p>Referirse a instancias can\u00f3nicas de documentos es una buena opci\u00f3n por defecto cuando se modela con Couchbase. Deber\u00edas estar especialmente interesado en usar referencias cuando:<\/p>\n<ul class=\"rteindent1\">\n<li>La coherencia de los datos es una prioridad.<\/li>\n<li>Usted quiere asegurarse de que su cach\u00e9 se utiliza de manera eficiente.<\/li>\n<li>La versi\u00f3n incrustada ser\u00eda poco manejable.<\/li>\n<\/ul>\n<p>Este \u00faltimo punto es especialmente importante cuando sus documentos tienen un potencial de crecimiento ilimitado.<\/p>\n<p>Imaginemos que almacenamos los registros de actividad de cada usuario de nuestro sistema. Integrar esos registros en el perfil del usuario podr\u00eda dar lugar a un documento bastante voluminoso.<\/p>\n<p>Es poco probable que superemos el l\u00edmite m\u00e1ximo de 20 MB de Couchbase para un documento individual, pero procesar el documento en el lado de la aplicaci\u00f3n ser\u00eda menos eficiente a medida que creciera el elemento de registro del perfil. Ser\u00eda mucho m\u00e1s eficiente hacer referencia a un documento separado, o tal vez a documentos paginados, que contengan los registros.<\/p>\n<h2 id=\"denormalise-all-the-things-except-when-you-don-t-\">Desnormalizar todas las cosas (Excepto cuando no lo haces)<\/h2>\n<p>La desnormalizaci\u00f3n es una parte clave del trabajo con bases de datos de documentos, pero eso no significa que no podamos mantener registros can\u00f3nicos y luego referirnos a ellos desde dentro de otros documentos.<\/p>\n<p>De hecho, referirse a los documentos es a menudo la forma m\u00e1s eficiente de trabajar con Couchbase y debemos incrustar en situaciones particulares, tales como cargas de trabajo de lectura pesada.<\/p>\n<p>La pr\u00f3xima vez me ocupar\u00e9 de los patrones de nomenclatura de las claves y de c\u00f3mo mantenemos el esquema en una base de datos de esquema suave.<\/p>","protected":false},"excerpt":{"rendered":"<p>One of the big document database modelling questions is: how far do I go with denormalisation? When working with relational databases we&#8217;re used to strictly normalising our data: we hold a canonical, non-duplicative, instance of each item of data. That [&hellip;]<\/p>","protected":false},"author":18,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[8982],"class_list":["post-1589","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Data modelling: when to embed, when to refer - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/data-modelling-when-embed-or-refer\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Data modelling: when to embed, when to refer\" \/>\n<meta property=\"og:description\" content=\"One of the big document database modelling questions is: how far do I go with denormalisation? When working with relational databases we&#8217;re used to strictly normalising our data: we hold a canonical, non-duplicative, instance of each item of data. That [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/data-modelling-when-embed-or-refer\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-16T17:31:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-28T08:30:06+00:00\" \/>\n<meta name=\"author\" content=\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/\"},\"author\":{\"name\":\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/6c3060a94353df62a71d4672b3454555\"},\"headline\":\"Data modelling: when to embed, when to refer\",\"datePublished\":\"2014-12-16T17:31:22+00:00\",\"dateModified\":\"2023-06-28T08:30:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/\"},\"wordCount\":1611,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/\",\"name\":\"Data modelling: when to embed, when to refer - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-16T17:31:22+00:00\",\"dateModified\":\"2023-06-28T08:30:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Data modelling: when to embed, when to refer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/6c3060a94353df62a71d4672b3454555\",\"name\":\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/b1bc555cd9166b46d6063003c3b92317\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g\",\"caption\":\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\"},\"description\":\"Matthew Revell is a Lead Dev Advocate, EMEA Couchbase. He developed a global strategy for putting Couchbase front in the minds of the product's developers.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-revell\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Data modelling: when to embed, when to refer - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/data-modelling-when-embed-or-refer\/","og_locale":"es_MX","og_type":"article","og_title":"Data modelling: when to embed, when to refer","og_description":"One of the big document database modelling questions is: how far do I go with denormalisation? When working with relational databases we&#8217;re used to strictly normalising our data: we hold a canonical, non-duplicative, instance of each item of data. That [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/data-modelling-when-embed-or-refer\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-16T17:31:22+00:00","article_modified_time":"2023-06-28T08:30:06+00:00","author":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/"},"author":{"name":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/6c3060a94353df62a71d4672b3454555"},"headline":"Data modelling: when to embed, when to refer","datePublished":"2014-12-16T17:31:22+00:00","dateModified":"2023-06-28T08:30:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/"},"wordCount":1611,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Uncategorized"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/","url":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/","name":"Data modelling: when to embed, when to refer - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2014-12-16T17:31:22+00:00","dateModified":"2023-06-28T08:30:06+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-when-embed-or-refer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Data modelling: when to embed, when to refer"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/6c3060a94353df62a71d4672b3454555","name":"Matthew Revell, Defensor principal del desarrollador, EMEA, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/b1bc555cd9166b46d6063003c3b92317","url":"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g","caption":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase"},"description":"Matthew Revell es Lead Dev Advocate, EMEA Couchbase. Ha desarrollado una estrategia global para situar a Couchbase en la mente de los desarrolladores del producto.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-revell\/"}]}},"authors":[{"term_id":8982,"user_id":18,"is_guest":0,"slug":"matthew-revell","display_name":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g","first_name":"Matthew","last_name":"Revell","user_url":"","author_category":"","description":"Matthew Revell es Lead Dev Advocate, EMEA Couchbase. Ha desarrollado una estrategia global para situar a Couchbase en la mente de los desarrolladores del producto."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1589","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1589"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1589\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1589"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}