2010-12-27 16 views
7

Tengo configuraciones para el usuario de aproximadamente 200 configuraciones, que incluyen configuraciones de aviso y ajustes de seguimiento de actividades de usuario en objetos. El problema es cómo almacenarlo en la base de datos? ¿Cada configuración debe ser una fila o una columna? Si colunm, la mesa tendrá 200 colunms. Si la fila es de aproximadamente 3 colunms pero 200 filas por usuario x incluso 10 millones de usuarios = no es bueno.Almacenar la configuración del usuario en la tabla, ¿cómo?

Entonces, ¿cómo más puedo almacenar todas estas configuraciones? NOTA: estas configuraciones son una combinación de entradas de texto y FK a otras tablas.

Gracias.

+0

Si no necesita buscar en algún campo, puede serializarlos y almacenarlos todos en un solo campo de texto. Para mí, crear una columna por campo está bien. Para mejorar la búsqueda/selección, puede dividirlos en varias tablas como user_profile, user_inteface_settings, user _... (tablas que se pueden usar de forma independiente). - Crear una tabla genérica que contenga configuraciones: una por fila como (uid, field, value) es útil si tiene muchos campos opcionales y podría dar como resultado una tabla de 200 * 10 000 000 = 2 000 000 000 rows. –

+1

Mdillion: solo para recordarle que debe 'aceptar' la respuesta que más le ayudó. –

+0

Mi problema aún no está resuelto. Hay tantas configuraciones y las dos formas mencionadas aquí no funcionan correctamente. Así que estoy explorando otras opciones y una vez que encuentre algo, aceptaré la respuesta más cercana. – Mdillion

Respuesta

3

Que tiene la configuración 200 para realizar un seguimiento sugiere un esquema de base de datos flexible. Como tal me gustaría sugerir un enfoque híbrido:

  1. Usuarios: mesa con la fila por usuario para las propiedades que un usuario probablemente siempre será tener, tales como nombre de usuario y contraseña. Esta tabla también puede mantener claves foráneas, pero esto es una heurística y también depende si la relación es de cero a uno o de cero a muchos. Donde este último requiere una tabla separada.
  2. Características: dos opciones
    1. de mesa con fila por cada función, efectivamente, una tabla hash con identificador de usuario, nombre y valor columnas. Esto también podría ser un lugar para las relaciones extranjeras, pero no sería capaz de aplicar la integridad de los datos en esta configuración.
    2. XML, pero sólo con una base de datos que tiene características que le permiten consultar los datos o sólo para los datos que no necesita consultar, pero sólo trabaja con el servidor de aplicaciones.

Creo que la respuesta más grande es que no van a llegar a una solución a partir de su pregunta original, sino que es necesario utilizar tanto para adaptarse a los datos.

+0

¿cuál es la leer el tiempo si la tabla tiene decir 10 millones de filas y necesita encontrar 200 configuraciones para que un usuario cargue la página de configuración? ¿El usuario verá la página al instante o tardará un minuto en buscar y cargar la página del usuario? – Mdillion

+0

Con los índices correctos, el tiempo de lectura debería ser bueno. Dicho eso, sugiero cargar información una vez al iniciar sesión como parte de la sesión del usuario en lugar de repetir los viajes a la base de datos cada vez que un permiso necesita verificación. – orangepips

2

creo 200 columnas definitivamente no es buena idea, debido a la dificultad para escribir procedimientos almacenados, de forma manual la visualización de datos o se extiendan a más ajustes más adelante.

Se puede tratar XML para todos estos ajustes y 200, entonces tendrá solamente 1 fila por cada usuario. nombre de usuario y configuración correspondiente xml. Pero de nuevo limitará sus capacidades de consulta, pero los DB ahora son compatibles con XML. Puede consultar XML DBs específicamente.

+0

¿Puedes poner FKs en XML? – Mdillion

+0

No estoy seguro de todos los detalles, pero se puede hacer. Lea esto: http://www.stylusstudio.com/xsllist/200205/post70200.html http://msdn.microsoft.com/en-us/library/ms345117(v=sql.90).aspx –

4

números de serie a los datos casi siempre resulta ser una mala idea, porque al hacerlo Valdés el DBMS. Todos los años que duró la producción de un dbms eficiente serán desperdiciados en una serie de bits serializados.

Si tiene lógica de la aplicación conectada el uno contra el entorno, creo que deberías ponerlo en práctica ya sea como:

columna

1 por la configuración de la tabla de configuración. Esto hace que sea más fácil aprovechar la potencia de su dbms, con control de restricciones, integridad referencial, tipo de datos correctos para sus valores, mucha información para el optimizador. La desventaja es que el tamaño de las filas crece.

o

1 tabla por ajuste (o grupo de ajustes relacionados). Esto tiene todas las ventajas de lo anterior, pero intercambia filas para una penalización de rendimiento cuando necesita recuperar la mayoría o todas las configuraciones a la vez.Cuando la configuración es opcional, esta alternativa será significativamente menor si los datos reales son escasos.

Además, muchas columnas son a menudo un "olor", lo que sugiere que no ha normalizado sus datos correctamente, pero no tiene por qué ser así. Solo tú conoces tus datos.

+0

El lote de columnas se debe a "niveles de privacidad por actividad del usuario". Cada actividad del usuario tiene un nivel de privacidad definido por el usuario y un nivel de privacidad definido por el sistema por defecto. Para la configuración del sistema está bien, pero los ajustes del usuario se salgan de control cuando tenemos 200 actividades cada una con su propia configuración. – Mdillion

Cuestiones relacionadas