Diseño de base de datos: ¿Cuál es la mejor manera de almacenar la configuración del usuario en una base de datos?

Como de costumbre, depende 🙂 Depende de lo que quieras hacer con tus datos.

Diría que su opción 1 es la que debería evitar más, en realidad es un antipatrón (antipatrón de valor de atributo de entidad) y tiene muchos problemas:

  • No es fácil hacer que los atributos sean obligatorios
  • No puede aplicar Tipos de datos (la columna Valor debe ser una cadena) o integridad referencial
  • Es difícil consultar todo como una “fila”
  • etc.

La opción 2 es en realidad una solución aceptable para el antipatrón EAV de la Opción 1 y se llama Herencia de tabla de concreto , sin embargo, esto viene con su propio conjunto de desafíos, probablemente el más problemático en este caso, el hecho de que probablemente desee (en algún lugar) mostrar y, por lo tanto, consultar todas las configuraciones de los usuarios, eso es un montón de (¡externo!) uniones, y ¿qué pasa si necesita agregar una nueva configuración? Nueva tabla, actualice todas esas consultas, etc. Esta es una buena alternativa si no necesita consultar todas las configuraciones (lo que supongo que quiere hacer)

La opción 3 también es aceptable y se llama Serialized LOB . Es útil si no tiene un límite finito de Configuración y desea poder definir otras nuevas en cualquier momento . Sin embargo, el problema es que no puede consultar fácilmente una estructura de este tipo, tiene un soporte SQL muy limitado, por lo que deberá escribir código que lo admita.

Así que elige tu veneno 🙂

Yo diría, almacenar en la base de datos, olvidar XML para datos de usuario.

Los “usuarios” suelen ser uno de los conjuntos de datos más importantes y no pasará mucho tiempo hasta que necesite crear muchas otras tablas que se vinculen con los usuarios. Esta tabla recibirá muchas consultas, y debe facilitarle la vida accediendo a ella con procedimientos almacenados, vistas, etc.

Las cosas que almacenaría en XML son aquellas que no consultaría a diario, no datos importantes como usuarios.

Habiendo dicho eso:

Tabla de usuario
———–
ID de usuario
SettingID (clave externa para la tabla de configuración, ver más abajo)
UserDetailID: dirección, información personal, preferencia de café, etc.

Mesa de ajuste
————
SettingID
SettingEmailID (FK a la tabla SettingEmail)
SettingAlertID

Configuración de la tabla de correo electrónico
———————
SettingEmailID
EmailDetail1
EmailDetail 2
SomeOtherColumnGoesHere
Etc

Tabla de alertas
———————-
SettingAlertID
AlertDetail1
whateverforalert2

De esta manera, los tiene muy bien organizados, su usuario tiene un Id. De configuración, y desde allí obtiene todas las configuraciones que necesita.

Cuando descubra una nueva configuración que necesita, cree una tabla SettingNew, y Setting table obtiene un SettingNewID.

More Interesting

¿Cuántos idiomas se supone que los desarrolladores de software deben saber?

¿Es cierto que hay más espacio para aprender y crecer dentro de los límites de lenguajes como C ++ y Java y, por lo tanto, alcanzar un techo de compensación mucho más alto?

¿Qué importancia tienen las matemáticas discretas para la ciencia de datos o el desarrollo de software?

¿Cuál es la diferencia entre el desarrollador de Java y el desarrollador de software?

¿Cuál es la diferencia entre el gerente de desarrollo de software y el desarrollador de software?

¿Cómo puede un ingeniero de software mejorar el crecimiento de los usuarios?

¿Cuál es la mejor manera de entrevistar a un posible desarrollador de software externo?

¿Dónde está el mejor lugar para vivir para un desarrollador de software?

¿Cuál es el mejor campo de desarrollo de software para perseguir?

¿Cuáles son las razones para no pasar de la pila de Rails a la pila MEAN?

¿Los desarrolladores de Pega tienen un mejor paquete que los desarrolladores de Java?

¿Por qué no estoy respondiendo para una pasantía de desarrollador de software después de solicitar una pasantía (Detalles incluidos)?

Cómo ganar experiencia como desarrollador de software fuera de la universidad

Trabajaré como desarrollador de software en aproximadamente un mes. ¿Qué puedo hacer para mantener mis habilidades afiladas y prepararme para el mundo real en general?

¿Quiénes son los desarrolladores de aplicaciones independientes en Singapur?