Абсолютно изискване ли е те да добавят колони към таблицата , или просто да могат да посочват допълнителни полета за съхраняване? Горещо препоръчвам да обмислите нещо като Entity-Attribute-Value, вместо да позволявате на крайния потребител (администраторите се считат за крайни потребители) да прави промени в схемата.
За нещо подобно ще имате таблица, за да дефинирате вашите персонализирани полета, след това таблица за асоцииране много към много, за да позволите на потребителя да посочи стойност за персонализирано поле за контакта. Например:
Contact
---------
-> ContactId
| FirstName
| LastName
| etc.
|
| ContactField
| --------------
| ContactFieldId <---
| FieldName |
| |
| ContactFieldValue |
| ------------------- |
-- ContactId |
ContactFieldId -------------------------
Value
Спецификата на изпълнението очевидно зависи от вас (например дали да използвате ContactId + ContactFieldId
като съставен първичен ключ в ContactFieldValue
), но това трябва да разясни общата идея.