{"id":3242,"date":"2017-04-13T11:15:06","date_gmt":"2017-04-13T18:15:06","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3242"},"modified":"2025-06-13T19:29:05","modified_gmt":"2025-06-14T02:29:05","slug":"sql-to-json-data-modeling-hackolade","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/sql-to-json-data-modeling-hackolade\/","title":{"rendered":"Modelado de datos de SQL a JSON con Hackolade"},"content":{"rendered":"<div class=\"paragraph\">\n<p>El modelado de datos de SQL a JSON es algo que toqu\u00e9 en la primera parte de mi <a href=\"https:\/\/www.couchbase.com\/blog\/es\/moving-from-sql-server-to-couchbase-part-1-data-modeling\/\">\"Serie \"Pasar de SQL Server a Couchbase<\/a>. Desde esa entrada de blog, me han llamado la atenci\u00f3n algunas herramientas nuevas de <a href=\"https:\/\/hackolade.com\/\">Hackolade<\/a>que recientemente ha a\u00f1adido a su herramienta soporte de primera clase para Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En este post, voy a repasar el ejercicio de modelado tan sencillo que hice a mano, y mostrar c\u00f3mo Hackolade de IntegrIT puede ayudar.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Estoy utilizando el mismo esquema SQL que utilic\u00e9 en la anterior serie de entradas del blog; puedes encontrarlo en <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/045MigrateFromSQLServer\/src\/SQLServerToCouchbase\">GitHub (en la carpeta SQLServerDataAccess\/Scripts)<\/a>.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_review_sql_to_json_data_modeling\">Revisi\u00f3n: Modelado de datos de SQL a JSON<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En primer lugar, repasemos: la principal forma de representar relaciones en una base de datos relacional es mediante una relaci\u00f3n clave\/clave externa entre tablas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A la hora de modelar en JSON, existen dos formas principales de representar las relaciones:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><strong>Referencial<\/strong> - Los conceptos tienen sus propios documentos, pero hacen referencia a otro(s) documento(s) mediante claves de documento.<\/li>\n<li><strong>Desnormalizaci\u00f3n<\/strong> - En lugar de dividir los datos entre documentos mediante claves, agrupe los conceptos en un \u00fanico documento.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Empec\u00e9 con un modelo relacional de carritos de la compra y usuarios de redes sociales.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06401-relational-model.png\" alt=\"Relational model of SQL before moving to JSON\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En mi ejemplo, dije que una relaci\u00f3n Cesta de la compra - a - Art\u00edculos de la cesta de la compra en una base de datos relacional probablemente estar\u00eda mejor representada en JSON por un \u00fanico documento Cesta de la compra (que contiene Art\u00edculos). Este es el camino de la \"desnormalizaci\u00f3n\". Luego, suger\u00ed que una relaci\u00f3n Usuario de medios sociales - a - Usuario de medios sociales Actualizaci\u00f3n se representar\u00eda mejor en JSON con una relaci\u00f3n referencial: las actualizaciones viven en sus propios documentos, separados del usuario.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se trataba de un proceso totalmente manual. Para ese sencillo ejemplo, no fue dif\u00edcil. Pero con modelos m\u00e1s grandes, ser\u00eda \u00fatil tener alguna herramienta para ayudar en el modelado de datos SQL a JSON. No ser\u00e1 completamente autom\u00e1tico: todav\u00eda hay algo de arte en ello, pero las herramientas pueden hacer gran parte del trabajo por nosotros.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_starting_with_a_sql_server_ddl\">Empezar con un DDL de SQL Server<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>La siguiente parte asume que ya ha ejecutado los scripts SQL para crear las 5 tablas: ShoppingCartItems, ShoppingCart, FriendBookUsers, FriendBookUpdates y FriendBookUsersFriends. (Si\u00e9ntase libre de probar esto en sus propias bases de datos, por supuesto).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>El primer paso es crear un script DDL de su esquema. Puede hacerlo con SQL Server Management Studio.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En primer lugar, haga clic con el bot\u00f3n derecho del rat\u00f3n en la base de datos que desee. A continuaci\u00f3n, vaya a \"Tareas\" y luego a \"Generar scripts\". A continuaci\u00f3n, aparecer\u00e1 un asistente. Puedes hacer clic en \"Siguiente\" en cada paso, pero si nunca has hecho esto antes es posible que desees leer las instrucciones de cada paso para que entiendas lo que est\u00e1 pasando.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5686 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06402-sql-generate-scripts-compressor-1.gif\" alt=\"\" width=\"600\" height=\"600\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por \u00faltimo, se generar\u00e1 un archivo SQL en la ruta especificada.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Ser\u00e1 un archivo de texto con una serie de <code>CREAR<\/code> y <code>ALTERAR<\/code> al menos). He aqu\u00ed un breve extracto de lo que he creado (se puede encontrar el <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/064DataModelingWithHackolade\/src\">versi\u00f3n completa en Github<\/a>).<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">CREATE TABLE [dbo].[FriendBookUpdates](\r\n\t[Id] [uniqueidentifier] NOT NULL,\r\n\t[PostedDate] [datetime] NOT NULL,\r\n\t[Body] [nvarchar](256) NOT NULL,\r\n\t[UserId] [uniqueidentifier] NOT NULL,\r\n CONSTRAINT [PK_FriendBookUpdates] PRIMARY KEY CLUSTERED\r\n(\r\n\t[Id] ASC\r\n)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]\r\n) ON [PRIMARY]\r\n\r\nGO\r\n\r\n-- etc...<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Por cierto, esto tambi\u00e9n deber\u00eda funcionar con bases de datos SQL Azure.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Nota: Hackolade tambi\u00e9n funciona con otros tipos de DDL, no s\u00f3lo SQL Server, sino tambi\u00e9n Oracle y MySQL.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_enter_hackolade\">Introduzca Hackolade<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>La siguiente parte asume que usted ha descargado e instalado Hackolade. Esta funci\u00f3n solo est\u00e1 disponible en la edici\u00f3n Professional de Hackolade, pero hay disponible una versi\u00f3n de prueba gratuita de 30 d\u00edas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Una vez creado el archivo DDL, puede abrir Hackolade.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En Hackolade, crear\u00e1s\/editar\u00e1s modelos que corresponden a modelos JSON: Couchbase (por supuesto) as\u00ed como DynamoDB y MongoDB. Para este ejemplo, voy a crear un nuevo modelo Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06403-new-couchbase-model-hackolade.gif\" alt=\"Create a new Couchbase model in Hackolade\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En este punto, tienes un nuevo modelo que contiene un \"Nuevo Cubo\". Puede utilizar Hackolade como herramienta de dise\u00f1o para representar visualmente los tipos de documentos que va a colocar en el cubo, las relaciones con otros documentos, etc.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Ya tenemos un modelo relacional y un archivo DDL de SQL Server, as\u00ed que veamos qu\u00e9 puede hacer Hackolade con \u00e9l.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_reverse_engineer_sql_to_json_data_modeling\">Modelado de datos SQL a JSON mediante ingenier\u00eda inversa<\/h3>\n<div class=\"paragraph\">\n<p>En Hackolade, vaya a Herramientas \u2192 Ingenier\u00eda inversa \u2192 Archivo de lenguaje de definici\u00f3n de datos. Se le pedir\u00e1 que seleccione un tipo de base de datos y una ubicaci\u00f3n de archivo DDL. Yo seleccionar\u00e9 \"MS SQL Server\" y el archivo \"script.sql\" de antes. Por \u00faltimo, pulsar\u00e9 \"Aceptar\" para dejar que Hackolade haga su magia.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5688 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06404-reverse-engineer-sql-ddl-hackolade-compressor.gif\" alt=\"\" width=\"650\" height=\"414\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Hackolade procesar\u00e1 las 5 tablas en 5 tipos diferentes de documentos. As\u00ed, lo que se obtiene es algo muy parecido a un <em>literal<\/em> traducci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06405-reverse-engineer-diagram.png\" alt=\"SQL to JSON data modeling reverse engineering with Hackolade result\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Este diagrama te da una vista de tu modelo. Pero ahora puedes pensar en \u00e9l como un lienzo para construir tu modelo JSON definitivo. Hackolade te da algunas herramientas para ayudarte.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_denormalization\">Desnormalizaci\u00f3n<\/h3>\n<div class=\"paragraph\">\n<p>Por ejemplo, Hackolade puede hacer sugerencias sobre la desnormalizaci\u00f3n al hacer el modelado de datos SQL a JSON. Vaya a Herramientas\u2192Sugerir desnormalizaci\u00f3n. Ver\u00e1 una lista de tipos de documentos en \"Selecci\u00f3n de tabla\". Intente seleccionar \"shoppingcart\" y \"shoppingcartitems\". Luego, en la secci\u00f3n \"Par\u00e1metros\", elige \"Array in parent\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06406-suggest-denormalization-hackolade.png\" alt=\"Suggest denormalization in Hackolade\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Despu\u00e9s de hacer esto, ver\u00e1 que el diagrama se ve diferente. Ahora, los art\u00edculos est\u00e1n incrustados en un array en shoppingcart, y hay l\u00edneas discontinuas que van a shoppingcartitems. En este punto, podemos eliminar shoppingcartitems del modelo (en algunos casos es posible que desee dejarlo, es por eso que Hackolade no lo elimina autom\u00e1ticamente al hacer el modelado de datos SQL a JSON).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06407-remove-table-hackolade.gif\" alt=\"Remove excess table in Hackolade\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>F\u00edjate en que aqu\u00ed tambi\u00e9n hay otras opciones:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><strong>Incrustar matriz en matriz<\/strong> - Esto es lo que se ha demostrado anteriormente.<\/li>\n<li><strong>Incrustaci\u00f3n de un subdocumento en un documento hijo<\/strong> - Si desea modelar de la manera opuesta (por ejemplo, almacenar la cesta de la compra dentro del art\u00edculo de la cesta de la compra).<\/li>\n<li><strong>Incorporaci\u00f3n de ambos<\/strong> - Ambos array en enfoque padre y subdocumento.<\/li>\n<li><strong>Referenciaci\u00f3n bidireccional<\/strong> - Representar una relaci\u00f3n de muchos a muchos. En las tablas relacionales, esto suele hacerse con una \"tabla de uni\u00f3n\" o \"tabla de asignaci\u00f3n\"<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Tenga en cuenta tambi\u00e9n <strong>en cascada<\/strong>. Esto es para prevenir referencias circulares donde puede haber un padre, un hijo, un nieto, y as\u00ed sucesivamente. Usted selecciona hasta qu\u00e9 punto desea la cascada.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_more_cleanup\">M\u00e1s limpieza<\/h3>\n<div class=\"paragraph\">\n<p>Hay un par de cosas m\u00e1s que puedo hacer para limpiar este modelo.<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><strong>A\u00f1adir un campo \"tipo<\/strong>. En Couchbase, puede que necesitemos distinguir los documentos del carrito de la compra de otros documentos. Una forma de hacerlo es a\u00f1adir un campo \"discriminador\", normalmente llamado 'type' (pero puedes llamarlo como quieras). Puedo darle un valor \"por defecto\" en Hackolade \"shoppingcart\".<\/li>\n<li><strong>Eliminar el campo 'id' de la matriz incrustada<\/strong>. La tabla SQL necesitaba este campo para una relaci\u00f3n de clave externa. Como todo est\u00e1 incrustado en un \u00fanico documento, ya no necesitamos este campo.<\/li>\n<li><strong>Cambia el nombre del array a 'items<\/strong>. Una vez m\u00e1s, dado que la cesta de la compra est\u00e1 consolidada en un \u00fanico documento, no necesitamos llamarla 'shoppingcartitems'. Basta con \"art\u00edculos\".<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06408-clean-up-json-data-model.png\" alt=\"Clean up JSON data model in Hackolade\" \/><\/span><\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_output\">Salida<\/h3>\n<div class=\"paragraph\">\n<p>Un modelo de este tipo puede ser un documento vivo en el que trabaje su equipo. Los modelos de Hackolade se almacenan como documentos JSON. Puedes compartirlos con los miembros del equipo, registrarlos en el control de c\u00f3digo fuente, etc.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n puede utilizar Hackolade para generar documentaci\u00f3n est\u00e1tica sobre el modelo. Esta documentaci\u00f3n puede utilizarse para guiar el desarrollo y la arquitectura de la aplicaci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Vaya a Archivo \u2192 Generar documentaci\u00f3n \u2192 HTML\/PDF. Puede elegir qu\u00e9 componentes incluir en la documentaci\u00f3n.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">Resumen<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Hackolade es una herramienta de modelado NoSQL creada por la empresa IntegrIT. Es \u00fatil no s\u00f3lo en la construcci\u00f3n de modelos desde cero, sino tambi\u00e9n en la ingenier\u00eda inversa para el modelado de datos SQL a JSON. Hay muchas otras caracter\u00edsticas sobre Hackolade que no he cubierto en este post. Te animo a <a href=\"https:\/\/hackolade.com\/\">descargue hoy mismo una versi\u00f3n de prueba gratuita de Hackolade<\/a>. Tambi\u00e9n puede encontrar <a href=\"https:\/\/twitter.com\/hackolade\">Hackolade en Twitter @hackolade<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si tiene alguna pregunta sobre Couchbase Server, h\u00e1gala en la secci\u00f3n <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\">Foros de Couchbase<\/a>. Consulte tambi\u00e9n el <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/\">Portal para desarrolladores de Couchbase<\/a> para obtener m\u00e1s informaci\u00f3n sobre Couchbase para desarrolladores. No dude en <a href=\"https:\/\/twitter.com\/mgroves\">p\u00f3ngase en contacto conmigo en Twitter @mgroves<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>SQL to JSON data modeling is something I touched on in the first part of my &#8220;Moving from SQL Server to Couchbase&#8221; series. Since that blog post, some new tooling has come to my attention from Hackolade, which has recently [&hellip;]<\/p>","protected":false},"author":71,"featured_media":3251,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1819,1812],"tags":[1261,1556],"ppma_author":[8937],"class_list":["post-3242","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-data-modeling","category-n1ql-query","tag-json","tag-sql-server"],"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>SQL to JSON Data Modeling with Hackolade - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Walkthrough of a very simple SQL to JSON data modeling exercise and show how IntegrIT&#039;s Hackolade can help.\" \/>\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\/sql-to-json-data-modeling-hackolade\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL to JSON Data Modeling with Hackolade\" \/>\n<meta property=\"og:description\" content=\"Walkthrough of a very simple SQL to JSON data modeling exercise and show how IntegrIT&#039;s Hackolade can help.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/sql-to-json-data-modeling-hackolade\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-13T18:15:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:29:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/064-hero-model.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2048\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"SQL to JSON Data Modeling with Hackolade\",\"datePublished\":\"2017-04-13T18:15:06+00:00\",\"dateModified\":\"2025-06-14T02:29:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/\"},\"wordCount\":1307,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/064-hero-model.png\",\"keywords\":[\"JSON\",\"SQL Server\"],\"articleSection\":[\"Couchbase Server\",\"Data Modeling\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/\",\"name\":\"SQL to JSON Data Modeling with Hackolade - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/064-hero-model.png\",\"datePublished\":\"2017-04-13T18:15:06+00:00\",\"dateModified\":\"2025-06-14T02:29:05+00:00\",\"description\":\"Walkthrough of a very simple SQL to JSON data modeling exercise and show how IntegrIT's Hackolade can help.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/064-hero-model.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/064-hero-model.png\",\"width\":2048,\"height\":1024,\"caption\":\"Glass ochem by Purpy Pupple, licensed through Creative Commons https:\/\/commons.wikimedia.org\/wiki\/File:Glass_ochem.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL to JSON Data Modeling with Hackolade\"}]},{\"@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\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Modelado de datos de SQL a JSON con Hackolade - El blog de Couchbase","description":"Walkthrough of a very simple SQL to JSON data modeling exercise and show how IntegrIT's Hackolade can help.","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\/sql-to-json-data-modeling-hackolade\/","og_locale":"es_MX","og_type":"article","og_title":"SQL to JSON Data Modeling with Hackolade","og_description":"Walkthrough of a very simple SQL to JSON data modeling exercise and show how IntegrIT's Hackolade can help.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/sql-to-json-data-modeling-hackolade\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-04-13T18:15:06+00:00","article_modified_time":"2025-06-14T02:29:05+00:00","og_image":[{"width":2048,"height":1024,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/064-hero-model.png","type":"image\/png"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"SQL to JSON Data Modeling with Hackolade","datePublished":"2017-04-13T18:15:06+00:00","dateModified":"2025-06-14T02:29:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/"},"wordCount":1307,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/064-hero-model.png","keywords":["JSON","SQL Server"],"articleSection":["Couchbase Server","Data Modeling","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/","url":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/","name":"Modelado de datos de SQL a JSON con Hackolade - El blog de Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/064-hero-model.png","datePublished":"2017-04-13T18:15:06+00:00","dateModified":"2025-06-14T02:29:05+00:00","description":"Walkthrough of a very simple SQL to JSON data modeling exercise and show how IntegrIT's Hackolade can help.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/064-hero-model.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/064-hero-model.png","width":2048,"height":1024,"caption":"Glass ochem by Purpy Pupple, licensed through Creative Commons https:\/\/commons.wikimedia.org\/wiki\/File:Glass_ochem.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/sql-to-json-data-modeling-hackolade\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL to JSON Data Modeling with Hackolade"}]},{"@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\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3242","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\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=3242"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3242\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/3251"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=3242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=3242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=3242"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=3242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}