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)
- ¿Qué es mejor para una pasantía de desarrollo de software, Five Rings Capital o Microsoft?
- ¿Qué edad tenías cuando comenzaste a programar y dónde estás ahora?
- Soy un desarrollador de copiar y pegar, ¿cómo me convierto en un verdadero desarrollador de software?
- ¿Cuáles son los softwares de cifrado de texto que confirman que los creadores / desarrolladores no pueden ver lo que escribo allí y posiblemente estoy 100% seguro?
- ¿Cuáles son los diferentes dominios en el desarrollo de software?
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 🙂