sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cuál es la mejor manera de permitir que un usuario agregue columnas a su base de datos sobre la marcha?

¿Es un requisito absoluto que agreguen columnas a la tabla , o simplemente que puedan especificar campos adicionales para almacenar? Le sugiero encarecidamente que considere algo como Entidad-Atributo-Valor en lugar de permitir que el usuario final (los administradores cuentan como usuarios finales) realice cambios en el esquema.

Para algo como esto, tendría una tabla para definir sus campos personalizados, luego una tabla de asociación de muchos a muchos para permitir que el usuario especifique un valor para un campo personalizado para el contacto. Por ejemplo:

    Contact
    ---------
 -> ContactId
|   FirstName
|   LastName
|   etc.
|
|                        ContactField
|                        --------------
|                        ContactFieldId <---
|                        FieldName          |
|                                           |
|   ContactFieldValue                       |
|   -------------------                     |
 -- ContactId                               |
    ContactFieldId -------------------------
    Value

Los detalles de la implementación obviamente dependen de usted (por ejemplo, si usar ContactId + ContactFieldId como clave principal compuesta en ContactFieldValue ), pero esto debería transmitir la idea general.