Descripción de documentos - Amazon DocumentDB

Descripción de documentos

Las bases de datos de documentos se utilizan para almacenar datos semiestructurados como un documento en lugar de normalizar los datos entre varias tablas, cada una con una estructura única y fija, como en una base de datos relacional. Los documentos almacenados en una base de datos documental usan pares de clave-valor anidados para proporcionar la estructura o el esquema del documento. Sin embargo, se pueden almacenar diferentes tipos de documentos en la misma base de datos documental, cumpliendo así el requisito de procesar datos similares que tienen diferentes formatos. Por ejemplo, como cada documento es autodescriptivo, los documentos codificados en JSON para una tienda online que se describen en el tema Documentos de ejemplo en una base de datos de documentos se pueden almacenar en la misma base de datos documental.

Terminología SQL frente a terminología no relacional

En la tabla siguiente se compara la terminología utilizada en las bases de datos documentales (MongoDB) con la terminología utilizada en las bases de datos SQL.

SQL MongoDB

Tabla

Recopilación

Fila

Documento

Columna

Campo

Clave principal

ObjectId

Índice

Índice

Visualización

Visualización

Tabla u objeto anidado

Documento incrustado

Matriz

Matriz

Documentos simples

Todos los documentos de una base de datos documental son autodescriptivos. En esta documentación, se utilizan documentos con formato JSON, pero se podrían usar otros medios de codificación.

Un documento simple tiene uno o varios campos que están en el mismo nivel del documento. En el siguiente ejemplo, los campos SSN, LName, FName, DOB, Street, City, State-Province, PostalCode y Country son todos elementos del mismo nivel en el documento.

{ "SSN": "123-45-6789", "LName": "Rivera", "FName": "Martha", "DOB": "1992-11-16", "Street": "125 Main St.", "City": "Anytown", "State-Province": "WA", "PostalCode": "98117", "Country": "USA" }

Cuando la información está organizada en un documento simple, cada campo se administra por separado. Para recuperar la dirección de una persona, debe recuperar Street, City, State-Province, PostalCode y Country como elementos de datos individuales.

Documentos incrustados

Un documento complejo organiza sus datos mediante la creación de documentos incrustados en el documento. Los documentos incrustados ayudan a administrar los datos en grupos y como elementos de datos individuales, lo que sea más eficaz para cada caso. Utilizando el ejemplo anterior, podría incrustar un documento Address en el documento principal, lo que produciría la siguiente estructura de documentos:

{ "SSN": "123-45-6789", "LName": "Rivera", "FName": "Martha", "DOB": "1992-11-16", "Address": { "Street": "125 Main St.", "City": "Anytown", "State-Province": "WA", "PostalCode": "98117", "Country": "USA" } }

Ahora puede obtener acceso a los datos del documento como campos individuales ( "SSN": ), como un documento incrustado ( "Address": ) o como un miembro de un documento incrustado ( "Address":{"Street":} ).

Documentos de ejemplo en una base de datos de documentos

Como se indicó anteriormente, puesto que cada documento de una base de datos documental es autodescriptivo, la estructura de los documentos de una base de datos documental puede ser diferente. Los siguientes dos documentos, uno para un libro y otro para una publicación periódica, son diferentes estructuralmente. Sin embargo, ambos pueden estar en la misma base de datos documental.

A continuación, se muestra un documento de libro de ejemplo:

{ "_id" : "9876543210123", "Type": "book", "ISBN": "987-6-543-21012-3", "Author": { "LName":"Roe", "MI": "T", "FName": "Richard" }, "Title": "Understanding Document Databases" }

A continuación, se muestra un documento de publicación periódica de ejemplo con dos artículos:

{ "_id" : "0123456789012", "Publication": "Programming Today", "Issue": { "Volume": "14", "Number": "09" }, "Articles" : [ { "Title": "Is a Document Database Your Best Solution?", "Author": { "LName": "Major", "FName": "Mary" } }, { "Title": "Databases for Online Solutions", "Author": { "LName": "Stiles", "FName": "John" } } ], "Type": "periodical" }

Compare la estructura de estos dos documentos. Con una base de datos relacional, necesita separar las tablas "periodical" y "books", o una sola tabla con los campos no utilizados, como "Publication," "Issue," "Articles" y "MI", como valores null. Como las bases de datos documentales son semiestructuradas, en las que cada documento define su propia estructura, estos dos documentos pueden coexistir en la misma base de datos documental sin campos null. Las bases de datos documentales son adecuadas para trabajar con datos dispersos.

El desarrollo de una base de datos documental permite el desarrollo rápido e iterativo. Esto se debe a que puede cambiar la estructura de los datos de un documento de forma dinámica, sin tener que cambiar el esquema de toda la colección. Las bases de datos documentales están especialmente indicadas para un desarrollo ágil y para entornos que cambian dinámicamente.

Descripción de la normalización en una base de datos de documentos

Las bases de datos documentales no están normalizadas; los datos que se encuentran en un documento se pueden repetir en otro documento. Asimismo, puede haber discrepancias de datos entre los documentos. Considere, por ejemplo, un escenario en el que realiza una compra en una tienda online y todos los detalles de sus compras se almacenan en un único documento. El documento podría tener un aspecto similar al siguiente documento JSON:

{ "DateTime": "2018-08-15T12:13:10Z", "LName" : "Santos", "FName" : "Paul", "Cart" : [ { "ItemId" : "9876543210123", "Description" : "Understanding Document Databases", "Price" : "29.95" }, { "ItemId" : "0123456789012", "Description" : "Programming Today", "Issue": { "Volume": "14", "Number": "09" }, "Price" : "8.95" }, { "ItemId": "234567890-K", "Description": "Gel Pen (black)", "Price": "2.49" } ], "PaymentMethod" : { "Issuer" : "MasterCard", "Number" : "1234-5678-9012-3456" }, "ShopperId" : "1234567890" }

Toda esta información se almacena como un documento en una colección de transacciones. Posteriormente, se da cuenta de que ha olvidado comprar un artículo. Así que vuelve a iniciar sesión en la misma tienda y realiza otra compra, que también se almacena como otro documento en la colección de transacciones.

{ "DateTime": "2018-08-15T14:49:00Z", "LName" : "Santos", "FName" : "Paul", "Cart" : [ { "ItemId" : "2109876543210", "Description" : "Document Databases for Fun and Profit", "Price" : "45.95" } ], "PaymentMethod" : { "Issuer" : "Visa", "Number" : "0987-6543-2109-8765" }, "ShopperId" : "1234567890" }

Observe la redundancia entre estos dos documentos: su nombre y el ID de comprador (y, si utilizó la misma tarjeta de crédito, la información de la tarjeta de crédito). Pero eso no es un problema, porque el almacenamiento es barato y cada documento registra completamente una transacción que se puede recuperar rápidamente con una sencilla consulta de clave-valor que no requiere uniones.

También hay una discrepancia aparente entre los dos documentos: la información de su tarjeta de crédito. Esta solo es una discrepancia aparente, ya que es probable que utilizara una tarjeta de crédito diferente para cada compra. Cada documento es correcto para la transacción que documenta.