Las mejores prácticas de DyanmoDB dejan en claro que:
Debe mantener la menor cantidad de tablas posible en una aplicación DynamoDB. La mayoría de las aplicaciones bien diseñadas requieren solo una tabla.
Me resulta divertido que casi todos los tutoriales que he visto sobre DyanmoDB tienen un diseño de varias tablas.
Pero ¿qué significa esto en la práctica?
Consideremos una aplicación simple con tres entidades principales: Usuarios, Proyectos y Documentos. Un usuario posee múltiples proyectos, y un proyecto puede tener múltiples documentos. Por lo general, tenemos que consultar los proyectos para un usuario y los documentos para un proyecto. Las lecturas superan en número a las escrituras por un margen significativo.
El diseño de tabla de un tutorial ingenuo usaría tres tablas:
Users
Hash key
user-id
Projects
Hash key Global Index
project-id user-id
Documents
Hash key Global Index
document-id project-id
Podríamos muy fácilmente colapsar Project
y Document
en una Documents
tabla:
Documents
Hash key Sort key Global Index
project-id document-id user-id
¿Pero por qué parar allí? ¿Por qué no una mesa para gobernarlos a todos? Como el User
es la raíz de todo ...
Users
Hash key Sort key
user-id aspect
--------- ---------
foo user email: foo@bar.com ...
foo project:1 title: "The Foo Project"
foo project:1:document:2 document-id: 2 ...
Entonces tendríamos un Índice Global en, digamos, el email
campo para búsquedas de registros de usuarios, y otro en el document-id
campo para búsquedas directas de documentos.
¿Es así como se supone que debe funcionar? ¿Es legítimo arrojar datos tan divergentes en la misma tabla? ¿O es el segundo diseño de dos tablas un mejor enfoque?
¿En qué punto sería correcto agregar una segunda tabla?