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.