Je absolutním požadavkem, aby přidali do tabulky sloupce? , nebo jen to, že budou moci zadat další pole k uložení? Důrazně bych vám doporučil zvážit něco jako Entity-Attribute-Value spíše než umožnit koncovému uživateli (správci se počítají jako koncoví uživatelé) provádět změny schématu.
K něčemu takovému byste měli tabulku pro definování vlastních polí a potom tabulku přidružení many-to-many, která uživateli umožní zadat hodnotu pro vlastní pole pro kontakt. Například:
Contact
---------
-> ContactId
| FirstName
| LastName
| etc.
|
| ContactField
| --------------
| ContactFieldId <---
| FieldName |
| |
| ContactFieldValue |
| ------------------- |
-- ContactId |
ContactFieldId -------------------------
Value
Specifika implementace jsou samozřejmě na vás (například zda použijete ContactId + ContactFieldId
jako složený primární klíč v ContactFieldValue
), ale to by mělo objasnit obecnou představu.