Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Quelle est la meilleure façon de permettre à un utilisateur d'ajouter des colonnes à sa base de données à la volée ?

Est-ce une exigence absolue qu'ils ajoutent des colonnes au tableau , ou simplement qu'ils puissent spécifier des champs supplémentaires à stocker ? Je vous suggère fortement d'envisager quelque chose comme Entity-Attribute-Value plutôt que d'autoriser l'utilisateur final (les administrateurs comptent comme des utilisateurs finaux) à apporter des modifications au schéma.

Pour quelque chose comme ça, vous auriez une table pour définir vos champs personnalisés, puis une table d'association plusieurs à plusieurs pour permettre à l'utilisateur de spécifier une valeur pour un champ personnalisé pour le contact. Par exemple :

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

Les spécificités de la mise en œuvre dépendent évidemment de vous (par exemple, si vous souhaitez utiliser ContactId + ContactFieldId en tant que clé primaire composée dans ContactFieldValue ), mais cela devrait faire passer l'idée générale.