Alguien sugirió mover una mesa llena de configuración, donde cada columna es un nombre de configuración (o tipo) y las filas son los clientes & sus respectivos ajustes para cada configuración.Diseño Tabla Para systemsettings, Mejor Modelo
ID | IsAdmin | ImagePath
------------------------------
12 | 1 | \ camino \ a \ imágenes
34 | 0 | \ path \ to \ images
La desventaja de esto es que cada vez que queremos un nuevo nombre de configuración (o tipo) alteramos la tabla (a través de sql) y agregamos el nuevo nombre/tipo de configuración (columna). Luego actualice las filas (para que cada cliente tenga ahora un valor para esa configuración).
La nueva propuesta de diseño de mesa. La propuesta es tener una columna para establecer el nombre y otra columna para establecer.
ID | SettingName | SettingValue
----------------------------
12 | IsAdmin | 1
12 | ImagePath | \ camino \ a \ imágenes
34 | IsAdmin | 0
34 | ImagePath | \ camino \ a \ imágenes
El punto que hicieron fue que agregar una nueva configuración era tan fácil como una simple instrucción de inserción en la fila, sin columna agregada.
Pero algo no se siente bien sobre el segundo diseño, se ve mal, pero no puedo llegar a ningún argumento en contra de ella. ¿Me equivoco?
Creo que usar EAV en la configuración está bien. Diseñar su base de datos completa en torno a EAV es una historia completamente diferente y no de lo que OP preguntó. Pero no veo la base de datos de documentos fundamentalmente diferentes desde su punto de vista, y no veo por qué el uso de ellos también podría terminar en lágrimas. –
@Johannes Rudolph: para una tabla de configuración del sistema simple, entonces sí. Al igual que los juegos de aplicaciones en web.config, por ejemplo. Sin embargo, al igual que web.config, utiliza secciones dedicadas para configuraciones más complejas: no expande las aplicaciones. Y, finalmente, empeorará porque alguien pensará "qué gran idea". Diciendo eso, los he usado, pero debes tener cuidado ... – gbn
Gracias por el aviso, esta era una versión (aproximada) de EAV, entre los enlaces y google, debería obtener algo. Parece que hay algunos problemas con la integridad referencial. Como crear una configuración DefaultReportID, 10 cuando exista en la tabla de informes del 1 al 9. –