Diseño de tablas para almacenar información de usuario, licencia, etc.

Diseño de tablas para almacenar información de usuario, licencia, etc.

Actualmente estoy agregando Google Firestore en mi aplicación para poder almacenar preferencias de usuario, licencias y otros metadatos. También tengo la configuración de autenticación de Google, por lo que puedo rastrear si el usuario está registrado o no.

Al no ser un experto en bases de datos/NoSQL, cualquier sugerencia de diseño sería muy apreciada.

Necesito almacenar lo siguiente, y probablemente más adelante:

  • Instalación/licencia de la aplicación (múltiples plataformas: iOS, macOS, etc.)
  • Compras dentro de la aplicación (para poder restaurarlas desde otra plataforma)
  • Preferencias del usuario, para que puedan reutilizarse en otra plataforma y con fines de copia de seguridad

Estoy pensando en este diseño simple:

/users (collection)
     |
     +-- {user_XXXXXX} <- what should be used here? e-mail? generated ID?
             |
             +--- app_licenses (collection)
                      |
                      + {license_XXX} <-- incremental id? auto-generated?
                      |    |
                      |    +-- platform : ios / macos / ...
                      |    +-- installation_id : device id ?
                      + {license_XXX} <--- incremental id? auto-generated?
                      |    +-- platform : ios / macos / ...
                      |    +-- installation_id : device id ?
                      |
             +--- iap_purchases (collection)
                      |
                      + {iap_XXX} <--- incremental id? auto-generated?
                           |
                           +-- name : unique identifier (title/name)
                           +-- transaction_id 
                           +-- date : purchase date
             +--- prefs
                    |
                    + fav_color : red / blue / ...
                    + another_pref : ....

¡Gracias!

Mostrar la mejor respuesta

Un buen documento para diseñar de forma segura una base de datos de Firestore está disponible aquí: firebase.google.com/docs/ base de datos/seguridad

Tu diseño hasta ahora me parece bien.

Respecto a su nivel de usuario root: ¿La información para agregar del usuario debe iniciar sesión a través de firebase? Si es así, usaría el UID del usuario de firebase. Se garantiza que es único y solo se puede recuperar después de la autenticación. Aquí hay una pregunta de desbordamiento de pila al respecto.

Si no está necesariamente almacenando usuarios que iniciaron sesión a través de firebase, todavía usaría algún tipo de identificación incrementada automáticamente o GUID. Solo asegúrese de evitar la posibilidad de que se generen identificaciones duplicadas.

Evitaría usar el correo electrónico porque quizás más adelante desee agregar varios correos electrónicos o incluso números de teléfono como información de contacto.

En cuanto a las licencias y las compras de aplicaciones: no estoy muy familiarizado con firestore, el incremento automático de identificaciones me parece solo una cuestión de SQL, pero si lo tiene disponible, creo eso es aceptable Los GUID también funcionarían.

Sí, el usuario debe iniciar sesión, por lo que puedo usar el UID de Firebase como sugiere.