Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Qual è il modo migliore per consentire a un utente di aggiungere colonne al proprio database al volo?

È un requisito assoluto che aggiungano colonne alla tabella o semplicemente che possono specificare campi aggiuntivi da memorizzare? Ti suggerisco caldamente di prendere in considerazione qualcosa come Entity-Attribute-Value piuttosto che consentire all'utente finale (gli amministratori contano come utenti finali) di apportare modifiche allo schema.

Per qualcosa del genere, avresti una tabella per definire i tuoi campi personalizzati, quindi una tabella di associazione molti-a-molti per consentire all'utente di specificare un valore per un campo personalizzato per il contatto. Ad esempio:

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

Le specifiche di implementazione dipendono ovviamente da te (ad esempio, se utilizzare ContactId + ContactFieldId come chiave primaria composta in ContactFieldValue ), ma questo dovrebbe far passare l'idea generale.