{"id":2131,"date":"2016-01-26T14:30:00","date_gmt":"2016-01-26T14:30:00","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2131"},"modified":"2016-01-26T14:30:00","modified_gmt":"2016-01-26T14:30:00","slug":"moving-sql-business-logic-to-the-application-layer","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/moving-sql-business-logic-to-the-application-layer\/","title":{"rendered":"Traslado de la l\u00f3gica de negocio SQL a la capa de aplicaci\u00f3n"},"content":{"rendered":"<p><a href=\"\/blog\/es\/moving-sql-database-content-to-couchbase\/\">\u00daltima vez<\/a> nos quedamos con una importaci\u00f3n muy cruda y directa de tablas SQL en Couchbase, con un documento por fila de tabla.  Pero todav\u00eda hay trabajo por hacer. Las claves primarias han cambiado en el proceso, as\u00ed que tenemos que arreglar eso. Y una base de datos SQL no contiene s\u00f3lo tablas. Hay otras estructuras y funciones que llevan l\u00f3gica de negocio y que tendremos que mover a la capa de aplicaci\u00f3n.<\/p>\n<h2>\u00daNASE A<\/h2>\n<p>Lo primero que quiero hacer despu\u00e9s de la importaci\u00f3n es ejecutar JOIN en los documentos, que se puede hacer de la misma manera con una base de datos SQL porque es esencialmente un mapeo exacto. No es tan simple como ejecutar la consulta N1QL directamente. JOIN en N1QL s\u00f3lo funciona en la clave de un documento, y los cambiamos en la importaci\u00f3n para evitar la colisi\u00f3n. As\u00ed que tenemos que cambiar las diferentes claves for\u00e1neas. La buena noticia es que es realmente f\u00e1cil de hacer con el Lenguaje de Manipulaci\u00f3n de Datos N1QL. Hay soporte para <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/update.html\">ACTUALIZACI\u00d3N<\/a>, <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/merge.html\">FUSIONAR<\/a>, <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/insert.html\">INSERTAR<\/a>\u00a0o\u00a0<a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/upsert.html\">UPSERT<\/a>.<\/p>\n<pre>\n<code>cbq>\u00a0UPDATE default d SET language_id = \"language::\" || TOSTRING(d.language_id) WHERE _tableName = \"film\";<\/code><\/pre>\n<p>\nEsta consulta cambiar\u00e1 el campo language_id de todos los documentos del bucket default que contengan un campo _tableName con el valor \"film\". El campo language_id pasar\u00e1 de ser un campo de tipo Number a un String. Si ten\u00eda 1, ahora tendr\u00e1 \"language::1\". Esto corresponder\u00e1 a la clave real del documento, porque eso es lo que ha a\u00f1adido el RowMapper.<\/p>\n<p>El operador '||' se utiliza para concatenar cadenas. Y como language_id era un N\u00famero, necesita utilizar el m\u00e9todo toString para convertirlo. Necesitar\u00e1s ejecutar esta consulta para cada clave for\u00e1nea en tu base de datos. Despues de esto deberias ser capaz de ejecutar consultas N1QL con JOIN, NEST, y UNNEST.<\/p>\n<pre>\n<code>\ncbq> SELECT \u00a0* FROM `default` AS a JOIN `default` AS \u00a0b ON KEYS a.language_id;\ncbq> SELECT * FROM `default` AS a NEST `default` AS \u00a0b ON KEYS a.language_id;\n<\/code><\/pre>\n<h2>Secuencia, Vista, Activador, Dominio y Funci\u00f3n<\/h2>\n<p>Hay algunas cosas que realmente no puedes migrar directamente de una base de datos SQL a Couchbase. M\u00e1s espec\u00edficamente, toda la l\u00f3gica de negocio que ten\u00edas en tu base de datos SQL tendr\u00e1 que moverse a tu capa de aplicaci\u00f3n. Algunas cosas son m\u00e1s f\u00e1ciles de mover que otras. Puedes decidir si tener la l\u00f3gica de negocio en la capa de datos es algo bueno o no. Aunque personalmente no me gusta, entiendo que muchas aplicaciones diferentes pueden utilizar la misma base de datos y por lo tanto la restricci\u00f3n expresada en el nivel de base de datos puede ser una buena cosa. Prefiero pensar que esas aplicaciones deber\u00edan depender de un servicio en lugar de llegar directamente a la base de datos.<\/p>\n<h3>Secuencia<\/h3>\n<p>Una secuencia puede verse como un <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/developer-guide\/counters.html\">Contador at\u00f3mico<\/a>y es algo sencillo de crear:<\/p>\n<pre>\n<code>\n\u00a0 \u00a0JsonLongDocument rv = bucket.counter(key, 20, 100);\n\u00a0 \u00a0 LOGGER.info(\"Delta=20, Initial=100. Current value is: \" + rv.content());\n\u00a0 \u00a0 rv = bucket.counter(key, 1);\n\u00a0 \u00a0 LOGGER.info(\"Delta=1. Current value is: \" + rv.content());\n<\/code><\/pre>\n<h3>Vistas<\/h3>\n<p>Una vista SQL puede verse como una tabla din\u00e1mica resultante de una consulta SQL. En Couchbase, una <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/couchbase-lite\/native-api\/view\/index.html\">Ver<\/a> es un \u00edndice (piensa en un \u00edndice como una tabla de dos columnas) creado din\u00e1micamente usando una funci\u00f3n incremental map\/reduce, y depende principalmente de la complejidad de tu Vista. Una vista se utiliza para presentar los datos en un contexto diferente. En NoSQL, cuando quieres hacer eso empiezas a desnormalizar tus datos, lo que los duplica. As\u00ed que ten cuidado con lo que est\u00e1s haciendo. Si estos datos necesitan ser modificados a menudo, desnormalizarlos podr\u00eda no ser una buena idea (aunque las cosas podr\u00edan cambiar con la API SubDocument en la que estamos trabajando). Aqu\u00ed&apos;s un ejemplo de Vista para darle una idea:<\/p>\n<h3><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/january\/moving-sql-business-logic-to-the-application-layer\/viewexample.png\" \/><\/h3>\n<h3>Dominio<\/h3>\n<p>Un dominio SQL es un nuevo tipo (basado en uno existente) con restricciones integradas. En mi ejemplo SQL, un nuevo dominio llamado tipo se define as\u00ed:<\/p>\n<pre>\n<code>\n\u00a0 \u00a0CREATE DOMAIN public.year\n\u00a0 \u00a0 \u00a0 AS integer\n\u00a0 \u00a0 \u00a0 CONSTRAINT year_check CHECK (VALUE >= 1901 AND VALUE <= 2155);\n\u00a0 \u00a0 ALTER DOMAIN public.year\n\u00a0 \u00a0 \u00a0 OWNER TO postgres;\n<\/code><\/pre>\n<p>Define un nuevo tipo llamado a\u00f1o a partir del tipo entero existente. A\u00f1ade una restricci\u00f3n que diga que el valor de year debe estar comprendido entre 1901 y 2155. Para expresar esta restricci\u00f3n en Java, puede utilizar un marco de validaci\u00f3n como <a href=\"https:\/\/hibernate.org\/validator\/\">Validador de Hibernate<\/a>. Su tipo de a\u00f1o ser\u00eda el siguiente:<\/p>\n<pre>\n<code>\n\u00a0 \u00a0 \u00a0@Min(1901) @Max(2155)\n\u00a0 \u00a0 \u00a0 private int year;\n<\/code><\/pre>\n<h3>\u00a0<\/h3>\n<h3 style=\"margin-top: 0.7em; color: rgb(51, 51, 51); text-align: left;\">Disparador<\/h3>\n<p style=\"color: rgb(51, 51, 51); line-height: 20.8px; text-align: left;\">Los disparadores son funciones SQL que se ejecutan cuando ocurre algo concreto en la base de datos, como un INSERT, DELETE o UPDATE espec\u00edfico. Es una gran manera de reforzar la integridad de tus datos o automatizar operaciones. No hay equivalente en Couchbase Server, as\u00ed que esto tendr\u00e1 que moverse a tu capa de aplicaci\u00f3n. Por ejemplo, puedes reproducir esto usando un bus de eventos de aplicaci\u00f3n. Esto probablemente podr\u00eda hacerse usando Couchbase&apos;s <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/concepts\/data-change-protocol.html\">DCP<\/a><\/p>\n<h3>Funci\u00f3n<\/h3>\n<p>La mayor\u00eda de las bases de datos SQL le permiten definir sus propias funciones. Esto no es posible actualmente con N1QL. Toda la l\u00f3gica que pongas en esa funci\u00f3n debes ponerla en tu capa de aplicaci\u00f3n.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Ahora deber\u00edas tener una idea decente de c\u00f3mo migrar de forma sencilla de bases de datos SQL a Couchbase. No puedo dejar de enfatizar que este es el camino simple para la migraci\u00f3n. No hay modelado de datos involucrado aqu\u00ed. Una migraci\u00f3n completa implicar\u00eda echar un buen vistazo a tu modelo de datos y ver qu\u00e9 puedes desnormalizar. \u00a0\u00a0<\/p>\n<p>H\u00e1ganos saber lo que piensa en los comentarios a continuaci\u00f3n. Me encantar\u00eda saber si, por ejemplo, ya ha realizado una migraci\u00f3n SQL y c\u00f3mo lo hizo :)<\/p>","protected":false},"excerpt":{"rendered":"<p>Last time we left with a very raw, straight forward import of SQL tables in Couchbase, with one document per table row. \u00a0But there is still work to do. Primary keys have changed in the process so we need to [&hellip;]<\/p>","protected":false},"author":49,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815],"tags":[],"ppma_author":[9023],"class_list":["post-2131","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials"],"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>Moving SQL business logic to the Application Layer - 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\/moving-sql-business-logic-to-the-application-layer\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moving SQL business logic to the Application Layer\" \/>\n<meta property=\"og:description\" content=\"Last time we left with a very raw, straight forward import of SQL tables in Couchbase, with one document per table row. \u00a0But there is still work to do. Primary keys have changed in the process so we need to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/moving-sql-business-logic-to-the-application-layer\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-01-26T14:30:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Laurent Doguin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ldoguin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"unstructured.io\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"Moving SQL business logic to the Application Layer\",\"datePublished\":\"2016-01-26T14:30:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\"},\"wordCount\":823,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Best Practices and Tutorials\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\",\"name\":\"Moving SQL business logic to the Application Layer - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-01-26T14:30:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#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\/moving-sql-business-logic-to-the-application-layer\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moving SQL business logic to the Application Layer\"}]},{\"@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\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\",\"name\":\"Laurent Doguin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"caption\":\"Laurent Doguin\"},\"description\":\"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/ldoguin\"],\"honorificPrefix\":\"Mr\",\"birthDate\":\"1985-06-07\",\"gender\":\"male\",\"award\":[\"Devoxx Champion\",\"Couchbase Legend\"],\"knowsAbout\":[\"Java\"],\"knowsLanguage\":[\"English\",\"French\"],\"jobTitle\":\"Director Developer Relation & Strategy\",\"worksFor\":\"Couchbase\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/laurent-doguin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Moving SQL business logic to the Application Layer - 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\/moving-sql-business-logic-to-the-application-layer\/","og_locale":"es_MX","og_type":"article","og_title":"Moving SQL business logic to the Application Layer","og_description":"Last time we left with a very raw, straight forward import of SQL tables in Couchbase, with one document per table row. \u00a0But there is still work to do. Primary keys have changed in the process so we need to [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/moving-sql-business-logic-to-the-application-layer\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-01-26T14:30:00+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"unstructured.io","Est. reading time":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"Moving SQL business logic to the Application Layer","datePublished":"2016-01-26T14:30:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/"},"wordCount":823,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Best Practices and Tutorials"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/","url":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/","name":"Moving SQL business logic to the Application Layer - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-01-26T14:30:00+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#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\/moving-sql-business-logic-to-the-application-layer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Moving SQL business logic to the Application Layer"}]},{"@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\/c0aa9b8f1ed51b7a9e2f7cb755994a5e","name":"Laurent Doguin","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071","url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","caption":"Laurent Doguin"},"description":"Laurent es un metalero empoll\u00f3n que vive en Par\u00eds. Principalmente escribe c\u00f3digo en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programaci\u00f3n reactiva y otras cosas de moda. Tambi\u00e9n fue Developer Advocate de Clever Cloud y Nuxeo, donde dedic\u00f3 su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase.","sameAs":["https:\/\/x.com\/ldoguin"],"honorificPrefix":"Mr","birthDate":"1985-06-07","gender":"male","award":["Devoxx Champion","Couchbase Legend"],"knowsAbout":["Java"],"knowsLanguage":["English","French"],"jobTitle":"Director Developer Relation & Strategy","worksFor":"Couchbase","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/laurent-doguin\/"}]}},"authors":[{"term_id":9023,"user_id":49,"is_guest":0,"slug":"laurent-doguin","display_name":"Laurent Doguin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","first_name":"Laurent","last_name":"Doguin","user_url":"","author_category":"","description":"Laurent es un metalero empoll\u00f3n que vive en Par\u00eds. Principalmente escribe c\u00f3digo en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programaci\u00f3n reactiva y otras cosas de moda. Tambi\u00e9n fue Developer Advocate de Clever Cloud y Nuxeo, donde dedic\u00f3 su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2131","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\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2131"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2131\/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=2131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2131"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}