Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Qual é a melhor maneira de permitir que um usuário adicione colunas ao banco de dados dinamicamente?


É um requisito absoluto que eles adicionem colunas à tabela , ou apenas que eles possam especificar campos adicionais para armazenar? Eu sugiro fortemente que você considere algo como Entity-Attribute-Value em vez de permitir que o usuário final (os administradores contam como usuários finais) faça alterações no esquema.

Para algo assim, você teria uma tabela para definir seus campos personalizados e, em seguida, uma tabela de associação de muitos para muitos para permitir que o usuário especifique um valor para um campo personalizado para o contato. Por exemplo:
    Contact
    ---------
 -> ContactId
|   FirstName
|   LastName
|   etc.
|
|                        ContactField
|                        --------------
|                        ContactFieldId <---
|                        FieldName          |
|                                           |
|   ContactFieldValue                       |
|   -------------------                     |
 -- ContactId                               |
    ContactFieldId -------------------------
    Value

As especificidades da implementação obviamente dependem de você (por exemplo, se deve usar ContactId + ContactFieldId como uma chave primária composta em ContactFieldValue ), mas isso deve transmitir a ideia geral.