Är det ett absolut krav att de lägger till kolumner i tabellen , eller bara att de kan ange ytterligare fält att lagra? Jag rekommenderar starkt att du överväger något som Entity-Attribute-Value istället för att låta slutanvändaren (admins räknas som slutanvändare) göra schemaändringar.
För något sådant här skulle du ha en tabell för att definiera dina anpassade fält, sedan en många-till-många-associeringstabell för att tillåta användaren att ange ett värde för ett anpassat fält för kontakten. Till exempel:
Contact
---------
-> ContactId
| FirstName
| LastName
| etc.
|
| ContactField
| --------------
| ContactFieldId <---
| FieldName |
| |
| ContactFieldValue |
| ------------------- |
-- ContactId |
ContactFieldId -------------------------
Value
Detaljerna för implementeringen är uppenbarligen upp till dig (till exempel om du ska använda ContactId + ContactFieldId
som en sammansatt primärnyckel i ContactFieldValue
), men det här borde förmedla den allmänna uppfattningen.