{"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\/pt\/moving-sql-business-logic-to-the-application-layer\/","title":{"rendered":"Mover a l\u00f3gica comercial do SQL para a camada de aplicativos"},"content":{"rendered":"<p><a href=\"\/blog\/pt\/moving-sql-database-content-to-couchbase\/\">\u00daltima vez<\/a> Ficamos com uma importa\u00e7\u00e3o muito simples e direta de tabelas SQL no Couchbase, com um documento por linha da tabela.  Mas ainda h\u00e1 trabalho a fazer. As chaves prim\u00e1rias foram alteradas no processo, portanto, precisamos corrigir isso. E um banco de dados SQL n\u00e3o cont\u00e9m apenas tabelas. H\u00e1 outras estruturas e fun\u00e7\u00f5es que carregam a l\u00f3gica comercial e que teremos de mover para a camada de aplicativos.<\/p>\n<h2>JUNTAR<\/h2>\n<p>A primeira coisa que quero fazer ap\u00f3s a importa\u00e7\u00e3o \u00e9 executar o JOIN nos documentos, o que pode ser feito da mesma forma com um banco de dados SQL, pois \u00e9 essencialmente um mapeamento exato. N\u00e3o \u00e9 t\u00e3o simples quanto executar a consulta N1QL diretamente. O JOIN no N1QL s\u00f3 funciona na chave de um documento, e n\u00f3s as alteramos na importa\u00e7\u00e3o para evitar colis\u00f5es. Portanto, precisamos alterar as diferentes chaves estrangeiras. A boa not\u00edcia \u00e9 que isso \u00e9 muito f\u00e1cil de fazer com a Linguagem de Manipula\u00e7\u00e3o de Dados N1QL. H\u00e1 suporte para <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/update.html\">ATUALIZA\u00c7\u00c3O<\/a>, <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/merge.html\">MERGE<\/a>, <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/insert.html\">INSERIR<\/a>\u00a0ou\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>\nEssa consulta alterar\u00e1 o campo language_id de cada documento no bucket padr\u00e3o que cont\u00e9m um campo _tableName definido como \"film\". O language_id deixar\u00e1 de ser um campo do tipo Number e passar\u00e1 a ser um String. Se voc\u00ea tinha 1, agora ter\u00e1 \"language::1\". Isso corresponder\u00e1 \u00e0 chave real do documento, pois foi isso que foi adicionado pelo RowMapper.<\/p>\n<p>O operador '||' \u00e9 usado para concatena\u00e7\u00e3o de strings. E como language_id era um n\u00famero, voc\u00ea precisa usar o m\u00e9todo toString para convert\u00ea-lo. Voc\u00ea precisar\u00e1 executar essa consulta para cada chave estrangeira em seu banco de dados. Depois disso, voc\u00ea dever\u00e1 ser capaz de executar consultas N1QL com JOIN, NEST e 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>Sequ\u00eancia, visualiza\u00e7\u00e3o, acionador, dom\u00ednio e fun\u00e7\u00e3o<\/h2>\n<p>H\u00e1 algumas coisas que n\u00e3o podem ser migradas diretamente de um banco de dados SQL para o Couchbase. Mais especificamente, toda a l\u00f3gica de neg\u00f3cios que voc\u00ea tinha no banco de dados SQL ter\u00e1 de ser transferida para a camada de aplicativos. Algumas s\u00e3o mais simples de transferir do que outras. Voc\u00ea pode decidir se ter a l\u00f3gica de neg\u00f3cios na camada de dados \u00e9 bom ou n\u00e3o. Embora eu n\u00e3o goste disso, entendo que muitos aplicativos diferentes podem usar o mesmo banco de dados e, portanto, a restri\u00e7\u00e3o expressa no n\u00edvel do banco de dados pode ser uma coisa boa. Prefiro pensar que esses aplicativos devem depender de um servi\u00e7o em vez de ir direto para o banco de dados.<\/p>\n<h3>Sequ\u00eancia<\/h3>\n<p>Uma sequ\u00eancia pode ser vista como uma <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/developer-guide\/counters.html\">Contador at\u00f4mico<\/a>e \u00e9 algo simples de criar:<\/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>Visualiza\u00e7\u00f5es<\/h3>\n<p>Uma visualiza\u00e7\u00e3o SQL pode ser vista como uma tabela din\u00e2mica resultante de uma consulta SQL. No Couchbase, uma <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/couchbase-lite\/native-api\/view\/index.html\">Ver<\/a> \u00e9 um \u00edndice (pense em um \u00edndice como uma tabela de duas colunas) criado dinamicamente usando uma fun\u00e7\u00e3o de mapa\/redu\u00e7\u00e3o incremental e depende principalmente da complexidade de sua visualiza\u00e7\u00e3o. Uma visualiza\u00e7\u00e3o \u00e9 usada para apresentar dados em um contexto diferente. No NoSQL, quando voc\u00ea quer fazer isso, come\u00e7a a desnormalizar os dados, o que os duplica. Portanto, tenha cuidado com o que est\u00e1 fazendo. Se esses dados precisarem ser modificados com frequ\u00eancia, desnormaliz\u00e1-los pode n\u00e3o ser uma boa ideia (embora as coisas possam mudar com a API SubDocument em que estamos trabalhando). Aqui est\u00e1 um exemplo de View para lhe dar uma ideia:<\/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>Dom\u00ednio<\/h3>\n<p>Um dom\u00ednio SQL \u00e9 um novo tipo (baseado em um tipo existente) com restri\u00e7\u00f5es integradas. No meu exemplo de SQL, um novo dom\u00ednio chamado type \u00e9 definido assim:<\/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>Ele define um novo tipo chamado year a partir do tipo integer existente. Ele adiciona uma restri\u00e7\u00e3o dizendo que o valor de year deve estar entre 1901 e 2155. Para expressar essa restri\u00e7\u00e3o em Java, voc\u00ea pode usar uma estrutura de valida\u00e7\u00e3o como <a href=\"https:\/\/hibernate.org\/validator\/\">Validador do Hibernate<\/a>. Seu tipo de ano seria semelhante a este:<\/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;\">Gatilho<\/h3>\n<p style=\"color: rgb(51, 51, 51); line-height: 20.8px; text-align: left;\">Os acionadores s\u00e3o fun\u00e7\u00f5es SQL executadas quando algo espec\u00edfico acontece no banco de dados, como um INSERT, DELETE ou UPDATE espec\u00edfico. \u00c9 uma \u00f3tima maneira de refor\u00e7ar a integridade de seus dados ou de automatizar opera\u00e7\u00f5es. N\u00e3o h\u00e1 equivalente no Couchbase Server, portanto, isso ter\u00e1 de ser transferido para a camada do aplicativo. Por exemplo, voc\u00ea pode reproduzir isso usando um barramento de eventos de aplicativos. Isso provavelmente poderia ser feito usando o <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/concepts\/data-change-protocol.html\">DCP<\/a><\/p>\n<h3>Fun\u00e7\u00e3o<\/h3>\n<p>A maioria dos bancos de dados SQL permite que voc\u00ea defina suas pr\u00f3prias fun\u00e7\u00f5es. No momento, isso n\u00e3o \u00e9 poss\u00edvel com o N1QL. Toda a l\u00f3gica que voc\u00ea coloca nessa fun\u00e7\u00e3o deve ser colocada na sua camada de aplicativo.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Agora voc\u00ea deve ter uma boa ideia de como migrar simplesmente de bancos de dados SQL para o Couchbase. N\u00e3o posso deixar de enfatizar que esse \u00e9 o caminho mais simples para a migra\u00e7\u00e3o. N\u00e3o h\u00e1 modelagem de dados envolvida aqui. Uma migra\u00e7\u00e3o completa envolveria dar uma boa olhada no seu modelo de dados e ver o que pode ser desnormalizado. \u00a0\u00a0<\/p>\n<p>Diga-nos o que voc\u00ea acha nos coment\u00e1rios abaixo. Ficaria feliz em saber se, por exemplo, voc\u00ea j\u00e1 fez uma migra\u00e7\u00e3o de SQL e como fez isso :)<\/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 v26.0 (Yoast SEO v26.0) - 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\/pt\/moving-sql-business-logic-to-the-application-layer\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/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\/pt\/moving-sql-business-logic-to-the-application-layer\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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":"pt-BR","@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 \u00e9 um nerd metaleiro que mora em Paris. Em sua maior parte, ele escreve c\u00f3digo em Java e texto estruturado em AsciiDoc, e frequentemente fala sobre dados, programa\u00e7\u00e3o reativa e outras coisas que est\u00e3o na moda. Ele tamb\u00e9m foi Developer Advocate do Clever Cloud e do Nuxeo, onde dedicou seu tempo e experi\u00eancia para ajudar essas comunidades a crescerem e se fortalecerem. Atualmente, ele dirige as Rela\u00e7\u00f5es com Desenvolvedores na 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\/pt\/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","author_category":"","last_name":"Doguin","first_name":"Laurent","job_title":"","user_url":"","description":"Laurent \u00e9 um nerd metaleiro que mora em Paris. Em sua maior parte, ele escreve c\u00f3digo em Java e texto estruturado em AsciiDoc, e frequentemente fala sobre dados, programa\u00e7\u00e3o reativa e outras coisas que est\u00e3o na moda. Ele tamb\u00e9m foi Developer Advocate do Clever Cloud e do Nuxeo, onde dedicou seu tempo e experi\u00eancia para ajudar essas comunidades a crescerem e se fortalecerem. Atualmente, ele dirige as Rela\u00e7\u00f5es com Desenvolvedores na Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2131","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2131"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2131\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2131"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}